前言赘述几句:本文有参考过其他大佬写的文档,但时间久远记不清了。侵删。求职季攒人品,把自己整理过的东西发出来分享一下,本人很水,以下流程也比较机械,有不合适的地方欢迎指出。
1.将数据集所有标签复制到'/home/jiangshan/py-faster-rcnn/data/VOCdevkit2007/VOC2007/Annotations'目录下。
2.将数据集所有图片复制到'/home/jiangshan/py-faster-rcnn/data/VOCdevkit2007/VOC2007/JPEGImages'目录下。
3.将'/home/jiangshan/py-faster-rcnn/data/VOCdevkit2007/VOC2007/ImageSets/Main/'目录下的test.txt文件、train.txt文件、trainval.txt文件、val.txt文件内容清空。
然后执行Desktop目录下的matlab文件generate_sets.m文件,命令为:
>>matlab
>>cd /home/jiangshan/Desktop/
>>generate_sets(不需要加后缀名)
其它需要改的文件:
4.lib/datasets/下的pascal_voc.py(修改类别)和factory.py(添加新数据集?好像不用。。)
5.models/pascal_voc/下存放相应的模型配置文件,打开相应的train.prototxt:
(1)、input-data层的num_classes: n (自己要训练的类别+1,1为背景类background)
(2)、roi_data层的num_classes:n
(3)、cls_score层的num_output:n
(4)、bbox_pred层的num_output : 4*n
6.再打开同一目录下的test.prototxt文件:
(1)、cls_score层的num_output:n(自己要训练的类别+1,1为背景类background)
(2)、bbox_pred层的num_output : 4*n
7.lib/datasets/imdb.py文件:
找到append_flipped_images函数,修改
widths = self._get_widths()
这一行,为:
widths = [PIL.Image.open(self.image_path_at(i)).size[0]
fori in xrange(num_images)]
8.experiments/cfgs/faster_rcnn_end2end.yml文件:
可以根据自己的需要在这个文件中添加配置,例如在训练时进行模型快照的迭代次数,是否翻转等,相应的参数可以参考py-faster-rcnn/lib/fast_rcnn/config.py。 不需要更改config.py,在faster_rcnn_end2end.yml中添加语句即可。
9.训练前,将output文件夹、data/cache/中的文件、data/VOCdevkit2007/annotations_cache中的文件删除。
10.学习率等参数可在models/pascal_voc/ZF/faster_rcnn_end2end/solver.prototxt文件中进行修改。
11.迭代次数可在tools/train_net.py中进行修改。
(注:如果修改了迭代次数,那么步长也要修改----将models/pascal_voc/ZF/faster_rcnn_end2end/solver.prototxt文件中的stepsize修改掉,数值要小于迭代次数。
12.检查一下显卡情况:
执行nvidia-smi命令。
12.开始训练:
进入py-faster-rcnn目录,执行:
./experiments/scripts/faster_rcnn_end2end.sh0 ZF pascal_voc
注----格式:
#./experiments/scripts/faster_rcnn_end2end.sh GPU NET DATASET [options args to{train,test}_net.py]
# DATASET is either pascal_voc or coco.
注:建议开一个tmux窗口来跑。