centos编译python3绑定的pycaffe

本文提供了在CentOS环境下使用Python3编译PyCaffe的详细步骤,包括安装Python3、编译OpenCV 3.1.0、Boost-Python3、Protobuf以及Caffe的过程,并分享了一些注意事项。
部署运行你感兴趣的模型镜像

  写在开头:目前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的代码。

您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

### 编译安装 dlib 的详细步骤 在 CentOS 系统上编译安装 dlib 库,需要确保系统环境满足依赖条件,并按照以下方法进行操作。 #### 1. 安装必要的依赖项 在开始编译之前,需要安装一些基础的开发工具和库。可以使用以下命令完成安装: ```bash sudo yum groupinstall "Development Tools" sudo yum install cmake gcc-c++ boost-devel python3-devel numpy ``` 上述命令将安装 CMake、GCC 编译器、Boost 库以及 Python 开发包等必要组件[^1]。 #### 2. 下载 dlib 源码 可以通过多种方式下载 dlib 源码,例如直接从官网获取压缩包或通过 Git 克隆仓库。 - 使用 wget 命令下载压缩包: ```bash wget https://files.pythonhosted.org/packages/05/57/e8a8caa3c89a27f80bc78da39c423e2553f482a3705adc619176a3a24b36/dlib-19.17.0.tar.gz tar -xvzf dlib-19.17.0.tar.gz cd dlib-19.17.0 ``` - 或者通过 Git 克隆源码: ```bash git clone https://github.com/davisking/dlib.git cd dlib ``` #### 3. 配置并编译 dlib 进入 dlib 源码目录后,创建一个构建目录并运行 CMake 进行配置: ```bash mkdir build cd build cmake .. cmake --build . ``` 如果需要支持 Python 绑定,则可以在 CMake 配置时添加相关选项: ```bash cmake .. -DPYTHON_EXECUTABLE=$(which python3) ``` 这一步会生成与 Python 兼容的 dlib 扩展模块[^2]。 #### 4. 安装 dlib 完成编译后,可以将 dlib 安装到系统中: ```bash sudo make install ``` 如果需要通过 pip 安装 dlib 的 Python 包,可以使用以下命令: ```bash pip install dlib-19.17.0.tar.gz ``` 注意:在某些情况下可能需要手动指定 Boost 和其他依赖路径[^3]。 #### 5. 验证安装 安装完成后,可以通过以下命令验证 dlib 是否正确安装: ```bash pip list | grep dlib ``` 如果输出包含类似 `dlib (19.17.0)` 的信息,则说明安装成功[^4]。 --- ### 注意事项 - 如果在编译过程中遇到错误,请检查系统是否已正确安装所有依赖项,并根据具体错误信息调整配置。 - 在 CentOS 系统中,部分依赖可能需要额外配置以避免证书验证问题,例如使用 `--no-check-certificate` 参数。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值