cuda8+cudnn4 Faster R-CNN安装塈运行demo

安装cuda

cuda8安装参见网上教程

安装cudnn

Caffe目前的代码貌似不支持cudnn5,如果安装cudnn5,在编译caffe时会报错:

error: argument of type “int” is incompatible with parameter of type “cudnnNanPropagation_t”
参见 https://github.com/tbennun/cudnn-training/issues/7

所以要安装cudnn4

$tar zxvf cudnn-7.0-linux-x64-v4.0-prod.tgz 
$sudo cp cuda/include/cudnn.h /usr/local/cuda/include 
$sudo cp -d cuda/lib64/libcudnn* /usr/local/cuda/lib64

下载faster r-cnn代码

$git clone --recursive https://github.com/rbgirshick/py-faster-rcnn.git

下载模型数据

模型数据有点大,要花点时间

$./data/scripts/fetch_faster_rcnn_models.sh

编译caffe

这里的caffe是Faster R-CNN自带的caffe,在caffe-fast-rcnn文件夹下

$cd caffe-fast-rcnn
#如果没有cmake,要安装cmake
#$sudo apt-get install cmake
# 执行cmake生成Makefile
#编译CPU版本
#cmake -DCPU_ONLY=ON -DBLAS=Open .
#编译GPU版本
$cmake -DBLAS=Open -DCUDA_NVCC_FLAGS=--Wno-deprecated-gpu-targets .
$make -j 8

关于编译caffe的细节参见我的另一篇博客 《Ubuntu16:cmake生成Makefile编译caffe过程(OpenBLAS/CPU+GPU)塈解决nvcc warning:The ‘compute_20’,‘sm_20’》

安装pycaffe的依赖库

caffe-fast-rcnn/python/requirement.txt文件列出了pycaffe的所有依赖库,要把requirements下的依赖都装一遍

guyadong@10km-ubuntu:~/tmp/py-faster-rcnn/caffe-fast-rcnn/python$ cat requirements.txt
Cython>=0.19.2
numpy>=1.7.1
scipy>=0.13.2
scikit-image>=0.9.3
matplotlib>=1.3.1
ipython>=3.0.0
h5py>=2.2.0
leveldb>=0.191
networkx>=1.8.1
nose>=1.3.0
pandas>=0.12.0
python-dateutil>=1.4,<2
protobuf>=2.5.0
python-gflags>=2.0
pyyaml>=3.10
Pillow>=2.3.0

pycaffe的依赖库是用Python的包管理工具pip来安装的,如果还没安装pip,则要先安装python-pip

$sudo apt-get install python-pip
$sudo apt-get install opencv-python
$sudp apt-get install python-tk
$cd caffe-fast-rcnn/python
$for req in $(cat requirements.txt); sudo do pip install $req; done
sudo pip install easydict

编译faster-rcnn

编译好caffe-fast-rcnn后,在py-faster-rcnn/lib中执行make命令:

