Faster R-CNN的安装及测试(Python版本和Matlab版本)
rbg的Python版本
一、拉取源碼
git clone --recursive https://github.com/rbgirshick/py-faster-rcnn.git拉取完成后,在/home/cmwang/目錄下增加了py-faster-rcnn文件夾【cmwang是我的ubuntu用戶名】
二、安裝依賴
sudo apt-get install python-opencvsudo pip install cython easydict三、修改Makefile文件
終端輸入
cd /home/cmwang/py-faster-rcnn/caffe-fast-rcnn/ cp Makefile.config.example Makefile.config #備份Makefile gedit Makefile.config使用python層
將# WITH_PYTHON_LAYER := 1修改為 WITH_PYTHON_LAYER := 1
調(diào)用matlab
將#MATLAB_DIR := / usr/local/MATLAB/R2015b 中的#去掉。
使用cudnn加速
將# USE_CUDNN := 1修改為USE_CUDNN := 1
保留# CPU_ONLY := 1不變,使用GPU運(yùn)行faster r-cnn
四、編譯Cython模塊
終端輸入
cd ~/py-faster-rcnn/lib/make五、編譯caffe和pycaffe & matcaffe
終端輸入
cd ~/py-faster-rcnn/caffe-fast-rcnn/ make -j8 && make pycaffe && make matcaffe六、下載模型
終端輸入
cd ~/py-faster-rcnn/./data/scripts/fetch_faster_rcnn_models.sh七、faster r-cnn測(cè)試
cd ~/py-faster-rcnn/ ./tools/demo.pyShaoqing Ren的MATLAB版本
一、拉取源碼
下載 faster_rcnn-master.zip
拉取完成后,在/home/cmwang/目錄下增加了faster_rcnn_master文件夾【cmwang是我的ubuntu用戶名】
二、下載補(bǔ)充文件夾
解壓faster_rcnn-master.zip后,發(fā)現(xiàn)faster_rcnn-master/external/caffe 是空文件。
下載 caffe-062f2431162165c658a42d717baf8b74918aa18e.zip
三、修改Makefile文件
終端輸入
cd /home/cmwang/faster_rcnn-master/external/caffe cp Makefile.config.example Makefile.config #備份Makefile gedit Makefile.config使用python層
將# WITH_PYTHON_LAYER := 1修改為 WITH_PYTHON_LAYER := 1
調(diào)用matlab
將#MATLAB_DIR := / usr/local/MATLAB/R2015b 中的#去掉。
使用cudnn加速
將# USE_CUDNN := 1修改為USE_CUDNN := 1
保留# CPU_ONLY := 1不變,使用GPU運(yùn)行faster r-cnn
四、編譯caffe和pycaffe & matcaffe
終端輸入
cd ~faster_rcnn-master/external/caffe make all -j8 && make test -j8 && make runtest -j8 && make pycaffe && make matcaffe五、下載模型
終端輸入
cd ~/faster_rcnn-master/run fetch_data/fetch_model_VGG16.m六、運(yùn)行
cd ~/faster_rcnn-master/ run faster_rcnn_build.m run startup.m七、faster r-cnn測(cè)試
cd ~/faster_rcnn-master/ run ./experiments/script_faster_rcnn_demo.m備注: Matlab里面有內(nèi)置的
Object Detection Using Faster R-CNN Deep Learning
常出現(xiàn)的問題1
這是由于當(dāng)前版本的caffe中cudnn實(shí)現(xiàn)與系統(tǒng)所安裝的cudnn的版本不一致引起,rbgirshick的py-faster-rcnn其cudnn實(shí)現(xiàn)為舊版本的實(shí)現(xiàn),所有出現(xiàn)了以上問題。
cudnn-7.0-linux-x64-v4.0-prod.tgz不會(huì)出現(xiàn)此問題
cudnn-7.5-linux-x64-v5.1.tgz會(huì)出現(xiàn)同樣問題
cudnn-8.0-linux-x64-v5.1.tgz會(huì)出現(xiàn)同樣問題
解決辦法
①將/home/cmwang/py-faster-rcnn/caffe-fast-rcnn/include/caffe/util/cudnn.hpp 換成最新版caffe里的相應(yīng)目錄下的cudnn.hpp;②將/home/cmwang/py-faster-rcnn/caffe-fast-rcnn/include/caffe/layers/下所有cudnn開頭的文件都替換為最新版caffe里相應(yīng)目錄下的同名文件;③將/home/cmwang/py-faster-rcnn/caffe-fast-rcnn/src/caffe/layer下所有cudnn開頭的文件都替換為最新版caffe里相應(yīng)目錄下的同名文件常出現(xiàn)的問題2
出現(xiàn)找不到hdf5.h錯(cuò)誤;
解決辦法:終端輸入
cd /home/cmwang/py-faster-rcnn/caffe-fast-rcnn/ gedit Makefile.config 在INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include 后面打上一個(gè)空格,然后添加/usr/include/hdf5/serial如果沒有這一句可能會(huì)報(bào)一個(gè)找不到hdf5.h的錯(cuò)誤。
常出現(xiàn)的問題3
CXX .build_release/src/caffe/proto/caffe.pb.cc CXX src/caffe/common.cpp CXX src/caffe/net.cpp CXX src/caffe/internal_thread.cpp CXX src/caffe/layers/cudnn_softmax_layer.cpp CXX src/caffe/layers/hinge_loss_layer.cpp CXX src/caffe/layers/relu_layer.cpp CXX src/caffe/layers/contrastive_loss_layer.cpp CXX src/caffe/layers/elu_layer.cpp CXX src/caffe/layers/hdf5_output_layer.cpp CXX src/caffe/layers/cudnn_pooling_layer.cpp CXX src/caffe/layers/deconv_layer.cpp CXX src/caffe/layers/memory_data_layer.cpp CXX src/caffe/layers/eltwise_layer.cpp CXX src/caffe/layers/softmax_loss_layer.cpp CXX src/caffe/layers/silence_layer.cpp CXX src/caffe/layers/power_layer.cpp CXX src/caffe/layers/exp_layer.cpp CXX src/caffe/layers/threshold_layer.cpp CXX src/caffe/layers/tanh_layer.cpp CXX src/caffe/layers/cudnn_lrn_layer.cpp CXX src/caffe/layers/data_layer.cpp CXX src/caffe/layers/base_conv_layer.cpp CXX src/caffe/layers/lstm_unit_layer.cpp CXX src/caffe/layers/accuracy_layer.cpp CXX src/caffe/layers/softmax_layer.cpp CXX src/caffe/layers/im2col_layer.cpp CXX src/caffe/layers/lstm_layer.cpp CXX src/caffe/layers/sigmoid_cross_entropy_loss_layer.cpp CXX src/caffe/layers/cudnn_relu_layer.cpp CXX src/caffe/layers/image_data_layer.cpp CXX src/caffe/layers/reshape_layer.cpp CXX src/caffe/layers/window_data_layer.cpp CXX src/caffe/layers/split_layer.cpp CXX src/caffe/layers/hdf5_data_layer.cpp CXX src/caffe/layers/flatten_layer.cpp CXX src/caffe/layers/cudnn_lcn_layer.cpp CXX src/caffe/layers/input_layer.cpp CXX src/caffe/layers/rnn_layer.cpp CXX src/caffe/layers/recurrent_layer.cpp CXX src/caffe/layers/inner_product_layer.cpp CXX src/caffe/layers/reduction_layer.cpp CXX src/caffe/layers/multinomial_logistic_loss_layer.cpp CXX src/caffe/layers/infogain_loss_layer.cpp CXX src/caffe/layers/bias_layer.cpp CXX src/caffe/layers/filter_layer.cpp CXX src/caffe/layers/batch_reindex_layer.cpp CXX src/caffe/layers/slice_layer.cpp CXX src/caffe/layers/argmax_layer.cpp CXX src/caffe/layers/prelu_layer.cpp CXX src/caffe/layers/dropout_layer.cpp CXX src/caffe/layers/absval_layer.cpp CXX src/caffe/layers/bnll_layer.cpp CXX src/caffe/layers/sigmoid_layer.cpp CXX src/caffe/layers/concat_layer.cpp CXX src/caffe/layers/dummy_data_layer.cpp CXX src/caffe/layers/base_data_layer.cpp CXX src/caffe/layers/log_layer.cpp CXX src/caffe/layers/crop_layer.cpp CXX src/caffe/layers/cudnn_tanh_layer.cpp CXX src/caffe/layers/pooling_layer.cpp CXX src/caffe/layers/parameter_layer.cpp CXX src/caffe/layers/euclidean_loss_layer.cpp CXX src/caffe/layers/mvn_layer.cpp CXX src/caffe/layers/lrn_layer.cpp CXX src/caffe/layers/loss_layer.cpp CXX src/caffe/layers/conv_layer.cpp CXX src/caffe/layers/cudnn_sigmoid_layer.cpp CXX src/caffe/layers/scale_layer.cpp CXX src/caffe/layers/tile_layer.cpp CXX src/caffe/layers/embed_layer.cpp CXX src/caffe/layers/neuron_layer.cpp CXX src/caffe/layers/cudnn_conv_layer.cpp CXX src/caffe/layers/batch_norm_layer.cpp CXX src/caffe/layers/spp_layer.cpp CXX src/caffe/layer_factory.cpp CXX src/caffe/blob.cpp CXX src/caffe/layer.cpp CXX src/caffe/data_transformer.cpp CXX src/caffe/syncedmem.cpp CXX src/caffe/util/blocking_queue.cpp CXX src/caffe/util/db_lmdb.cpp CXX src/caffe/util/benchmark.cpp CXX src/caffe/util/io.cpp CXX src/caffe/util/insert_splits.cpp CXX src/caffe/util/hdf5.cpp CXX src/caffe/util/cudnn.cpp CXX src/caffe/util/signal_handler.cpp CXX src/caffe/util/db.cpp CXX src/caffe/util/math_functions.cpp CXX src/caffe/util/upgrade_proto.cpp CXX src/caffe/util/im2col.cpp CXX src/caffe/util/db_leveldb.cpp CXX src/caffe/solvers/adam_solver.cpp CXX src/caffe/solvers/adadelta_solver.cpp CXX src/caffe/solvers/adagrad_solver.cpp CXX src/caffe/solvers/sgd_solver.cpp CXX src/caffe/solvers/rmsprop_solver.cpp CXX src/caffe/solvers/nesterov_solver.cpp CXX src/caffe/data_reader.cpp CXX src/caffe/parallel.cpp CXX src/caffe/solver.cpp AR -o .build_release/lib/libcaffe.a LD -o .build_release/lib/libcaffe.so.1.0.0-rc3 /usr/bin/ld: cannot find -lhdf5_hl /usr/bin/ld: cannot find -lhdf5 collect2: error: ld returned 1 exit status Makefile:566: recipe for target '.build_release/lib/libcaffe.so.1.0.0-rc3' failed make: *** [.build_release/lib/libcaffe.so.1.0.0-rc3] Error 1解決方法
修改Makefile 文件(注意不是)Makefile.config 將里面的 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常出現(xiàn)的問題4
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<unsigned char, std::allocator >&, std::vector<int, std::allocator > 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 1CXX/LD -o .build_release/test/test_all.testbin src/caffe/test/test_caffe_main.cppLD .build_release/src/caffe/test/test_threshold_layer.o .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<unsigned char, std::allocator >&, std::vector<int, std::allocator > 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/test/test_threshold_layer.testbin] Error 1Maybe it is the related with OpenCv.
解決方法
add "opencv_imgcodecs" in Makefile.(LIBRARIES += glog gflags protobuf leveldb snappy lmdb boost_system hdf5_hl hdf5 m opencv_core opencv_highgui opencv_imgproc opencv_imgcodecs)常出現(xiàn)的問題5
執(zhí)行make runtest這一命令之后,遇到了奇葩的問題”Unknown V1LayerParameter Layer type: 40”。如下圖:
解決方案
在這個(gè)文件上面(external/caffe/src/caffe/util/upgrade_proto.cpp)。我們需要補(bǔ)上Reshape,ROIPooling以及SmoothL1Loss這三個(gè)層,具體見下:
case V1LayerParameter_LayerType_THRESHOLD:
return "Threshold";
case V1LayerParameter_LayerType_RESHAPE:
return "Reshape";
case V1LayerParameter_LayerType_ROIPOOLING:
return "ROIPooling";`
case V1LayerParameter_LayerType_SMOOTH_L1_LOSS:
return "SmoothL1Loss";
若還有其他的問題敬請(qǐng)查看
Faste R-CNN的安裝及測(cè)試
參考文獻(xiàn):
安裝Caffe.build_release/lib/libcaffe.so.1.0.0-rc3’ failed
Faster R-CNN的安裝、測(cè)試經(jīng)歷
Error: ‘make all’ ‘make test’
Faster R-CNN教程
faster rcnn配置方法MATLAB 版本
Object Detection Using Faster R-CNN Deep Learning
總結(jié)
以上是生活随笔為你收集整理的Faster R-CNN的安装及测试(Python版本和Matlab版本)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基于CNN的性别、年龄识别及Demo实现
- 下一篇: 动画制作物语相性一览 内容触发条件