作为初学者,这里不谈原理,只谈步骤
一、 下载faster-rcnn代码
代码路径: https://github.com/dongdonghy/Detection-PyTorch-Notebook.git
下载后,faster-rcnn代码路径在: Detection-PyTorch-Notebook/chapter4/faster-rcnn-pytorch
二、 安装pytorch和依赖包
1、 建议安装pytorch 0.4.0或0.4.1 版本(安装高版本的pytorch,训练时会报一堆错误)
2、 安装其它依赖包,见:Detection-PyTorch-Notebook/chapter4/faster-rcnn-pytorch/requirements.txt
三、 准备工作
1、下载PASCAL VOC2007数据集,2007数据集有三个tar包
http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtrainval_06-Nov-2007.tar
http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtest_06-Nov-2007.tar
http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCdevkit_08-Jun-2007.tar
将三个tar包放到任意一个目录下解压,如/home目录,解压后的目录结构如下:
----VOCdevkit
------VOC2007
------VOCcode
------其他一些文件和目录
说明: 我在使用VOC2012数据集的时候,训练报错,所以我这里直接使用的是VOC2007数据集
3、创建软链接,假设voc2007数据集在/home目录下
cd Detection-PyTorch-Notebook/chapter4/faster-rcnn-pytorch && mkdir data
cd data
ln -sf /home/VOCdevkit VOCdevkit2007
4、下载预训练的网络模型,我使用的是vgg16
地址:https://filebox.ece.vt.edu/~jw2yang/faster-rcnn/pretrained-base-models/vgg16_caffe.pth
将下载的vgg16_caffe.pth拷贝到data/pretrained_model目录下
5、 根据自己的GPU型号,修改lib/make.sh文件中的CUDA_ARCH
6、 由于在NMS与RoI Pooling中使用了CUDA进行加速,因此还需要对此进行编译。
cd lib && sh make.sh
需要注意的是:因为代码是windows格式的,编译有可能会报错,建议使用dos2unix将所有的文件格式转换一下
四、 开始训练
1、 修改faster-rcnn-pytorch/lib/datasets/pascal_voc.py 文件里的__init__方法,将下面两行注释掉,这里不需要指定路径,因为程序会自动解析路径的
self._devkit_path="/root/Detection-PyTorch-Notebook/chapter4/faster-rcnn-pytorch/data/VOC2012"
self._data_path = “/root/Detection-PyTorch-Notebook/chapter4/faster-rcnn-pytorch/data/VOC2012”
2、 训练模型
python trainval_net.py --dataset pascal_voc --net vgg16 --bs 24 --nw 4 --cuda --mGPUs
我这里使用的是多GPU,如果你是单卡,可以根据情况调整参数,具体参数可以看这篇文章:https://github.com/jwyang/faster-rcnn.pytorch
训练结束后,会在models/vgg16/pascal_voc目录下生成很多个模型文件,模型文件命名格式:faster_rcnn_${checksession}_${checkepoch}_${checkpoint}.pth
注意: 由于py文件里有一些中文注释,在运行trainval_net.py时会提示编码错误,当报错时,在报错的py文件第一行里添加如下代码即可:# -- coding: UTF-8 --
3、 验证模型
python test_net.py --dataset pascal_voc --net vgg16 --cuda --mGPUs --checkepoch 20 --checkpoint 416 --checksession 1
验证时会根据指定的checkepoch、checkpoint 和checksession找到对应的模型文件,所以这里指定的这三个参数值必须在models/vgg16/pascal_voc/ 目录下存在该模型
4、 测试自己的图片
python demo.py --checkepoch 20 --checkpoint 416 --checksession 1 --net vgg16 --image_dir ./images
同样的道理,会根据指定的checkepoch、checkpoint 和checksession找到对应的模型文件。 其中–image_dir 指定需要测试的图片路径,测试后,会在该目录下生成检测的结果图片