电脑配置
CPU:英特尔 Xeon(至强) E5-1620 v2 @ 3.70GHz 四核
显卡:Nvidia Quadro K2200
操作系统:Ubuntu 16.04
显卡驱动安装
1 2 3 4
| sudo add-apt-repository ppa:graphics-drivers/ppa sudo apt-get update sudo apt-get install nvidia-367 nvidia-smi #查看驱动是否安装成功
|
安装测试CUDA
安装CUDA
我下载的版本是cuda_8.0.61_375.26_linux,下载runfile(local)那个
2. 切换到安装包所在目录,执行命令
1
| sudo cuda_8.0.61_375.26_linux.run --override
|
1). 启动安装程序,一直按空格到最后,输入accept接受条款
2). 输入n不安装nvidia图像驱动,之前已经安装过了
3). 输入y安装cuda 8.0工具
4). 回车确认cuda默认安装路径:/usr/local/cuda-8.0
5). 输入y用sudo权限运行安装,输入密码
6). 输入y或者n安装或者不安装指向/usr/local/cuda的符号链接
7). 输入y安装CUDA 8.0 Samples,以便后面测试
8). 回车确认CUDA 8.0 Samples默认安装路径:/home/yuan(yuan是我的用户名),该安装路径测试完可以删除
安装cuDNN v5.1
需要申请注册账号,我下载的版本是cudnn-8.0-linux-x64-v5.1
切换到文件所在目录,解压文件
1
| tar zxvf cudnn-8.0-linux-x64-v5.1.tgz
|
此时在该目录下会产生一个cuda文件,执行以下命令:
1 2 3 4 5
| cd cuda/include/ sudo cp cudnn.h /usr/local/cuda/include/ #复制头文件 cd ../lib64 #打开lib64目录 sudo cp lib* /usr/local/cuda/lib64/ #复制库文件 sudo chmod a+r /usr/local/cuda/include/cudnn.h /usr/local/cuda/lib64/libcudnn* #给所有用户增加这些文件的读权限
|
建立软链接
执行以下命令:
1 2 3 4
| cd /usr/local/cuda/lib64/ sudo rm -rf libcudnn.so libcudnn.so.5 sudo ln -s libcudnn.so.5.1.5 libcudnn.so.5 sudo ln -s libcudnn.so.5 libcudnn.so
|
设置环境变量,终端输入
在末尾加入
1 2
| PATH=/usr/local/cuda/bin:$PATH export PATH
|
保存后,创建链接文件
1
| sudo vim /etc/ld.so.conf.d/cuda.conf
|
按a进入插入模式,增加下面一行
按esc退出插入模式,按:wq保存退出
最后在终端输入sudo ldconfig使链接生效
cuda Samples测试
打开CUDA 8.0 Samples默认安装路径,终端输入
1 2 3 4
| cd /home/yuan/NVIDIA_CUDA-8.0_Samples #(yuan是我的用户名) sudo make all -j8 cd bin/x86_64/linux/release ./deviceQuery
|
不报错说明CUDA安装成功。
安装相关依赖包
执行以下命令:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| sudo apt-get install build-essential #必要的编译工具依赖 sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev protobuf-compiler sudo apt-get install --no-install-recommends libboost-all-dev sudo apt-get install libatlas-base-dev sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev sudo apt-get install git sudo apt-get install python-pip pip install ipython pip install cython sudo apt-get install python-numpy python-scipy python-matplotlib python-skimage #安装protobuf!!! pip install protobuf easydict pyyaml sudo install cmake
|
安装opencv 3.1.0
执行以下命令:
1 2 3 4 5
| wget https://github.com/Itseez/opencv/archive/3.1.0.zip cd opencv3.1.0/ mkdir build cd build cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..
|
将/home/yuan/opencv-3.1.0/modules/cudalegacy/src/graphcuts.cpp里的
1
| #if !defined (HAVE_CUDA) || defined (CUDA_DISABLER)
|
改为
1
| #if !defined (HAVE_CUDA) || defined (CUDA_DISABLER) || (CUDART_VERSION >= 8000)
|
make
1 2
| make -j8 sudo make install
|
安装配置caffe
1 2 3 4
| git clone https://github.com/BVLC/caffe.git cd caffe sudo cp Makefile.config.example Makefile.config sudo gedit Makefile.config #打开Makefile.config文件
|
根据个人情况修改文件
若使用cudnn,则修改
若使用的opencv版本是3的,则修改
若要使用python来编写layer,则将
修改为
- 重要的一项 :
将1
| # Whatever else you find you need goes here.
|
下面的
1 2
| INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib
|
修改为:
1 2
| 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
|
这是因为ubuntu16.04的文件包含位置发生了变化,尤其是需要用到的hdf5的位置,所以需要更改这一路径。
终端输入
若编译失败可以
清除第一次编译结果然后
1 2 3 4 5 6 7 8 9
| make all -j8 make test -j8 sudo ldconfig make runtest -j8 make pycaffe -j8 make distribute #生成发布安装包 cd /home/yuan/caffe/python python import caffe
|
不报错则编译成功
下载mnist数据集测试
终端输入
1 2 3 4
| cd home/yuan/caffe/data/mnist/ ./get_mnist.sh cd /home/yuan/caffe/ ./examples/mnist/create_mnist.sh
|
训练
1
| ./examples/mnist/train_lenet.sh
|
训练的时候可以看到精度和损失值。
至此Caffe配置成功。
配置py_faster-rcnn
终端执行以下命令:
1 2 3 4
| git clone --recursive https://github.com/rbgirshick/py-faster-rcnn.git cd py-faster-rcnn/lib make cd py-faster-rcnn/caffe-fast-rcnn/
|
更新caffe版本
1 2 3
| git remote add caffe https://github.com/BVLC/caffe.git git fetch caffe git merge caffe/master #有的地方合并失败也没关系
|
在合并之后注释掉include/caffe/layers/python_layer.hppa文件里的
1
| self_.attr(“phase”) = static_cast(this->phase_)
|
把home/yuan/caffe目录下的Makefile.config文件copy到py-faster-rcnn/caffe-fast-rcnn/下
执行命令
将/home/yuan/caffe/python/caffe目录下的_caffe.cpp copy(替换)到/home/yuan/py-faster-rcnn/caffe-fast-rcnn/python/caffe
执行命令
将/home/yuan/py-faster-rcnn/caffe-fast-rcnn/python/caffe/init.py里的
1 2
| from .pycaffe import Net, SGDSolver, NesterovSolver, AdaGradSolver, RMSPropSolver, AdaDeltaSolver, AdamSolver from ._caffe import set_mode_cpu, set_mode_gpu, set_device, Layer, get_solver, layer_type_list, set_random_seed
|
删去,包括<<<<<HEAD和caffe master非法字符串。
运行faster rcnn demo
在windows端用迅雷下载model,URL:
1 2
| https://dl.dropboxusercontent.com/s/o6ii098bu51d139/faster_rcnn_models.tgz?dl=0 CHECKSUM=ac116844f66aefe29587214272054668
|
在ubuntu环境中将文件解压到py-faster-rcnn/data/下,执行命令
1 2
| cd py-faster-rcnn/ ./tools/demo.py --net zf #--net:指定模型
|
运行faster rcnn demo时遇到的问题
问题1:
1 2 3
| File "/home/yuan/py-faster-rcnn/tools/../lib/rpn/proposal_layer.py", line 64, in forward cfg_key = str(self.phase) # either 'TRAIN' or 'TEST' AttributeError: 'ProposalLayer' object has no attribute 'phase'
|
解决办法:找到/lib/rpn/proposal_layer.py,将第64行修改为 cfg_key = ‘TEST’(训练时再改回来?)
问题2:
1 2 3 4
| Loaded network /home/yuan/py-faster-rcnn/data/faster_rcnn_models/ZF_faster_rcnn_final.caffemodel F0518 13:29:12.159129 2920 roi_pooling_layer.cu:91] Check failed: error == cudaSuccess (8 vs. 0) invalid device function *** Check failure stack trace: *** 已放弃 (核心已转储)
|
解决办法:显卡计算能力不同导致。修改 py-faster-rcnn/lib/setup.py 的第135行,将arch改为与显卡相匹配的数值,然后删除utils/bbox.c,nms/cpu_nms.c ,nms/gpu_nms.cpp。
重新编译:
1 2 3 4 5
| cd py-faster-rcnn/lib/ make cd ../caffe-fast-rcnn/ make clean make -j4 && make pycaffe -j8
|