ubuntu16.04+python+cpu caffe编译全过程


系统配置

ubuntu16.04
python v3.5.2

继上次在win10下安装了caffe后,因为没有服务器的原因又重新尝试在ubuntu下进行编译,结果发现caffe不只是在win10系统下不友好,在ubuntu环境下也不是非常有友好,在编译通过之后,含泪写下此文,引以为戒.
但是网上很多人说每个linux的环境都会不同,所以不一定有效…不一定..有效…hhh

因为第一次详细接触ubuntu,很多概念或描述并不是很准确,还望包涵指正

开始~

注意!!系统最好先不要安装anaconda!!

至于是不是因为这个原因我也不太清楚,但是确实很多资料显示在安装anaconda之后会出现各种麻烦的情况,在我第一天编译的时候也是因为安装了anaconda导致各种形形色色的bug。所以如果是新手还是选择先将anaconda卸载之后在进行下一步。
卸载完全完全不会影响之后的安装的!

  • 首先打开anaconda的安装路径
    比如我的就是 cd /home/jiyali

  • 执行指令 sudo rm -rf anaconda3

  • 到根目录下,打开终端并输入 sudo gedit ~/.bashrc

  • 拉倒最底下,将类似于如下代码全部删掉(网上很多教程是注释掉\export PATH="/home/vision/Softwares/Anaconda3/bin:$PATH",但是打开命令行总会提醒行130:未预期的符号'fi'附近有语法错误,鉴于强迫症就给全删掉了~)

    # added by Anaconda3 5.3.1 installer
    # >>> conda init >>>
    # !! Contents within this block are managed by 'conda init' !!
    __conda_setup="$(CONDA_REPORT_ERRORS=false '/home/vision/Softwares/Anaconda3/bin/conda' shell.bash hook 2> /dev/null)"
    if [ $? -eq 0 ]; then
        \eval "$__conda_setup"
     else
         if [ -f "/home/vision/Softwares/Anaconda3/etc/profile.d/conda.sh" ]; then
             . "/home/vision/Softwares/Anaconda3/etc/profile.d/conda.sh"
             CONDA_CHANGEPS1=false conda activate base
         else
             \export PATH="/home/vision/Softwares/Anaconda3/bin:$PATH"
         fi
     fi
     unset __conda_setup
     # <<< conda init <<<

    删掉后保存并关闭文件

  • 在终端运行source ~/.bashrc

python 版本

  • 首先确定系统中是否存在python3.5版本,在终端运行 cd /usr/bin -> ls,去查看是否存在python3.5

  • 如果存在,尝试建立软连接操作如下

    sudo rm python
    sudo ln -s python3 python
  • 查看python版本是否发生改变,命令行输入 python

下载caffe

命令行执行如下命令

sudo apt-get install git
git clone http://github.com/BVLC/caffe.git

关于libboost1.55

caffe想用python3.5,有libboost>=1.5的要求,依次执行如下命令

sudo apt-get install libboost1.55-dev #一定要安装的
sudo apt-get install libboost1.55-all-dev #不一定要成功,但是一定要执行

各种python的依赖包

在网上大部分的教程中,这一不会提到执行for req in $(cat requirement.txt);do sudo pip3 install $req;done命令,但是这是针对python2.7的,按照这些教程编译一定会出现各种问题,所以我们要用 pip3 来执行,步骤如下:

  • 首先安装 pip3,执行 sudo apt-get install python3-pip,安装成功后,再输入 pip3 --version 确认安装成功
  • 进入 caffe/python (比如我的是在命令端输入 cd /home/jiyali/caffe/python)
  • 执行 for req in $(cat requirements.txt);do sudo pip3 install $req;done
  • 安装结束后退到caffe根目录,查看是否安装成功,执行 sudo pip3 install -r python/requirements.txt
  • ** 如果其中发生任何错误,自行百度解决,我在安装过程中就出现了错误,后来好像是版本问题,因为过程之中没来得及记录,所以在这不再提啦~但是必须保证所有的包安装成功 ***

