rrc 是论文 Accurate Single Stage Detector Using Recurrent Rolling Convolution 中提出的。
论文地址为:rrc_detection
github 地址为:xiaohaoChen/rrc_detection
0. 环境
- Ubuntu 16.04
- cuda 8.0 + cudnn 5.1
- python 2.7
- protobuf 2.6.1
- opencv 3.1
因为 rrc_detection 年代比较久远了,所以用的都是一些比较旧的环境。
以上这些配置都是在我踩了无数次坑以后才得出来的,都是泪。
0.1 cuda7.5+cudnn 5.0
rrc-github 里面是说需要 cuda7.5+cudnn5.0,我一开始也是那么装的,但是因为我的显卡是 Titan Xp,根据维基百科上的 CUDA ,cuda7.5 并不支持 Titan Xp ,导致了后面 make runtest 的时候出现了错误:
Check failed: error == cudaSuccess (8 vs. 0) invalid device function
忽略这个错误直接跑训练,或者直接使用作者的预训练模型跑测试,都会出现这个错误。
0.2 cuda8.0+cudnn6.0
于是我切换到了cuda8.0,详情可见:Ubuntu 多版本 CUDA 共存
在编译的时候就会出错。
0.3 cuda8.0+不使用cudnn
然后我尝试将Makefile.config 里面的:
USE_CUDNN := 1
注释掉,然后可以正常编译和测试,但是在跑训练的时候会出现:
Check failed: error == cudaSuccess (2 vs. 0) out of memory
就是显存不够用了,但是我已经修改了 rrc_kitti_car.py:
batch_size = 4 --> batch_size = 1
accum_batch_size = 8 --> accum_batch_size = 1
已经没办法再小了,所以我猜是因为没有 cudnn 的优化,所以占用的内存太大了。
0.4 cuda8.0 + cudnn 5.1
这个配置可以正常编译,但是在 make runtest 的时候还是会出错:
Check failed: datum.encoded() Datum not encoded
我不管这个错误,直接去跑训练,发现可以正常跑起来,虽然还不知道结果。
而且在:
batch_size = 1
accum_batch_size = 1
的情况下,12GB 的显存也几乎都占满了:
>> nvidia-smi
Thu Apr 25 12:56:33 2019
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 390.87 Driver Version: 390.87 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| 0 TITAN Xp Off | 00000000:01:00.0 On | N/A |
| 45% 72C P2 79W / 250W | 11065MiB / 12194MiB | 5% Default |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: GPU Memory |
| GPU PID Type Process name Usage |
|=============================================================================|
| 0 999 G /usr/lib/xorg/Xorg 116MiB |
| 0 1702 C ./build/tools/caffe 10937MiB |
+-----------------------------------------------------------------------------+
注意:因为我是 zsh 用户,所以配置文件使用的是
~/.zshrc,下文中遇到~/.zshrc的地方,bash 用户请自行更换为~/.bashrc。
1. 安装caffe
1.1 安装依赖包
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
安装完以后,自动拥有了 protobuf 2.6.1了。
将代码克隆到本地:
git clone https://github.com/xiaohaoChen/rrc_detection.git
我这里的目录是:
/home/memory/code/rrc_detection
后面我们称之为 $CAFFE_ROOT,遇到 $CAFFE_ROOT 的地方,请自行更换为自己的路径。将其添加到配置文件中:
sudo gedit ~/.zshrc # zsh 用户
sudo gedit ~/.bashrc # bash 用户
在后面添加:
export PYTHONPATH=$CAFFE_ROOT/python:$PYTHONPATH # 将 $CAFFE_ROOT 换成你自己的路径
然后:
source ~/.zshrc
1.2 python 环境配置
我使用的是 Anaconda 创建的环境,使用 python2.7 创建一个环境,我的环境是:rrc_env.
启动环境,进入 $CAFFE_ROOT:
source activate rrc_env
cd $CAFFE_ROOT
安装依赖的 python 库:
pip install nump

本文档详细记录了在Ubuntu 16.04上使用CUDA 8.0和CUDNN 5.1配置RRC_Detection的完整过程,包括环境搭建、数据准备、训练和测试,并针对编译过程中遇到的问题提供了解决方案。此外,还展示了预训练模型的测试结果和置信度过滤的优化效果。
最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



