1. 程式人生 > >caffe 改動後的重新編譯以及 pycaffe 安裝過程中 warnings 解決

caffe 改動後的重新編譯以及 pycaffe 安裝過程中 warnings 解決

原生的 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,匯入成功,問題解決!