准备工作,假设你的系统是ubuntu16.04,并且已经在home路径下安装完caffe,并且已经编译成功。
开始:
1.下载faster-rcnn,l利用下面的命令。(一定要用下面的命令,这样下载的版本才是正确的)
git clone --recursive https://github.com/rbgirshick/py-faster-rcnn.git
如果你下载的版本对的话,home路径下py-faster-rcnn,路径下应该有。caffe-faster-rcnn这个文件。
将已经编译好的caffe路径下的 Makefile ,Makefile.config文件拷贝到py-faster-rcnn\caffe-faster-rcnn,路径下。也可以自己修改。
修改方法如下:
sudo mv Makefile.config.example Makefile.config
Makefile.config中需要修改的行:
#使用cudnn
USE_CUDNN := 1
#去掉不合适的cuda计算能力参数
CUDA_ARCH := -gencode arch=compute_50,code=sm_50 \
-gencode arch=compute_52,code=sm_52 \
-gencode arch=compute_60,code=sm_60 \
-gencode arch=compute_61,code=sm_61 \
-gencode arch=compute_61,code=compute_61
# 开启PYTHON支持
WITH_PYTHON_LAYER := 1
# INCLUDE_DIRS路径上,追加/usr/include/hdf5/serial,因为hdf5这个包在ubuntu16.04换成hdf5/seiral这种用法
INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial
其他项,比如atlas、anaconda的python等,看情况修改,不修改也OK。
Makefile中需要修改的行:
# LIBRARIES变量,把hdf5的两个库名换掉,从hdf5_hl->hdf_serial_hl hdf5->hdf5_serialLIBRARIES += glog gflags protobuf boost_system boost_filesystem m hdf5_serial_hl hdf5_serial
(老版本的cuda可能需要下面这个修改,cuda8则不必:
找到第397行,NVCCFLAGS += -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS)修改为NVCCFLAGS += -D_FORCE_INLINES -ccbin=$(CXX) -Xcompiler -fPIC $(COMMON_FLAGS) (添加了-D_FORCE_INLINES参数)
cd caffe-fast-rcnn
git remote add caffe https://github.com/BVLC/caffe.git
git fetch caffe
git merge -X theirs caffe/master
(git checkout -f )
(git pull)
:这一步的每个命令需要的时间比较长,所以需要你的耐心等待。
注意:在执行 git merge -X theirs caffe/master 后,如果出现下面的画面,
则按照步骤分别执行git checkout -f, git pull。
执行完成之后 在分别执行 git fetch caffe,git merge -X theirs caffe/master。
这时,执行git merge -X theirs caffe/master会出现下面的界面要求输入注释信息: 不必输入任何内容,直接按Ctrl-X 离开
提示是否存储更动过的缓冲区,输入Y ,ENTER
就完成了分支合并过程。没有出现错误,就表示成功完成合并。参考下面画面。
整个过程如下图:
测试:
python
import caffe
方法2:纯手工修改
用最新caffe源码的以下文件替换掉faster rcnn 的对应文件
include/caffe/layers/cudnn_relu_layer.hpp, src/caffe/layers/cudnn_relu_layer.cpp, src/caffe/layers/cudnn_relu_layer.cu
include/caffe/layers/cudnn_sigmoid_layer.hpp, src/caffe/layers/cudnn_sigmoid_layer.cpp, src/caffe/layers/cudnn_sigmoid_layer.cu
include/caffe/layers/cudnn_tanh_layer.hpp, src/caffe/layers/cudnn_tanh_layer.cpp, src/caffe/layers/cudnn_tanh_layer.cu
用caffe源码中的这个文件替换掉faster rcnn 对应文件
include/caffe/util/cudnn.hpp
将 faster rcnn 中的 src/caffe/layers/cudnn_conv_layer.cu 文件中的所有
cudnnConvolutionBackwardData_v3 函数名替换为 cudnnConvolutionBackwardData
cudnnConvolutionBackwardFilter_v3函数名替换为 cudnnConvolutionBackwardFilter
3.修改python_layer.hp
版本合并后,打开caffe-fast-rcnn/include/caffe/layers/python_layer.hp,self_.attr("phase") = static_cast<int>(this->phase_);这一行(line29)删除(如果有的话就删除,没有就不修改,可能会没有)
4.Build the Cython modules
进入py-faster-rcnn下面的lib文件下,编译。(注意:$FRCN_ROOT为py-faster-rcnn的路径也可以直接在lib文件下打开终端执行make)
cd $FRCN_ROOT/lib (或者cd py-faster-rcnn/lib)
make
5.编译caffe
进入到caffe-faster-rcnn,路径下编译。可以直接编译,也可以建立一个build文件,用camke编译。
方法一:camke编译
cd caffe-fast-rcnn
mkdir build
cd build
cmake -D WITH_CUDA=ON -D CUDA_ARCH_BIN="5.3" -D CUDA_ARCH_PTX="" -D WITH_GSTREAMER=ON -D BUILD_TESTS=OFF -D BUILD_PERF_TESTS=OFF -D BUILD_EXAMPLES=OFF -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local ..
出现上面的画面表示cmake成功。然后执行下面的步骤。
make -j8
make install
sudo make install
make clean(必须在build文件夹里面make clean之后在 make pycaffe。必须在build文件夹里面make pycaffe)
make pycaffe
至此编译成功
方法二:直接编译,不建立build文件。
make -j8
make pycaffe
6.配置环境变量
不建议在/etc/profile中进行存放,因为这是局部变量,在bashrc中添加环境变量是全局变量。
sudo gedit /etc/bash.bashrc
PYTHONPATH=/home/yll/py-faster-rcnn/caffe-fast-rcnn/python:$PYTHONPATH
添加完成后记得更新环境变量
# source /etc/bash.bashrc
查看环境变量设置是否成功:
echo $PYTHONPATH
echo $PATH
7.测试是否安装成功打开终端输入:
python /(这是打开python界面)
import caffe
如果没有出错,就是正确安装。
8.测试faster-rcnn
8.1 下载模型文件
cd py-faster-rcnn/data/scriptsgedit fetch_faster_rcnn_models.sh
复制其中的URL地址(http://www.cs.berkeley.edu/~rbg/faster-rcnn-data),打开下载faster_rcnn_models.tgz文件。我在windows系统下用迅雷下的,ubuntu里下载速度太慢了……
下载后把文件放在这里,
cd py-faster-rcnn/data
并解压
tar zxvf faster_rcnn_models.tgz -C ./
8.2 运行demo
cd py-faster-rcnn/tools
./tools/demo.py
如果能正常出现图片就表示成功。
成功编译完成py-fasterrcnn成功编译完成py-fasterrcnn