前言:
最近本人沿着导师给的课题,在研究A-Fast-Rcnn这篇论文,下载地址为http://www.cs.cmu.edu/~xiaolonw/papers/CVPR2017_Adversarial_Det.pdf。在运行A-Fast-Rcnn代码的过程中,网上能搜索到的资料寥寥无几,在这里特别感谢http://m.blog.csdn.net/u014380165/article/details/73069947这篇博客的博主,整个过程写的非常详细。本人跑通代码基本上就只参考了这一篇博客。本人在这篇博客的基础上,修改了部分博客中的错误,将运行过程进一步详细,并结果自己运行的过程新增了一些内容,现把整个过程与大家分享。
后续我可能还会写这篇论文的理论总结,尽请关注。
1.从Faster RCNN的git上拉取项目:
git clone –recursive https://github.com/rbgirshick/py-faster-rcnn.git
将拉取下来的文件名改名为A-Fast-Rcnn
2.从A-Fast-RCNN的git上拉取项目:
git clone –recursive https://github.com/xiaolonw/adversarial-frcnn
然后把这个项目里的所有文件手动覆盖到A-Fast-Rcnn这个目录中去
3.复制配置文件并编译caffe和pycaffe:
cd &A-Fast-Rcnn的目录/caffe-fast-rcnn
cp Makefile.config.example Makefile.config
修改Makefile.config
将# WITH_PYTHON_LAYER := 1 改为WITH_PYTHON_LAYER := 1
将INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include
改为INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial/
将LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib
改为LIBRARY_DIRS := $(PYTHON_LIB) /usr/local/lib /usr/lib /usr/lib/x86_64-linux-gnu/hdf5/serial/
将# USE_PKG_CONFIG := 1改为USE_PKG_CONFIG := 1
修改完成后保存,进行编译,
make -j8 && make pycaffe
4.编译cython
cd &A-Fast-Rcnn的目录/lib
make
5.准备数据
下载数据集,并存放到&A-Fast-Rcnn的目录/data/目录下,取名为VOCdevkit2007。
cd &A-Fast-Rcnn的目录/data
wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtrainval_06-Nov-2007.tar
wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtest_06-Nov-2007.tar
wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCdevkit_08-Jun-2007.tar
然后解压:
tar xvf VOCtrainval_06-Nov-2007.tar
tar xvf VOCtest_06-Nov-2007.tar
tar xvf VOCdevkit_08-Jun-2007.tar
若找不到文件请先使用命令chmod 777 xxx(三个数据包的名称).tar修改一下文件的权限。
下载完成后的数据集文件夹名为VOCdevkit,改为VOCdevkit2007。
6.下载selective_search_data.tgz文件
原博客给出的下载链接失效了,本人参看了A-Fast-Rcnn和Faster R-CNN的selective_search_data.tgz。发现好像是Ross Girshick大神(Fast-RCNN的作者)更换源码的地址了。作者可自行到https://dl.dropboxusercontent.com/s/orrt7o6bp6ae0tc/selective_search_data.tgz?dl=0上去下载,大小为458M。
顺便说一句:Ross Girshick真大神,rcnn、fast-rcnn、faster-rcnn都有他,还有何凯明大神,sppnet、faster-rcnn、resnet、mask-rcnn也是无处不在。两个人从微软研究院到facebook都一直在一起工作。
7.下载预训练的ImageNet模型
cd &A-Fast-Rcnn的目录
./data/scripts/fetch_imagenet_models.sh
但是下载下来后一直都是一个20多k的文件,这个下载链接也失效了。
同样参看A-Fast-Rcnn和Faster R-CNN的fetch_imagenet_models.sh,也是更换了源码地址的原因,作者可自行到https://dl.dropbox.com/s/gstw7122padlf0l/imagenet_models.tgz?dl=0上去下载。
8.开始训练
cd &A-Fast-Rcnn的目录
./train.sh
同样,权限不够请先使用命令chmod 777 train.sh修改权限。
用gedit或其他软件打开train.sh,可以看到训练过程分为四步。读者也可以依次执行这四行命令,效果和直接运行./train.sh相同。接下来我们详细解释一下训练的这四个步骤。
8.1 ./experiments/scripts/fast_rcnn_std.sh 0 VGG16 pascal_voc
这是train.sh代码的第一行,表示用VGG16网络、0号GPU、pascal_voc数据集对标准的Fast-Rcnn进行预训练,迭代10000次。
训练结束后会生成/output/fast_rcnn_adv/voc_2007_trainval/fast_rcnn_std_iter_10000.caffemodel
因为没有预训练的ImageNet模型,只能从github上下载作者训练好的Fast-Rcnn模型,地址为https://github.com/xiaolonw/adversarial-frcnn
下拉到网页底部,点击model下载,如下图所示
下载后将网络拷贝到&A-Fast-Rcnn的目录/output/fast_rcnn_adv/voc_2007_trainval/目录。
另外说一句,logs是作者训练的记录文件,读者若有需要也可以下载下来。
8.2 ./experiments/scripts/fast_rcnn_adv_pretrain.sh 0 VGG16 pascal_voc
这是train.sh代码的第二行,表示用VGG16网络、0号GPU、pascal_voc数据集对对抗网络进行预训练,迭代25000次。
训练结束后会生成&A-Fast-Rcnn的目录/output/fast_rcnn_adv_pretrain/voc_2007_trainval/ffast_rcnn_adv_pretrain_iter_25000.caffemodel
从git上下载作者训练好的对抗网络模型,地址为https://github.com/xiaolonw/adversarial-frcnn
下拉到网页底部,点击model下载,如下图所示
下载后将网络拷贝到&A-Fast-Rcnn的目录/output/fast_rcnn_adv_pretrain/voc_2007_trainval/目录。
8.3 ./copy_model.h
这是train.sh代码的第三行,表示拷贝前面训练的两个模型的参数用来初始化联合模型(joint model)
8.4 ./experiments/scripts/fast_rcnn_adv.sh 0 VGG16 pascal_voc
这是train.sh代码的第四行,表示用VGG16网络、0号GPU、pascal_voc数据集对联合模型进行训练,迭代40000次。
训练结束后会生成&A-Fast-Rcnn的目录/output/fast_rcnn_adv/voc_2007_trainval/fast_rcnn_adv_iter_40000.caffemodel
从git上下载作者训练好的联合模型,地址为https://github.com/xiaolonw/adversarial-frcnn
下拉到网页底部,点击model下载,如下图所示
下载后将网络拷贝到&A-Fast-Rcnn的目录/output/fast_rcnn_adv/voc_2007_trainval/目录。
9.测试
cd &A-Fast-Rcnn的目录
time sudo ./tools/test_net.py –gpu 0 –def models/pascal_voc/VGG16/fast_rcnn/test.prototxt –net output/fast_rcnn_adv/voc_2007_trainval/fast_rcnn_adv_iter_40000.caffemodel –imdb voc_2007_test –cfg experiments/cfgs/fast_Rcnn_adv_128.yml
最终结果如下图: