环境:Linux系统,GPU
1.首先在GitHub上找到这个源码 ,然后根据下面的ReadMe教程一步步跑通,建议先用VOC2007数据集训练,可以先把迭代次(在/FRCN_ROOT/experiments/scripts/faster_rcnn_end2end.sh文件下)数从7000改成100,只是测试有没有问题,节省时间,中途会遇到一些错误,你可以根据源码上面的issue来找解决方案,一般错误都能找到
2.如果第1步训练完没有问题,那么就可以开始制作自己的数据集了(数据标签尽量用小写字母),只是把数据集相应文件夹替换成你自己的数据就可以,制作数据集教程在这里 ,里面讲的很详细,工具也都有,
3.制作完之后就要修改自己源码的相应代码了,毕竟分的类数什么的不一样,所以要修改一下,修改也十分简单,
3.1,Faster_RCNN/lib/datasets/pascal_voc.py文件 修改成自己的类
中间需要注意一点,如果你的标签像我一样用了大写字母,那么运行测试的时候会报错,解决办法见文末
3.2 ,/Faster_RCNN/lib/networks/VGGnet_train.py 文件
3.3 /Faster_RCNN/lib/networks/VGGnet_test.py 文件
4.如果你之前训练过一些数据的话,那么还要删除一些缓存内容
4.1,Faster_RCNN/data/cache
4.2,Faster_RCNN/output/faster_rcnn_end2end
4.3,Faster_RCNN/data/VOCdevkit2007/annotations_cache/annots.pkl
5.修改demo.py,以便使用自己的数据来测试,然后保存,由于demo.py里面原来只是选取/FRCN_ROOT/data/demo文件夹下的文件进行测试,所有我们要把这个文件夹下的图片替换成自己的测试图片,然后运行demo.py进行测试的时候是只显示出测试好的图片,而不保存测试好的图片,所有要把这个该一下,改成保存测试好的图片,如下图:
训练:
6.然后执行训练,在训练之前,你可以按照第1步的方法,先将训练次数调小,如果训练成功,再重复第4步,调大迭代次数(一般是70000)训练,在FRCN_ROOT文件夹下执行:
./experiments/scripts/faster_rcnn_end2end.sh gpu 0 VGG16 pascal_voc
测试:
7.执行下面命令:
cd $FRCN_ROOT
python ./tools/demo.py --model /home/FENGsl/Faster_RCNN/output/faster_rcnn_end2end/voc_2007_trainval/VGGnet_fast_rcnn_iter_70000.ckpt
问题描述:
1.如果你做数据集的时候把标签的写成的大写字母,会出现KeyError错误提示。
解决办法:找到下面的地方
cls = self._class_to_ind[obj.find('name').text.lower().strip()]
把lower()去掉即可。
2.如果你用了远程服务器来训练,那么图片是不能显示的,会出现RuntimeError: Invalid DISPLAY variable,
解决办法:需要修改demo.py文件,中间两行
from utils.timer import Timer
import matplotlib.pyplot as plt
plt.switch_backend('agg')
import numpy as np
谢谢大家,我的表演结束,来欣赏我的一些测试结果: