早上想跑一下目标检测RON算法
https://github.com/taokong/RON
git下来之后,要编译他的caffe时,出现如下问题:
PROTOC src/caffe/proto/caffe.proto
CXX .build_release/src/caffe/proto/caffe.pb.cc
CXX src/caffe/solvers/adadelta_solver.cpp
In file included from ./include/caffe/util/device_alternate.hpp:40:0,
from ./include/caffe/common.hpp:19,
from ./include/caffe/blob.hpp:8,
from ./include/caffe/net.hpp:10,
from ./include/caffe/solver.hpp:7,
from ./include/caffe/sgd_solvers.hpp:7,
from src/caffe/solvers/adadelta_solver.cpp:3:
./include/caffe/util/cudnn.hpp: In function 鈥榗onst char* cudnnGetErrorString(cudnnStatus_t)鈥
./include/caffe/util/cudnn.hpp:21:10: warning: enumeration value 鈥楥UDNN_STATUS_RUNTIME_PREREQUISITE_MISSING鈥not handled in switch [-Wswitch]
switch (status) {
^
./include/caffe/util/cudnn.hpp: In function 鈥榲oid caffe::cudnn::setConvolutionDesc(cudnnConvolutionStruct**, cudnnTensorDescriptor_t, cudnnFilterDescriptor_t, int, int, int, int)鈥
./include/caffe/util/cudnn.hpp:113:70: error: too few arguments to function 鈥榗udnnStatus_t cudnnSetConvolution2dDescriptor(cudnnConvolutionDescriptor_t, int, int, int, int, int, int, cudnnConvolutionMode_t, cudnnDataType_t)鈥
pad_h, pad_w, stride_h, stride_w, 1, 1, CUDNN_CROSS_CORRELATION));
^
./include/caffe/util/cudnn.hpp:15:28: note: in definition of macro 鈥楥UDNN_CHECK鈥
cudnnStatus_t status = condition; \
^
In file included from ./include/caffe/util/cudnn.hpp:5:0,
from ./include/caffe/util/device_alternate.hpp:40,
from ./include/caffe/common.hpp:19,
from ./include/caffe/blob.hpp:8,
from ./include/caffe/net.hpp:10,
from ./include/caffe/solver.hpp:7,
from ./include/caffe/sgd_solvers.hpp:7,
from src/caffe/solvers/adadelta_solver.cpp:3:
/usr/local/cuda/include/cudnn.h:500:27: note: declared here
cudnnStatus_t CUDNNWINAPI cudnnSetConvolution2dDescriptor( cudnnConvolutionDescriptor_t convDesc,
^
Makefile:575: recipe for target '.build_release/src/caffe/solvers/adadelta_solver.o' failed
make: *** [.build_release/src/caffe/solvers/adadelta_solver.o] Error 1
因为当前你编译的caffe版本(从github下下来的,别人实现过的)的cudnn版本,
与你之前安装纯正caffe版本时候,系统所安装的cudnn的版本不一致引起的。
只需要把cudnn相关的文件替换成你之前能够成功编译的caffe版本里的文件即可:
1.将编译不成功的caffe里面的 ./include/caffe/util/cudnn.hpp 换成你编译成功过的caffe里的cudnn.hpp的版本;
2.将编译不成功的caffe里面的 ./src/caffe/layer 里的,所有以cudnn开头的文件,例如 cudnn_conv_layer.cpp , cudnn_conv_layer.cu , cudnn_lcn_layer.cpp , cudnn_lcn_layer.cu , cudnn_lrn_layer.cpp , cudnn_lrn_layer.cu , cudnn_pooling_layer.cpp , cudnn_pooling_layer.cu , cudnn_relu_layer.cpp , cudnn_relu_layer.cu , cudnn_sigmoid_layer.cpp , cudnn_sigmoid_layer.cu , cudnn_softmax_layer.cpp , cudnn_softmax_layer.cu , cudnn_tanh_layer.cpp , cudnn_tanh_layer.cu 全部换成你编译成功过的caffe里的同名的版本。
(我当时是有这么18个文件,全部替换掉即可)
替换之后
重新输入:
make clean
make
编译成功!!!