pytorch+faster-rcnn 训练PASCAL VOC2007数据集

作为初学者,这里不谈原理,只谈步骤

一、 下载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 指定需要测试的图片路径,测试后,会在该目录下生成检测的结果图片