最近开始做目标检测的这个模型了,里面有用到Faster R-CNN的部分,就是关于RPN网络。捣鼓了三天了,看了无数的博客,GitHub终于跑通了代码。故作以记录。
一、代码下载地址
https://github.com/jwyang/faster-rcnn.pytorch/tree/pytorch-1.0
二、代码框架
我是通过迅雷在GitHub上下载,然后解压之后在复制到服务器。与下载后的差别就是data这个文件夹。
三、数据集准备
不管是进行测试还是训练,作者都是用的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
当然,要创建一个data的文件夹,把这些数据集解压在data这个文件夹下:
cd faster-rcnn.pytorch-pytorch-1.0
mkdir data
cd data
tar xvf VOCtrainval_06-Nov-2007.tar
tar xvf VOCtest_06-Nov-2007.tar
tar xvf VOCdevkit_08-Jun-2007.tar
解压之后会得到一个VOCdevkit的文件夹:
然后进入到data文件下面之后,我们要为这个数据集创建一个软连接。
ln -s ./VOCdevkit ./VOCdevkit2007
四、下载预训练的模型
进入data目录后在新建一个文件夹pretrained_model,然后下载两个预训练的模型,将这两个模型放到pretrained_model中。
vgg16:https://www.dropbox.com/s/s3brpk0bdq60nyb/vgg16_caffe.pth?dl=0
resnet101:https://www.dropbox.com/s/iev3tkbz5wyyuz9/resnet101_caffe.pth?dl=0
五、实验环境
Linux 18.04
4*2080Ti
CUDA 10.1
pytorch 1.4.0
torchvision 0.5
六、运行程序
1、demo测试
因为要进行demo测试,因此我们要下载预先训练好的模型,执行以下操作:
cd data/pretrained_model/
sudo mkdir -p vgg16/poscal_voc
下载预训练模型,然后放至data/pretrained_model/vgg16/poscal_voc
pretrained_faster_model:https://www.dropbox.com/s/6ief4w7qzka6083/faster_rcnn_1_6_10021.pth?dl=0
这个时候所有的模型,数据集都已经下载好了,现在要做的就是安装所需要的包,并执行脚本。然后就可以进行测试了。
pip install -r requirements.txt
cd lib
sh make.sh
cd ..
这个时候开始进行demo测试即可。运行以下命令:
python demo.py --net vgg16 --checksession 1 --checkepoch 6 --checkpoint 10021 --cuda --load_dir ./data/pretrained_model/
demo测试结果:
当然你可以把你想要测试的图片放到Image这个文件夹下面都是可以的。
2、训练模型
python trainval_net.py --dataset pascal_voc --net vgg16 \--bs 4 --nw 4 \--cuda --mGPUs
训练该模型的时候,我的batch_size设置为4,num_works设置为4,因为我有4块2080Ti,因此跑起来还是比较爽的。
忘记训练了多久,训练结束后生成了一个模型。
3、在VOC数据集上做测试
python test_net.py --dataset pascal_voc --net vgg16 --checksession 1 --checkepoch 6 --checkpoint 10021 --cuda --load_dir ./data/pretrained_model/
测试的结果如下:
mAP = 0.6581
七、雷区
在运行faster r-cnn的时候,陷阱太多了,只记录最能记清的一个陷阱:
对应的解决方案在下面链接中。要下载COCOAPI,然后用里面的pycocotools代替lib/pycocotools.
https://github.com/jwyang/faster-rcnn.pytorch/issues/410