和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