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,导入成功,问题解决!

发布了225 篇原创文章 · 获赞 648 · 访问量 89万+

猜你喜欢

转载自blog.csdn.net/huangfei711/article/details/83589264