caffe 改動後的重新編譯以及 pycaffe 安裝過程中 warnings 解決
阿新 • • 發佈:2018-12-18
原生的 caffe 包含了一些基本的運算操作,如果要進行一些自定義操作,比如雙線性插值放縮操作、L2 正則化等就需要把相應的實現新增進 caffe 原始碼,由於 caffe 原始碼由 C++ 編寫,修改原始碼後需要重新編譯。下面對具體的編譯過程進行總結:
1. 編譯 caffe.proto 檔案
新增層時,需要在 /src/caffe/proto/caffe.proto 檔案中註冊,因為修改過 caffe.proto,所以需要重新編譯 proto,需要先安裝 protobuf,安裝之後需要編譯 caffe.proto 檔案,生成 caffe.pb.h 和 caffe.pb.cc 檔案。編譯過程如下:
# 確定protobuf的版本 $ protoc --version libprotoc 2.5.0 # 編譯caffe.proto,需要先進入src/caffe/proto目錄下,也可以不進入,指定路徑 $ protoc -I=./ --cpp_out=./ ./caffe.proto # 檢視編譯結果 $ ls caffe.pb.cc caffe.pb.h caffe.proto
2. 編譯 caffe
make clean // 清除編譯結果
make all -j8 // make all 等同於 make, 引數 -j 表示多核操作
3. 編譯 pycaffe
有些時候會用到 caffe 的 python 介面,所以需要重新編譯 pycaffe。
make pycaffe
4. 測試 pycaffe 是否安裝成功
在終端中進入 python 命令列,匯入 caffe 模組,如果提示沒有這個包的話,進到 caffe-master/python/ 路徑下,再次執行上述操作,如果沒有報錯,那就是環境變量出了問題。
修改環境變數只需修改 ~/.bashrc 檔案即可,路徑即為 caffe 目錄下 python 資料夾的路徑:
vim ~/.bashrc
source ~/.bashrc
然後再測試匯入 caffe 是否成功。
筆者今天在 python 命令列中測試匯入 caffe 時遇到了幾個 warning 如下所示:
分析錯誤後給出解決方案如下:
修改 python/caffe 資料夾裡面的 _caffe.cpp 檔案。
把原來的
bp::register_ptr_to_python<shared_ptr<Net<Dtype> > >();
替換為
bp::type_info info; const boost::python::converter::registration* reg; info = boost::python::type_id<shared_ptr<Net<Dtype> > >(); reg = boost::python::converter::registry::query(info); if (reg == NULL) { bp::register_ptr_to_python<shared_ptr<Net<Dtype> > >(); }
相應的還有幾個註冊到 python 的型別,也要做相似的調整:
最後再 make pycaffe,匯入成功,問題解決!