PSPNet Caffe 编译安装

和Caffe安装流程一样,CUDA,cudnn, OpenCV

网上有很多,请参考实验室巨佬杰作 https://github.com/Mannix1994/SfSNet-Python/blob/master/build-caffe-matlab.md

本人机器 Ubuntu1804 + RTX2080 + NVIDIA-430 + CUDA-10.1 + cudnn7.5 + 自带opencv 3.2 + 自带 python 3.6 编译成功  

注意事项

1. OpenCV4默认取消pkgconfig文件夹的生成

遇到一个不相关的问题,opencv4安装的时候,会有个pkgconfig文件夹不存在,可以在cmake的时候加一句

 -D OPENCV_GENERATE_PKGCONFIG=YES

参考 https://blog.csdn.net/u013187057/article/details/88806761

2. 编译caffe,自带cudnn版本较低

出现错误

/home/wilson/Soft/PSPNet/include/caffe/common.cuh(9): error: function "atomicAdd(double *, double)" has already been defined

解决方法

打开对应文件夹

// Copyright 2014 George Papandreou

#ifndef CAFFE_COMMON_CUH_
#define CAFFE_COMMON_CUH_

#include <cuda.h>

    #if !defined(__CUDA_ARCH__) || __CUDA_ARCH__ >= 600

    #else

    // CUDA: atomicAdd is not defined for doubles
    static __inline__ __device__ double atomicAdd(double *address, double val) {
      unsignedlong long int* address_as_ull = (unsigned long long int*)address;
      unsignedlong longint old = *address_as_ull, assumed;
      if (val==0.0)
        return __longlong_as_double(old);
      do {
        assumed = old;
        old = atomicCAS(address_as_ull, assumed, __double_as_longlong(val +__longlong_as_double(assumed)));
      } while (assumed != old);
      return __longlong_as_double(old);
    }

    #endif
#endif

参考:忘记了

3. 自带版本cudnn较低

出现错误:

/home/wilson/Soft/PSPNet/include/caffe/util/cudnn.hpp(107): error: too few arguments in function call

解决办法:

1)将./include/caffe/util/cudnn.hpp 换成最新版的caffe里的cudnn的实现,即相应的cudnn.hpp. 
2)将./include/caffe/layers里的,所有以cudnn开头的文件,例如cudnn_conv_layer.hpp。 都替换成最新版的caffe里的相应的同名文件。 
3)将./src/caffe/layer里的,所有以cudnn开头的文件,例如cudnn_lrn_layer.cu,cudnn_pooling_layer.cpp,cudnn_sigmoid_layer.cu 都替换成最新版的caffe里的相应的同名文件。

参考:https://blog.csdn.net/lanseyuansu/article/details/72583045

4. HDF5安装不正确,或者未安装

a.

../lib/libcaffe.so.1.0.0-rc3:对‘H5LTget_dataset_ndims’未定义的引用
../lib/libcaffe.so.1.0.0-rc3:对‘Mat_VarFree’未定义的引用
../lib/libcaffe.so.1.0.0-rc3:对‘H5LTmake_dataset_double’未定义的引用
../lib/libcaffe.so.1.0.0-rc3:对‘H5LTmake_dataset_int’未定义的引用
../lib/libcaffe.so.1.0.0-rc3:对‘H5LTread_dataset_float’未定义的引用
../lib/libcaffe.so.1.0.0-rc3:对‘H5LTmake_dataset_float’未定义的引用
../lib/libcaffe.so.1.0.0-rc3:对‘H5LTread_dataset_double’未定义的引用
../lib/libcaffe.so.1.0.0-rc3:对‘H5LTmake_dataset_string’未定义的引用
../lib/libcaffe.so.1.0.0-rc3:对‘Mat_VarReadDataLinear’未定义的引用
../lib/libcaffe.so.1.0.0-rc3:对‘Mat_Open’未定义的引用
../lib/libcaffe.so.1.0.0-rc3:对‘H5LTread_dataset_int’未定义的引用
../lib/libcaffe.so.1.0.0-rc3:对‘Mat_VarCreate’未定义的引用
../lib/libcaffe.so.1.0.0-rc3:对‘Mat_CreateVer’未定义的引用
../lib/libcaffe.so.1.0.0-rc3:对‘Mat_VarWrite’未定义的引用
../lib/libcaffe.so.1.0.0-rc3:对‘H5LTfind_dataset’未定义的引用
../lib/libcaffe.so.1.0.0-rc3:对‘Mat_VarReadInfo’未定义的引用
../lib/libcaffe.so.1.0.0-rc3:对‘Mat_Close’未定义的引用
../lib/libcaffe.so.1.0.0-rc3:对‘H5LTget_dataset_info’未定义的引用
../lib/libcaffe.so.1.0.0-rc3:对‘H5LTread_dataset_string’未定义的引用

解决办法:

$ gunzip < hdf5-X.Y.Z.tar.gz | tar xf -   #解压缩
$ cd hdf5-X.Y.Z
$ ./configure --prefix=/usr/local/hdf5  #安装路径
$ make
$ make check                # run test suite.
$ make install
$ make check-install        # verify installation.

其中XYZ是版本号

参考:https://blog.csdn.net/luoying_1993/article/details/53228473

 

b.

In file included from src/caffe/util/hdf5.cpp:1:0:
./include/caffe/util/hdf5.hpp:6:18: 致命错误:hdf5.h:没有那个文件或目录
 

在你安装完成以后需要将libhdf5-serial-dev的位置添加在你的配置文件中方便他进行编译,我用的系统是ubuntu16,所以我的修改方式如下修改Makefile.config需要修改的内容:
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
 