$ make
running build
running build_ext
skipping ‘utils/bbox.c’ Cython extension (up-to-date)
building ‘utils.cython_bbox’ extension
creating build
creating build/temp.linux-x86_64-2.7
creating build/temp.linux-x86_64-2.7/utils
x86_64-linux-gnu-gcc -pthread -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fno-strict-aliasing -Wdate-time -D_FORTIFY_SOURCE=2 -g -fstack-protector-strong -Wformat -Werror=format-security -fPIC -I/usr/lib/python2.7/dist-packages/numpy/core/include -I/usr/include/python2.7 -c utils/bbox.c -o build/temp.linux-x86_64-2.7/utils/bbox.o -Wno-cpp -Wno-unused-function
creating build/lib.linux-x86_64-2.7
creating build/lib.linux-x86_64-2.7/utils
x86_64-linux-gnu-gcc -pthread -shared -Wl,-O1 -Wl,-Bsymbolic-functions -Wl,-z,relro -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -Wdate-time -D_FORTIFY_SOURCE=2 -g -fstack-protector-strong -Wformat -Werror=format-security -Wl,relro -Wdate-time -D_FORTIFY_SOURCE=2 -g -fstack-protector-strong -Wformat -Werror=format-security build/temp.linux-x86_64-2.7/utils/bbox.o -o build/lib.linux-x86_64-2.7/utils/cython_bbox.so
skipping ‘nms/cpu_nms.c’ Cython extension (up-to-date)
building ‘nms.cpu_nms’ extension
creating build/temp.linux-x86_64-2.7/nms
x86_64-linux-gnu-gcc -pthread -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fno-strict-aliasing -Wdate-time -D_FORTIFY_SOURCE=2 -g -fstack-protector-strong -Wformat -Werror=format-security -fPIC -I/usr/lib/python2.7/dist-packages/numpy/core/include -I/usr/include/python2.7 -c nms/cpu_nms.c -o build/temp.linux-x86_64-2.7/nms/cpu_nms.o -Wno-cpp -Wno-unused-function
creating build/lib.linux-x86_64-2.7/nms
x86_64-linux-gnu-gcc -pthread -shared -Wl,relro -Wdate-time -D_FORTIFY_SOURCE=2 -g -fstack-protector-strong -Wformat -Werror=format-security build/temp.linux-x86_64-2.7/nms/cpu_nms.o -o build/lib.linux-x86_64-2.7/nms/cpu_nms.so
skipping ‘nms/gpu_nms.cpp’ Cython extension (up-to-date)
building ‘nms.gpu_nms’ extension
/usr/local/cuda-8.0/bin/nvcc -I/usr/lib/python2.7/dist-packages/numpy/core/include -I/usr/local/cuda-8.0/include -I/usr/include/python2.7 -c nms/nms_kernel.cu -o build/temp.linux-x86_64-2.7/nms/nms_kernel.o -arch=sm_35 –ptxas-options=-v -c –compiler-options ‘-fPIC’
ptxas info : 0 bytes gmem
ptxas info : Compiling entry function ‘_Z10nms_kernelifPKfPy’ for ‘sm_35’
ptxas info : Function properties for _Z10nms_kernelifPKfPy
0 bytes stack frame,0 bytes spill stores,0 bytes spill loads
ptxas info : Used 25 registers,1280 bytes smem,344 bytes cmem[0],8 bytes cmem2
x86_64-linux-gnu-gcc -pthread -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fno-strict-aliasing -Wdate-time -D_FORTIFY_SOURCE=2 -g -fstack-protector-strong -Wformat -Werror=format-security -fPIC -I/usr/lib/python2.7/dist-packages/numpy/core/include -I/usr/local/cuda-8.0/include -I/usr/include/python2.7 -c nms/gpu_nms.cpp -o build/temp.linux-x86_64-2.7/nms/gpu_nms.o -Wno-unused-function
cc1plus: warning: command line option ‘-Wstrict-prototypes’ is valid for C/ObjC but not for C++
In file included from /usr/lib/python2.7/dist-packages/numpy/core/include/numpy/ndarraytypes.h:1777:0,
from /usr/lib/python2.7/dist-packages/numpy/core/include/numpy/ndarrayobject.h:18,
from /usr/lib/python2.7/dist-packages/numpy/core/include/numpy/arrayobject.h:4,
from nms/gpu_nms.cpp:449:
/usr/lib/python2.7/dist-packages/numpy/core/include/numpy/npy_1_7_deprecated_api.h:15:2: warning: #warning “Using deprecated NumPy API,disable it by ” “#defining NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION” [-Wcpp]
#warning “Using deprecated NumPy API,disable it by ” \
^
c++ -pthread -shared -Wl,relro -Wdate-time -D_FORTIFY_SOURCE=2 -g -fstack-protector-strong -Wformat -Werror=format-security build/temp.linux-x86_64-2.7/nms/nms_kernel.o build/temp.linux-x86_64-2.7/nms/gpu_nms.o -L/usr/local/cuda-8.0/lib64 -Wl,-R/usr/local/cuda-8.0/lib64 -lcudart -o build/lib.linux-x86_64-2.7/nms/gpu_nms.so
skipping ‘pycocotools/_mask.c’ Cython extension (up-to-date)
building ‘pycocotools._mask’ extension
creating build/temp.linux-x86_64-2.7/pycocotools
x86_64-linux-gnu-gcc -pthread -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fno-strict-aliasing -Wdate-time -D_FORTIFY_SOURCE=2 -g -fstack-protector-strong -Wformat -Werror=format-security -fPIC -I/usr/lib/python2.7/dist-packages/numpy/core/include -Ipycocotools -I/usr/include/python2.7 -c pycocotools/maskApi.c -o build/temp.linux-x86_64-2.7/pycocotools/maskApi.o -Wno-cpp -Wno-unused-function -std=c99
x86_64-linux-gnu-gcc -pthread -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fno-strict-aliasing -Wdate-time -D_FORTIFY_SOURCE=2 -g -fstack-protector-strong -Wformat -Werror=format-security -fPIC -I/usr/lib/python2.7/dist-packages/numpy/core/include -Ipycocotools -I/usr/include/python2.7 -c pycocotools/_mask.c -o build/temp.linux-x86_64-2.7/pycocotools/_mask.o -Wno-cpp -Wno-unused-function -std=c99
creating build/lib.linux-x86_64-2.7/pycocotools
x86_64-linux-gnu-gcc -pthread -shared -Wl,relro -Wdate-time -D_FORTIFY_SOURCE=2 -g -fstack-protector-strong -Wformat -Werror=format-security build/temp.linux-x86_64-2.7/pycocotools/maskApi.o build/temp.linux-x86_64-2.7/pycocotools/_mask.o -o build/lib.linux-x86_64-2.7/pycocotools/_mask.so

