zoukankan      html  css  js  c++  java
  • Caffe 工程的一些编译错误以及解决方案


    本系列文章由 @yhl_leo 出品,转载请注明出处。
    文章链接: http://blog.csdn.net/yhl_leo/article/details/51371936


    整理一下最近遇到caffe工程的一些编译错误以及解决方法。

    1 cuDNN

    cuDNN当前最新版本是v5,近两三年的一些caffe工程,使用的版本不尽相同,其中以v2/v3版本的最为常见,所以使用的时候一定要搞清楚(当然如果作者没说,那就自己依次尝试吧)。

    cuDNN出现版本不匹配,在工程make的时候,会报如下错误(以安装v4版本,编译v3版本的程序为例):

    ...
    
    NVCC src/caffe/layers/deconv_layer.cu
    NVCC src/caffe/layers/cudnn_conv_layer.cu
    src/caffe/layers/cudnn_conv_layer.cu(81): error: argument of type "cudnnAddMode_t" is incompatible with parameter of type "const void *"
              detected during instantiation of "void caffe::CuDNNConvolutionLayer<Dtype>::Forward_gpu(const std::vector<caffe::Blob<Dtype> *, std::allocator<caffe::Blob<Dtype> *>> &, const std::vector<caffe::Blob<Dtype> *, std::allocator<caffe::Blob<Dtype> *>> &) [with Dtype=float]" 
    (157): here
    
    ...
    
    20 errors detected in the compilation of "/tmp/tmpxft_00002703_00000000-16_cudnn_conv_layer.compute_50.cpp1.ii".
    make: *** [.build_release/cuda/src/caffe/layers/cudnn_conv_layer.o] Error 1
    make: *** Waiting for unfinished jobs....

    解决方案是这样的,下载v3版本,解压后,在终端进入所在文件夹下(这里仍然以v3版本为例):

    $ cd lib64/
    $ sudo cp lib* /usr/local/cuda/lib64/
    $ cd ../include/
    $ sudo cp cudnn.h /usr/local/cuda/include/
    $ cd /usr/local/cuda/lib64/
    $ sudo rm -r libcudnn.so libcudnn.so.7.0
    $ sudo ln -sf libcudnn.so.7.0.64 libcudnn.so.7.0
    $ sudo ln -sf libcudnn.so.7.0 libcudnn.so
    $ sudo ldconfig

    2 OpenCV

    我使用的版本是3.1.0,在编译工程的时候,遇到如下BUG:

    ...
    
    CXX/LD -o .build_release/tools/convert_imageset.bin 
    .build_release/lib/libcaffe.so: undefined reference to cv::imread(cv::String const&, int)’ 
    .build_release/lib/libcaffe.so: undefined reference tocv::imencode(cv::String const&, cv::_InputArray const&, std::vector >&, std::vector > const&)’ 
    .build_release/lib/libcaffe.so: undefined reference to `cv::imdecode(cv::_InputArray const&, int)’ 
    collect2: error: ld returned 1 exit status 
    make: * [.build_release/tools/convert_imageset.bin] Error 1
    
    ...

    首先,我是已经配置过了opencv的,可以这样查询安装版本:

    $ pkg-config --modversion opencv

    因为编译好了,理所当然,输出结果是3.1.0

    所以出现上面的错误,应该是opencv_imgcodecs链接的问题,比较有效的解决方案是,把opencv需要的lib添加到Makefile文件中,找到LIBRARIES(在PYTHON_LIBRARIES := boost_python python2.7 前一行)并修改为:

    LIBRARIES += glog gflags protobuf leveldb snappy 
            lmdb boost_system hdf5_hl hdf5 m 
            opencv_core opencv_highgui opencv_imgproc opencv_imgcodecs

    3 make

    每次需要重新编译的过程中,首先需要清除掉以往编译的结果:

    $ make clean

    然后再重新编译:

    $ make all -j12
    $ make distribute
    $ make pycaffe
    $ make matcaffe

    -j12的含义是run 12 jobs in parallel,看自己机器的性能,自己设置,可以更快编译。

  • 相关阅读:
    计算日期之差
    大数相加
    NY-字符串替换
    HDU1004之总是wa的细节问题
    指针在字符串简单应用
    mybatis~SQL映射
    java实现递归(1)
    apk、图片下载工具(1)
    签到规则工具(1)
    短信发送工具(2)
  • 原文地址:https://www.cnblogs.com/hehehaha/p/6332134.html
Copyright © 2011-2022 走看看