使用Faster RCNN训练自己的数据

数据准备

先将自己的数据转成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

扫描二维码关注公众号,回复: 4626193 查看本文章

打开/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

没问题的话,就能顺利看到测试结果。

猜你喜欢

转载自blog.csdn.net/Blackrosetian/article/details/85165575