numpy安装

执行 sudo apt-get install python-numpy

protobuf安装

  • 首先查看当前版本,执行 protoc --version ,如果显示是 3.x 版本应该是没问题,这里不建议版本太高

  • 如果不存在,执行以下指令

    mkdir protobuf && cd protobuf
    mkdir cpp && cd cpp
    wget https://github.com/google/protobuf/releases/download/v3.0.0/protobuf-cpp-3.0.0.tar.gz
    tar xvf protobuf-cpp-3.0.0.tar.gz && cd protobuf-3.0.0
    ./configure && make
    make check
    sudo make install
    sudo ldconfig
    cd ../..
    mkdir python && cd python
    wget https://github.com/google/protobuf/releases/download/v3.0.0/protobuf-python-3.0.0.tar.gz
    tar xvf protobuf-python-3.0.0.tar.gz && cd protobuf-3.0.0/python/
    python setup.py build
    python setup.py test
    python setup.py install
  • 检查当前版本 protoc --version -> sudo protoc --version ,普通用户和root账户最好版本相同

修改 Makefile.config

  • 首先复制一个副本,执行 cp Makefile.config.example Makefile.config

  • 执行 sudo gedit Makefile.config

  • 查找numpy的安装目录,执行 pip show numpy
    查找numpy

  • 将8行改为 CPU_ONLY := 1

  • 查找系统中的 boost_python ,在命令行输入 local boost python
    查找

  • 将81.82行修改为

    PYTHON_LIBRARIES := boost_python-py35 python3.5m
    PYTHON_INCLUDE := /usr/include/python3.5m \
                      /home/jiyali/.local/lib/python3.5/site-packages/numpy/core/include #前半部分是numpy的安装路径

    *** 这些文件目录最好自己亲自检查是不是在这个文件夹下后再修改 ***

  • 将94行改为 WITH_PYTHON_LAYER := 1

  • 将97.98行改为

    INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial/
    LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib/x86_64-linux-gnu/hdf5/serial

配置makefileconfig

编译caffe

*** 如果是第一次编译caffe,没问题,按照下面步骤来就可以了 ***

  • 依次输入以下指令

    sudo make clean
    sudo make all
    sudo make test
    sudo make runtest
    sudo make pycaffe
  • 上面都编译通过后,再执行 sudo make pytest

  • 中间出现的问题,因为我修改了超多所以我把能记得的有效的办法贴一下~

pycaffe添加环境变量

  • 运行 vim ~/.bashrc
  • export PYTHONPATH=/home/wanghh/caffe/python:$PYTHONPATH 加到文件中,保存退出
  • 运行 source ~/.bashrc ,使修改生效

编译中出现的问题解决

  • 之间大部分错误是因为我没有使用 sudo ,这个具体怎么个情况我也不太清楚
  • 错误(make:Nothing to be done for ‘pycaffe’)
    解决:执行 sudo make clean
  • 中间编译的过程中出现了很多错误,一般都是 No Module Named:xxx,要么是模块没有安装,要么是安装了不支持Python3。
    解决:缺啥安啥,执行 sudo pip3 install XXX
  • 错误: Makefile:554:recipe for target’.build_release/lib/libcaffe.so.1.0.0-rc3’failed
    解决: 修改 Makefile 文件 ,将181行改为 LIBRARIES += glog gflags protobuf boost_system boost_filesystem m hdf5_serial_hl hdf5_serial
  • 错误:
Makefile:546:recipe for target 'pytest' failed
make:***[pytest] Error 1

解决:运行 sudo pip3 install matplotlib --upgrade

参考:
(ubuntu16.04)关于caffe+python3.5(非anaconda安装)编译的一些问题
官方github中的issues


文章作者: yali
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 yali !
  目录