【caffe】编译全过程+超全问题集锦+失败案例

文章目录

  • 一、caffe编译过程
    • 1、查看电脑配置
    • 2、本文参考以下博文
    • 3、编译流程
  • 二、问题集锦
    • 1、connot find -lopencv_imgcodecs的解决方式
    • 2、nvcc fatal : Unknown option ‘fPIC’
    • 3、error while loading shared libraries: libopencv_core.so.3.4: cannot open
    • 4、Check failed: status == CUDNN_STATUS_SUCCESS (3 vs. 0) CUDNN_STATUS_INTERNAL_ERRO
    • 5、import caffe时出现ImportError: No module named caffe
    • 6、import caffe时出现ImportError: No module named skimage.io
    • 7、import caffe时出现ImportError: No module named


之前装了openpose cpu,当时单独编译始终不对,最后由openpose自动编译caffe成功;但由于cpu实在太慢,最近又开始编译gpu的openpose,无奈由openpose自动编译caffe一直出错,所以又开始了单独编译caffe,还是遇到了无数的问题,这里记录以下整个流程.

一、caffe编译过程

点击https://github.com/CMU-Perceptual-Computing-Lab/caffe下载caffe,用的是cmu实验室改过的版本,其实流程是一样的.

1、查看电脑配置

强烈建议先查看电脑各种配置,选择适合自己的版本之后再进行openpose或者caffe的编译,否则很容易出错还不知道错在哪里

本机gpu型号:GeForce GTX 980 Ti
其他版本:ubuntu16.04+cuda8.0+cudnnv5.1+python2.7+opencv3.4.1
查看电脑配置可参考:
https://blog.csdn.net/qq_38198286/article/details/117113232?spm=1001.2014.3001.5501

2、本文参考以下博文

https://blog.csdn.net/w113691/article/details/77942408
https://blog.csdn.net/sjh123223/article/details/79659544
http://caffe.berkeleyvision.org/installation.html#prerequisites
Ubuntu的ldconfig详解(解决*.so不是符号连接)

3、编译流程

根据核数来执行并行编译
例如:本人电脑为4核,故输入sudo make all -j4

  • (1) 修改makefile.config

    cd /openpose/3rdparty/caffe

    首先找到合适自己的config文件,我的是Makefile.config.Ubuntu16_cuda8.example,这是caffe给出的样本文件,复制该文件并且重命名为Makefile.config

    sudo cp Makefile.config.Ubuntu16_cuda8.example Makefile.config

    其次是对文件进行修改

    • 1、应用 cudnn


    #USE_CUDNN := 1
    修改成:
    USE_CUDNN := 1

    • 2、应用 opencv 版本


    #OPENCV_VERSION := 3
    修改为:
    OPENCV_VERSION := 3

    • 3、使用 python 接口


    #WITH_PYTHON_LAYER := 1
    修改为
    WITH_PYTHON_LAYER := 1

    • 4、修改 python 路径
将:
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib 
修改为: 
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial
LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/x86_64-linux-gnu /usr/lib/x86_64-linux-gnu/hdf5/serial

保存后退出

  • (2) 修改makefile
    • 1、打开makefile

    sudo gedit Makefile

    • 2、
将:
NVCCFLAGS +=-ccbin=$(CXX) -Xcompiler-fPIC $(COMMON_FLAGS)
替换为:
NVCCFLAGS += -D_FORCE_INLINES -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)
  • 3、
将:
LIBRARIES += glog gflags protobuf boost_system boost_filesystem m hdf5_hl hdf5
改为:
LIBRARIES += glog gflags protobuf boost_system boost_filesystem m hdf5_serial_hl hdf5_serial

保存后退出

  • (3) 编译

mkdir build
cd build
cmake …
sudo make all -j4
sudo make install -j4
sudo make runtest -j4

二、问题集锦

1、connot find -lopencv_imgcodecs的解决方式

  • (1) 先将Makefile.config文件中OPENCV_VERSION := 3 注释掉,只修改USE_OPENCV := 1
    修改后的结果:
    USE_OPENCV := 1
    #OPENCV_VERSION := 3

  • (2)再打开Makefile,ctrl+f查找Derive include and lib directories,定位到这一节下的opencv,对LIBRARIES +=增加opencv_imgcodecs(描述的有点复杂,就是改成下图)保存后退出。clean之后make all就可以通过了
    【caffe】编译全过程+超全问题集锦+失败案例_第1张图片

  • (3)如果还是不行,就手动把opencv3的内容加入环境变量

    1,sudo gedit ~/.bashrc
    2,在末尾添加两句
    export PKG_CONFIG_PATH=/usr/local/opencv320/lib/pkgconfig
    export LD_LIBRARY_PATH=/usr/local/opencv320/lib
    3,source ~/.bashrc使其生效

