zoukankan      html  css  js  c++  java
  • ubuntu16.04, Matlab2016b caffe编译安装

    在Ubuntu上编译安装caffe还是个比较蛋疼的事,有时候会莫名其妙的碰到很多库的问题,这篇文章就把我在Ubuntu上编译安装caffe的过程和遇到的问题大致记录一下。
    1.安装opencv
    http://machinelearninguru.com/computer_vision/installation/opencv/opencv.html
    建议参考这篇文章,过程写得比较清晰
    2.安装Matlab
    因为我要用到matcaffe所以需要装matlab,这个过程可以参考:
    http://blog.csdn.net/generallc/article/details/52793820
    3.Python
    建议安装anaconda,可以省很多事
    4.一些依赖库安装
    openblas:

      $ sudo apt update
      $ apt search openblas
      $ sudo apt install libopenblas-dev
      $ sudo update-alternatives --config libblas.so.3
    
    sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev protobuf-compiler
    sudo apt-get install --no-install-recommends libboost-all-dev
    
    sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev
    

    python 依赖库

    cd /home/zzh/caffe/python
    apt-get install python-pip  
    pip install --upgrade pip
    for req in $(cat requirements.txt); do pip install $req; done  
    

    5.caffe编译
    修改Makefile.config文件.

    cd ~/caffe  //进入你的caffe目录
    cp Makefile.config.example Makefile.config
    

    我有用到gpu和opencv以及后面要matlab,所以我修改了下面这些:

    USE_CUDNN:=1
    USE_OPENCV:=1
    MATLAB_DIR:=/home/liuhao/MATLAB/

    python路径用的是anaconda的目录。

    问题1: 这里需要修改一个地方,如果不改的话后面会碰到fatal error: hdf5.h:这个错误。

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

    开始编译:

    make all -j8
    

    测试:

    make runtest
    

    python接口:

    make pycaffe
    

    Matlab接口:

    make matcaffe
    make mattest
    

    6.可能遇到的问题
    6.1 运行make mattest时可能会碰到下面这个错误:
    MEX-file '/home/zzh/caffe/matlab/+caffe/private/caffe_.mexa64' 无效:
    /usr/local/MATLAB/R2016b/bin/glnxa64/../../sys/os/glnxa64/libstdc++.so.6:
    version `GLIBCXX_3.4.21' not found (required by
    /home/zzh/caffe/matlab/+caffe/private/caffe_.mexa64)
    解决方式是将matlab的libstdc++.so.6链接到系统的库文件。

    sudo rm /usr/local/MATLAB/R2016b/sys/os/glnxa64/libstdc++.so.6
    
    sudo ln -s /usr/lib/x86_64-linux-gnu/libstdc++.so.6 /usr/local/Matlab/R2016a/sys/os/glnxa64/libstdc++.so.6 
    

    6.2 No module named google.protobuf.internal
    这个问题会在python 中import caffe时遇到

    sudo apt-get install python-protobuf
    
    pip install protobuf
    
    /home/username/anaconda2/bin/pip install protobuf
    

    我的是用第一条命令搞定了
    6.3 Intel MKL FATAL ERROR: Cannot load libmkl_avx2.so or libmkl_def.so.
    这个也是在import caffe的时候碰到的。

    conda install nomkl numpy scipy scikit-learn numexpr
    conda remove mkl mkl-service
    

    6.4 AttributeError: 'module' object has no attribute 'bool_'
    这个就要把caffe/python目录加到系统路径里

    export PYTHONPATH="/home/liuhao/framework/caffe/python:$PYTHONPATH"
    

    可以把这个加到.bashrc里面
    6.5 其他问题
    Error 'fatal error: pyconfig.h: No such file or directory' when executing 'make pycaffe' on dev-branch

    export CPLUS_INCLUDE_PATH=/usr/include/python2.7
    

    中间还碰到过一个诡异问题,因为一个叫libharfbuzz.so.0的库弄得vim和桌面都挂了,解决的方式是重装了harfbuzz和freetype。可以参考 http://www.linuxfromscratch.org/blfs/view/svn/general/harfbuzz.html

    还有个好像是cuda和gcc版本问题,直接注释/usr/include/host_config.h里面检测gcc版本的地方就可以了。

    还有一些问题忘记了,具体再google吧一般都有人踩过的坑。

    PS: 除了这种方式,还可以用cmake来装,这样就避免了手工去改Makefile.config文件。

    10.27 update
    支持多GPU要开启NCCL,
    NCCL安装:

    $ git clone https://github.com/NVIDIA/nccl.git
    
    $ cd nccl
    
    $ sudo make install -j4
    

    在~/.bashrc中将NCCL加入

    export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/home/liuhao/framework/nccl/build/lib/"
    

    遇到新问题:
    caffe/proto/caffe.pb.h: No such file or directory

    You need to generate caffe.pb.h manually using protoc as follows.
    
    #In the directory you installed Caffe to
    protoc src/caffe/proto/caffe.proto --cpp_out=.
    mkdir include/caffe/proto
    mv src/caffe/proto/caffe.pb.h include/caffe/proto
    

    不过我是直接运行下面的命令可以了:

    sudo apt-get remove libprotobuf-dev
    

    Python.h找不到,config 文件里的python path检查一下

    2017.11.1 update
    error: /home/liuhao/anaconda2/lib/libpng16.so.16: undefined reference to `inflateValidate@ZLIB_1.2.9'
    解决方式:自行编译zlib1.2.9

    wget https://sourceforge.net/projects/libpng/files/zlib/1.2.9/
    unzip xxx
    cd xxx
    ./configure
    make
    sudo make install
    

    欢迎关注公众号:vision_home 共同学习,不定期分享论文和资源

  • 相关阅读:
    LeetCode算法题-Find Pivot Index(Java实现)
    LeetCode算法题-Longest Word in Dictionary(Java实现)
    LeetCode算法题-1-bit and 2-bit Characters(Java实现)
    2016-8-4学习正则表达式
    doT 这个模板 是怎么实现的?
    manually Invoking Model Binding / Model Binding /Pro asp.net mvc 5
    隐隐约约 听 RazorEngine 在 那里 据说 生成代码 很 美。
    web api 的 安全 认证问题 , 对外开放 的 时候 需要考虑到安全的问题
    鼠标滑过显示图片
    页面加载中效果实现
  • 原文地址:https://www.cnblogs.com/haoliuhust/p/7738920.html
Copyright © 2011-2022 走看看