运行demo

$python tools/demo.py

….
I0314 16:11:46.644143 22175 net.cpp:270] This network produces output bbox_pred
I0314 16:11:46.644161 22175 net.cpp:270] This network produces output cls_prob
I0314 16:11:46.644192 22175 net.cpp:283] Network initialization done.
[libprotobuf WARNING google/protobuf/io/coded_stream.cc:537] Reading dangerously large protocol message. >If the message turns out to be larger than 2147483647 bytes,parsing will be halted for security reasons. To >increase the limit (or to disable these warnings),see CodedInputStream::SetTotalBytesLimit() in >google/protobuf/io/coded_stream.h.
[libprotobuf WARNING google/protobuf/io/coded_stream.cc:78] The total number of bytes read was 548317115
I0314 16:11:46.803853 22175 net.cpp:816] Ignoring source layer data
I0314 16:11:46.873862 22175 net.cpp:816] Ignoring source layer drop6
I0314 16:11:46.883658 22175 net.cpp:816] Ignoring source layer drop7
I0314 16:11:46.883672 22175 net.cpp:816] Ignoring source layer fc7_drop7_0_split
I0314 16:11:46.883926 22175 net.cpp:816] Ignoring source layer loss_cls
I0314 16:11:46.883936 22175 net.cpp:816] Ignoring source layer loss_bbox
I0314 16:11:46.885593 22175 net.cpp:816] Ignoring source layer silence_rpn_cls_score
I0314 16:11:46.885612 22175 net.cpp:816] Ignoring source layer silence_rpn_bbox_pred
Loaded network /home/guyadong/tmp/py-faster-rcnn/data/faster_rcnn_models/VGG16_faster_rcnn_final.caffemodel
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Demo for data/demo/000456.jpg
Detection took 2.097s for 300 object proposals
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Demo for data/demo/000542.jpg
Detection took 1.695s for 161 object proposals
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Demo for data/demo/001150.jpg
Detection took 1.908s for 194 object proposals
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Demo for data/demo/001763.jpg
Detection took 1.785s for 196 object proposals
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Demo for data/demo/004545.jpg
Detection took 1.881s for 300 object proposals

如果在CPU上运行,要复杂一些,需要手工修改一些脚本,参见《Faster R-CNN CPU环境搭建》.

参考资料

《Faster R-CNN CPU环境搭建》
《Faster R-CNN安装笔记,只用CPU 》

相关文章

文章浏览阅读2.3k次,点赞4次,收藏22次。最近安装了CARLA预...
文章浏览阅读6.3k次,点赞5次,收藏15次。在清华镜像中下载U...
文章浏览阅读5k次。linux环境, python3.7.问题描述: 安装...
文章浏览阅读4.2k次,点赞4次,收藏17次。要安装这个 standa...
文章浏览阅读894次,点赞51次,收藏31次。在安卓使用vscode主...