2、nvcc fatal : Unknown option ‘fPIC’

  • nvcc本身不支持-fPIC编译参数,但是却提供了-Xcompiler
    用途上,使用nvcc -h可以发现,这是提供了向低级编译工具(gcc)传递编译参数的功能,因此在编译.cu文件时,在nvcc后加上 -shared -Xcomplier -fPIC 即可链接成功
    我的是因为参考的博文在-Xcompiler之前少了一个空格,正确的在下方(都是我无脑复制的锅)

    NVCCFLAGS += -D_FORCE_INLINES -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)

3、error while loading shared libraries: libopencv_core.so.3.4: cannot open

  • (1)法一:sudo apt install ffmpeg
    再sudo make runtest即可
    (见到有人说可以成功,但是我用这种方法失败了,于是有了法二)

  • (2)法二:参考:https://blog.csdn.net/sahusoft/article/details/7388617
    这篇文章讲的很清楚了,推荐看一看,根据文章里讲到的情况来解决自己的问题,这里记录下我的过程

    1> cat /etc/ld.so.conf include ld.so.conf.d/*.conf

    会出现包含libopencv_core.so的文件夹路径

    2> sudo echo “/usr/local/lib” >> /etc/ld.so.conf

    出现错误:bash: /etc/ld.so.conf: Permission denied
    解决方式:以上命令换成下面

    2>sudo sh -c “echo ‘/usr/local/lib’ >> /etc/ld.so.conf”

    3> ldconfig

    出现错误:/sbin/ldconfig.real: /usr/local/cuda-8.0/targets/x86_64-linux/lib/libcudnn.so.6 不是符号连接
    解决方式

    sudo ldconfig -v

    检查输出的内容,找到libcudnn.so.6 -> libcudnn.so.6.0.21,在命令行输入:

    sudo ln -sf /usr/local/cuda-8.0/lib64/libcudnn.so.6.0.21 /usr/local/cuda-8.0/lib64/libcudnn.so.6

    对其他的类似的不是符号链接的问题,都是同样的解决方式,在输出内容中找到类似格式,进行重新建立链接就行了.
    建立连接之后,再次执行ldconfig就可以解决这个问题了.

4、Check failed: status == CUDNN_STATUS_SUCCESS (3 vs. 0) CUDNN_STATUS_INTERNAL_ERRO

总共搜到过以下方法,本人挨个试过了,终于皇天不负有心人

  • (1)有的说是因为capability小于3就不能使用cudnn,输入以下指令查看cuda capability:

    sudo /usr/local/cuda/samples/1_Utilities/deviceQuery/deviceQuery

    我的电脑是5.2,因此不是capability的问题;
    在另一篇文章看到小于capability3的要在makefile.config中找到cuda_arch,将sm_*,*大于3的都注释,于是我想到将大于capability5.2的都注释掉(仍然失败)
    【caffe】编译全过程+超全问题集锦+失败案例_第2张图片

  • (2)sudo gedit caffe/examples/mnist/lenet_train_test.prototxt,在convolution_param中添加engine:caffe
    (仍然失败,于是我又将它删除了)

  • (3)将cudnn版本从v6降到v5.1(仍然失败)

  • (4)参考:https://www.jianshu.com/p/bf183355f0e7
    输入sudo rm -rf ~/.nv,然后重启(仍然失败)

    sudo rm -rf ~/.nv
    reboot

  • (5)打开Makefile.config,将USE_CUDNN := 1注释掉(终于成功了)

5、import caffe时出现ImportError: No module named caffe

参考https://www.cnblogs.com/denny402/p/5088399.html

  • (1)打开命令行,输入

    sudo gedit ~/.bashrc

  • (2)在末尾添加一句话:

    export PYTHONPATH=/home/csb/openpose/3rdparty/caffe/python:$PYTHONPATH

    具体路径根据自己的来设置,保存后退出

  • (3)输入以下命令使其生效

    source ~/.bashrc

6、import caffe时出现ImportError: No module named skimage.io

  • (1)打开命令行,输入(见到有的人成功过,但是我这里失败了)

    pip install -U scikit-image

  • (2)输入以下命令成功解决里这个问题:

    sudo apt-get install python-skimage

7、import caffe时出现ImportError: No module named

输入以下命令即可解决:


google.protobuf.internalsudo apt-get install python-protobuf 

你可能感兴趣的:(ubuntu,caffe,linux,python,机器学习)