完成后再次编译

 

5. error: #error This file requires compiler and library support for the ISO C++ 2011 standard.

Linux系统下解 决make时error: #error This file requires compiler and library support for the ISO C++ 2011 standard. This support must be enabled with the -std=c++11 or -std=gnu++11 compiler options.

 #error This file requires compiler and library support \

的方法:

      在CMakeLists.txt文件里的上方添加

SET( CMAKE_CXX_FLAGS "-std=c++11 -O3")

可以解决这个问题

6. 对‘H5LXXX_dataset_ndims’未定义的引用

/build/lib/libcaffe.so:对‘H5LTget_dataset_ndims’未定义的引用
             build/lib/libcaffe.so:对‘H5LTread_dataset_int’未定义的引用
              build/lib/libcaffe.so:对‘H5LTfind_dataset’未定义的引用
            /build/lib/libcaffe.so:对‘H5LTmake_dataset_double’未定义的引用
            /build/lib/libcaffe.so:对‘H5LTmake_dataset_int’未定义的引用
           /build/lib/libcaffe.so:对‘H5LTread_dataset_float’未定义的引用
           /build/lib/libcaffe.so:对‘H5LTmake_dataset_float’未定义的引用
          /build/lib/libcaffe.so:对‘H5LTget_dataset_info’未定义的引用
         /build/lib/libcaffe.so:对‘H5LTread_dataset_string’未定义的引用
         /build/lib/libcaffe.so:对‘H5LTread_dataset_double’未定义的引用
          /build/lib/libcaffe.so:对‘H5LTmake_dataset_string’未定义的引用

解决方法: 打开py-faster-rcnn->caffe-fast-rcnn->cmake->Dependencies.cmake

                   在文件Dependencies.cmake添加一句,如下:

                   # ---[ HDF5
                   find_package(HDF5 COMPONENTS HL REQUIRED)
                   include_directories(SYSTEM ${HDF5_INCLUDE_DIRS} ${HDF5_HL_INCLUDE_DIR})
                   list(APPEND Caffe_LINKER_LIBS ${HDF5_LIBRARIES})
                   list(APPEND Caffe_LINKER_LIBS ${HDF5_HL_LIBRARIES})     #added

原文:https://blog.csdn.net/liuyan20062010/article/details/78258479 
 

7. 如果使用cmake编译时可能会遇到以下错误

../lib/libcaffe.so.1.0.0-rc3: undefined reference to `Mat_VarFree'
../lib/libcaffe.so.1.0.0-rc3: undefined reference to `Mat_VarReadDataLinear'
../lib/libcaffe.so.1.0.0-rc3: undefined reference to `Mat_Open'
../lib/libcaffe.so.1.0.0-rc3: undefined reference to `Mat_VarCreate'
../lib/libcaffe.so.1.0.0-rc3: undefined reference to `Mat_CreateVer'
../lib/libcaffe.so.1.0.0-rc3: undefined reference to `Mat_VarWrite'
../lib/libcaffe.so.1.0.0-rc3: undefined reference to `Mat_VarReadInfo'
../lib/libcaffe.so.1.0.0-rc3: undefined reference to `Mat_Close'

解决方法: 
下载FindMATIO.cmake.zip文件,解压缩后拷贝到./cmake/Modules目录中。 
文件下载路径:https://github.com/TheLegendAli/DeepLab-Context/files/453735/FindMATIO.cmake.zip 
并添加以下代码至./cmake/Dependencies.cmake文件中

find_package(MATIO REQUIRED)
include_directories(${MATIO_INCLUDE_DIR})
list(APPEND Caffe_LINKER_LIBS ${MATIO_LIBRARIES})

8. ‘CV_LOAD_IMAGE_COLOR’ was not declared in this scope

/home/wilson/Soft/PSPNet_caffe/PSPNet/src/caffe/layers/window_data_layer.cpp:290:42: error: ‘CV_LOAD_IMAGE_COLOR’ was not declared in this scope
         cv_img = cv::imread(image.first, CV_LOAD_IMAGE_COLOR);
                                          ^~~~~~~~~~~~~~~~~~~

解决方法 try to replace CV_LOAD_IMAGE_COLOR with cv::IMREAD_COLOR

CV_LOAD_IMAGE_GRAYSCALE ---> cv::IMREAD_GRAYSCALE

9. CMake error with "CUDA_cublas_device_LIBRARY"

这个原因在于cuda10的版本更新丢弃了cublas_device,这个问题可以由更新cmake到最新 版本解决。

参考:https://stackoverflow.com/questions/52501760/c

make-error-while-installing-torch-in-ubuntu

 

10. 错误原因是caffe自带的库和Ubuntu的系统库之间发生了冲突,一言不和就废掉caffe的自带库,使用Ubuntu系统库

/opt/caffe-PSP/bin/caffe: symbol lookup error: /opt/caffe-PSP/bin/caffe: undefined symbol: _ZN5caffe3NetIfEC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEENS_5PhaseEPKS1_
 

可以通过 ldd ./matlab/+caffe/private/caffe_.mexa64 查看其依赖了那些动态库,将其增加到你的 LD_PRELOAD中,见caffe官网  http://caffe.berkeleyvision.org/tutorial/interfaces.html#matlab

这个要视具体目录而定,我这边写了个脚本,如下:

export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu/:/usr/local/cuda-10.1/lib64

参考:https://www.cnblogs.com/laiqun/p/6031925.html

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值