先将自己的数据转成VOC数据集类似的数据,图片为jpg格式,标签为xml格式。
在Faster RCNN目录下的data文件夹下建立VOCdevkit2007文件夹,再在此文件夹下建立VOC2007文件夹,再在VOC2007文件夹下建立Annotations,ImageSets , JPEGImages三个文件夹,Annotations文件夹下存放xml文件,ImageSets文件夹下建立Main文件夹下面存放train.txt,test.txt,val.txt与trainval.txt四个文件夹,JPEGImages里存放图片。
修改train.prototxt和solver.prototxt
打开/py-faster-rcnn/models/pascal_voc/VGG16/faster_rcnn_end2end/train.prototxt,使用编辑器的查找替换功能,将其中的数字21替换成你自己的数据集类别数+1,将数字84替换成你自己的(数据集类别数+1)*4,这个文件中共有3处21,一处84需要替换;
在/py-faster-rcnn/models/pascal_voc/VGG16/faster_rcnn_end2end/solver.prototxt中,根据自己的实际情况修改,比如我只是的总训练迭代次数只设置了10000次,所以solver文件中,stepsize值我改成了6000。
修改pascal_voc.py
将/py-faster-rcnn/lib/datasets/pascal_voc.py中的约33行处的:
self._classes = ('__background__', # always index 0
'aeroplane', 'bicycle', 'bird', 'boat',
'bottle', 'bus', 'car', 'cat', 'chair',
'cow', 'diningtable', 'dog', 'horse',
'motorbike', 'person', 'pottedplant',
'sheep', 'sofa', 'train', 'tvmonitor')
改成自己的类别名称。
以上准备工作完成后,在/py-faster-rcnn/目录下打开bash,执行:
python ./tools/train_net.py --gpu 0
Faster RCNN默认只能是单GPU进行训练,如果要实现多GPU训练需要另外配置修改一下Faster RCNN,重点参考https://github.com/TianSong1991/MLKP。Faster RCNN使用python进行训练,默认的Python layers的batch_size是1,而且不允许修改,需要改变的话也需要修改Faster RCNN,参考Faster RCNN的github。
修改test.prototxt
打开/py-faster-rcnn/models/pascal_voc/VGG16/faster_rcnn_end2end/test.prototxt,使用编辑器的查找替换功能,将其中的数字21替换成你自己的数据集类别数+1,将数字84替换成你自己的(数据集类别数+1)*4,这个文件中共有1处21,一处84需要替换;
修改demo.py
训练得到的模型在这里:
将其复制到/py-faster-rcnn/data/faster_rcnn_models/目录下。
然后打开demo.py,将
CLASSES = ('__background__',
'aeroplane', 'bicycle', 'bird', 'boat',
'bottle', 'bus', 'car', 'cat', 'chair',
'cow', 'diningtable', 'dog', 'horse',
'motorbike', 'person', 'pottedplant',
'sheep', 'sofa', 'train', 'tvmonitor')
改成自己的标签,将
NETS = {'vgg16': ('VGG16',
'VGG16_faster_rcnn_final.caffemodel'),
中的模型改成自己训练保存的模型。比如我修改的内容:
CLASSES = ('__background__', 'type1', 'type2', 'type3', 'type4', 'type5')
NETS = {'vgg16': ('VGG16',
'vgg16_faster_rcnn_iter_10000.caffemodel'),
将
prototxt = os.path.join(cfg.MODELS_DIR, NETS[args.demo_net][0],
'faster_rcnn_alt_opt', 'faster_rcnn_test.pt')
改成
prototxt = os.path.join(cfg.MODELS_DIR, NETS[args.demo_net][0],
'faster_rcnn_end2end', 'test.prototxt')
将
im_names = ['000456.jpg', '000542.jpg', '001150.jpg',
'001763.jpg', '004545.jpg']
列表中的图片名改成自己要测试的图片名称,当然首先需要将相应的图片复制到/py-faster-rcnn/data/demo/目录下。
修改完成,在/py-faster-rcnn/目录下打开bash,执行
python ./tools/demo.py
没问题的话,就能顺利看到测试结果。