centos编译python3绑定的pycaffe

  写在开头:目前python3版本的pycaffe仍然属于不稳定版本,有很多未知因素,所以还是非常建议使用python2.7编译pycaffe。
  1.python3
  Centos默认不自带python3,在此处安装python3环节中强烈建议使用http://conda.pydata.org/miniconda.html,因为据google结果显示,其他版本最后编译pycaffe时无法正确导入,会提示protobuf错误,详情参考caffe的issue(https://github.com/BVLC/caffe/issues/2464)和protobuf的issue(https://github.com/google/protobuf/issues/1276)。同时安装miniconda3时注意请务必将lib文件夹路径配置在LD_LIBRARY_PATH环境变量或者~/.bash_profile中,加入/etc/ld.so.config可能导致开机无法启动。
    
2.编译opencv3.1.0
  2.1 删除cmake对python2版本的检测(可选)
  在cmake/OpenCVDetectPython.cmake 文件的如下一段话:

  find_python(2.7 "${MIN_VER_PYTHON2}" PYTHON2_LIBRARY PYTHON2_INCLUDE_DIR
    PYTHON2INTERP_FOUND PYTHON2_EXECUTABLE PYTHON2_VERSION_STRING
    PYTHON2_VERSION_MAJOR PYTHON2_VERSION_MINOR PYTHON2LIBS_FOUND
    PYTHON2LIBS_VERSION_STRING PYTHON2_LIBRARIES PYTHON2_LIBRARY
    PYTHON2_DEBUG_LIBRARIES PYTHON2_LIBRARY_DEBUG PYTHON2_INCLUDE_PATH
    PYTHON2_INCLUDE_DIR PYTHON2_INCLUDE_DIR2 PYTHON2_PACKAGES_PATH
    PYTHON2_NUMPY_INCLUDE_DIRS PYTHON2_NUMPY_VERSION)

  其实对本段的删除并不是必须的,但是在我编译时如果不删除就不能正确的检测到python3.5的相关信息。
  
  2.2 编译

  cmake -DWITH_CUDA=OFF -DPYTHON_EXECUTABLE=/usr/local/miniconda3/bin/python -D PYTHON_LIBRARY=/usr/local/miniconda3/lib/libpython3.5m.so  -D PYTHON_NUMPY_INCLUDE_DIRS=/usr/local/miniconda3/lib/python3.5/site-packages/numpy/core/include -D PYTHON_INCLUDE_DIR=/usr/local/miniconda3/include/python3.5m -D BUILD_TESTS=OFF -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D BUILD_DOCS=OFF -DPYTHON_PACKAGES_PATH=/usr/lib/miniconda3/site-packages .
  make && sudo make install 

  注意点1:在执行cmake命令时一定要注意,python3一定要出现在OpenCV modules– To be built一栏中。并注意检查Python 3的Interpreter,Libraries,numpy等信息。
  注意点2:然后经过make之后就可以在lib文件夹下面发现python3文件夹,里面有一个可以被import的so文件。如果make install不能将该so正确的放入到python3的site-package目录中时就自行放入就好了。

 3. 编译boost-python3
   之前在Ubuntu编译时都不需要这个步骤的,但是在Centos上编译到pycaffe最后一步时总是提示-lboost-python3.so不存在,而且没有找到现成的rpm可以直接装,就自己编吧,反正很快。

    wget http://downloads.sourceforge.net/boost/boost_1_61_0.tar.bz2
    tar -jxvf boost_1_61_0.tar.bz2 && cd boost_1_61_0
    ./bootstrap.sh --with-python=/usr/local/python3.5/bin/python3 --prefix=/usr/local/boost
    ./b2 stage threading=multi link=shared
    sudo ./b2 install threading=multi link=shared
   

然后可以看到 libboost-python3.so出现在了/usr/local/boost/lib目录,记得加到ld.so.conf中就ok了。
  4.编译protobuf
  参照https://github.com/google/protobuf/issues/1276
  在下面的评论中有提到一种解决方案:下载并编译安装protobuf的c++和python版本。
  5.编译caffe
  注意调整MakeFile.config中的参数:我调整后的核心参数如下:

    CPU_ONLY := 1
    OPENCV_VERSION := 3
    BLAS := open     #这里我自己编译的openblas,编译特别简单就不说了
    BLAS_INCLUDE := /usr/lib64/openblas/include
    BLAS_LIB := /usr/lib64/openblas/lib
     #如果没有之前编译的boost库,则最后会提示missing -lboost_python3
    PYTHON_LIBRARIES := boost_python3 python3.5m
    PYTHON_INCLUDE := /usr/local/miniconda3/include/python3.5m \
                    /usr/local/miniconda3/lib/python3.5/site-packages/numpy/core/include
    PYTHON_LIB := /usr/local/miniconda3/lib
    WITH_PYTHON_LAYER := 1
    INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/lib64/openblas/include
    LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib64/openblas/lib /usr/local/boost/lib /usr/local/lib

最后执行make all && make pycaffe 即可。

 总结:
 本篇文章写于2016年9月29日,采用master分支最近release candidate 3代码编译完成,最后能成功import caffe.但是当使用predict函数时遇到以下问题未解决:

File "/usr/local/miniconda3/lib/python3.5/site-packages/caffe/classifier.py", line 89, in predict
    out = self.forward_all(**{self.inputs[0]: caffe_in})
  File "/usr/local/miniconda3/lib/python3.5/site-packages/caffe/pycaffe.py", line 175, in _Net_forward_all
    for batch in self._batch(kwargs):
  File "/usr/local/miniconda3/lib/python3.5/site-packages/caffe/pycaffe.py", line 259, in _Net_batch
    num = len(blobs.itervalues().next())
AttributeError: 'dict' object has no attribute 'itervalues'

  因为dict的itervalues方法在python3中被移除,尽管caffe官方一直在努力保持python3的兼容,但暂时不够完美,期待完美兼容python3的代码。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值