看的代码是在github上面search的,是用pytorch实现的,网址是 faster-rcnn-pytorch
主要的过程如下
-
先把内容git 到本地
-
准备数据集,这里我先用的是voc2007的数据集
下载方式如下
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
~
把工作的目标记为$FASTERRCNN
, 在此目录下创建一个data
,并把下载好的数据里的解压好的放在这里面或者建立一个软链接也可以,要重命名为VOCdevkit2007
,
-
下载pretrained model ,我这里先用的vgg16, 放在
data/pretrained_model/vgg16_caffe.pth
. -
布训练环境,因为用到的有nms, roi-pooling,等这些需要cuda编译, 这里选择的是pytorch0.4的,cuda9.0的,目前pytorch1.0的还没有试成功,cuda90以上的也好像不行(主要原因是代码里面的cuda代码有些老如果更新的话,应该还是可以用的。)
-
python 的一些包
直接运行 pip install -r requirements.txt
- 编译cuda代码
进入lib目录下运行./make.sh
如果没有报错的话,就可以训练了
- 训练,运行
我用我的gtx1060 6G
的训练了一夜(哭。。。)跑了10个epoch,就kill 掉了
- 测试
SESSION=1
EPOCH=9
CHECKPOINT=10021
python test_net.py --dataset pascal_voc --net vgg16
--checksession $SESSION --checkepoch $EPOCH --checkpoint $CHECKPOINT
--cuda
--vis
注意 --vis
是可视化,会保存一些结果,注意要把对应的cv2...
的地方取消注释。
最后结果是
AP for aeroplane = 0.6424
AP for bicycle = 0.7631
AP for bird = 0.6314
AP for boat = 0.4765
AP for bottle = 0.5283
AP for bus = 0.7190
AP for car = 0.8080
AP for cat = 0.7815
AP for chair = 0.4219
AP for cow = 0.7183
AP for diningtable = 0.5745
AP for dog = 0.6820
AP for horse = 0.7702
AP for motorbike = 0.7275
AP for person = 0.7586
AP for pottedplant = 0.4121
AP for sheep = 0.6177
AP for sofa = 0.5467
AP for train = 0.6708
AP for tvmonitor = 0.6562
Mean AP = 0.6453
结果图展示
然后还查看了一个RCNN用的rois是什么样的。
上面是256个rois画出来的。
我是用voc2007的来做的,训练完成后很想知到底数据集是如何标注的,比如里面的difficult的是个什么情况,这些在训练的时候有没有做过特别的处理,还是和其他正常的一样直接去训练了。 先看几张图中有difficult的情况。
其实这些实际上是里面有些不太清晰的,或者不完全的。