Faster rcnn end to end 训练方法总结

一、前言

   本篇主要记录Faster rcnn 采用end to end 训练方式做训练

二、制作自己的VOC2007格式的数据集

 1、首先创建好路径 py-faster-rcnn/data/VOCdevkit2007/VOC2007

 2、在VOC2007下分别创建文件夹 Annotations 、JPEGImages、ImageSets/Main

 3、把图片按照 00000×.jpeg 的形式命名,并存放在 JPEGImages 文件夹

Faster rcnn end to end 训练方法总结_第1张图片

 4、需要对图片打标注,下载安装好 labelImg 打标注软件,安装好后,执行sudo python labelImg.py 启动,修改data/predefined_classes.txt  ,可以更改类别,之后对所有图标打标注。打完标注生成的xml文件存放在 Annotations,xml 文件的名字和图片名字保持一致

Faster rcnn end to end 训练方法总结_第2张图片

5、制作ImageSets文件夹下Main文件夹中的4个文件(test.txt、train.txt、trainval.txt、val.txt)

首先说明一下这四个文件到底是干什么用的,总的数据集分为trainval和test,在trainval又划分成train和val
test.txt:测试集 
train.txt:训练集 
val.txt:验证集 
trainval.txt:训练和验证集

在原始VOC2007数据集中,trainval大约占整个数据集的50%,test大约为整个数据集的50%;train大约是trainval的50%,val大约为trainval的50%。所以我们可参考以下代码(VOC2007 文件下 genImageSets.py)来生成这4个txt文件:

import os
import random

trainval_percent = 0.5
train_percent = 0.5
xmlfilepath = 'Annotations'
txtsavepath = 'ImageSets/Main'
total_xml = os.listdir(xmlfilepath)

num=len(total_xml)
list=range(num)
tv=int(num*trainval_percent)
tr=int(tv*train_percent)
trainval= random.sample(list,tv)
train=random.sample(trainval,tr)

ftrainval = open(txtsavepath+'/trainval.txt', 'w')
ftest = open(txtsavepath+'/test.txt', 'w')
ftrain = open(txtsavepath+'/train.txt', 'w')
fval = open(txtsavepath+'/val.txt', 'w')

for i  in list:
    name=total_xml[i][:-4]+'\n'
    if i in trainval:
        ftrainval.write(name)
        if i in train:
            ftrain.write(name)
        else:
            fval.write(name)
    else:
        ftest.write(name)

ftrainval.close()
ftrain.close()
fval.close()
ftest .close()

运行该代码,在Main 文件夹下生成 这4个txt文件

Faster rcnn end to end 训练方法总结_第3张图片

三、采用VGG16 模型做训练

1、py-faster-rcnn/lib/datasets/pascal_voc.py  文件中的第30行,  self._classes,改成自己的标签,背景和发票类

2、修改 py-faster-rcnn/models/pascal_voc/VGG16/faster_rcnn_end2end下两个文件:

     train.prototxt 和 test.prototxt。

打开文件:test.prototxt 

Faster rcnn end to end 训练方法总结_第4张图片

这里21 改自己数据集标签数+1

Faster rcnn end to end 训练方法总结_第5张图片

把这里的84(21×4)改为8(2×4)。同理把train.protptxt里的所有21换成2,所有84换成8。把下面路径的文件把所有21换成2,84改成 8:

训练前清空缓存文件夹:

 data/cache/ 

 data/VOCdevkit2007/annotations_cache/

删除 output 文件夹,该文件夹将生成训练得的权值文件

注意:prototxt中的其他内容就不用改了,train.prototxt和test.prototxt的层的名字必须一致,不然test.prototxt中某些层将无法使用训练得到的权值

四、预训练模型

为加快训练,可使用由imagenet数据集预训练得到的模型

下载地址: 

链接: https://pan.baidu.com/s/1kUOD6hNE1DkBD0X07Wmf_g 提取码: iuyp 

使用其中的 VGG16.v2.caffemodel

训练输入:

./tools/train_net.py --gpu 0 --solver models/pascal_voc/VGG16/faster_rcnn_end2end/solver.prototxt --weights data/imagenet_models/VGG16.v2.caffemodel --imdb voc_2007_trainval --iters 70000 --cfg experiments/cfgs/faster_rcnn_end2end.yml

训练结束,在文件夹 py-faster-rcnn/output/faster_rcnn_end2end/voc_2007_trainval/ 下生成训练得到的模型caffemodel文件,运行一下代码可进行测试, 测试文件微test.txt

./tools/test_net.py --gpu 0 --def models/pascal_voc/VGG16/faster_rcnn_end2end/test.prototxt --net /home/u2/py-faster-rcnn/output/faster_rcnn_end2end/voc_2007_trainval/vgg16_faster_rcnn_iter_70000.caffemodel --imdb voc_2007_test --cfg experiments/cfgs/faster_rcnn_end2end.yml

四、demo:

1.把 output文件夹下生成的 model 拷贝到py-faster-rcnn/data/faster_rcnn_models 下

2.修改 demo.py 里的第28行的CLASS,下面的NETS。分别改为自己的标签和 步骤1. 中拷贝的训练好模型的名字。

3. 终端输入:

./tools/demo.py

 

你可能感兴趣的:(caffe)