faster rcnn训练(二)基于ZF(python版本)训练新增类别

基于ubuntu16.04 +  caffe+  python +  ZF

新类别的制作基于VOC2007  VOC2012

一、VOC2007数据集的下载和解压(转发于https://blog.csdn.net/errors_in_life/article/details/70916583)

 
wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtrainval_06-Nov-2007.tar
wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtest_06-Nov-2007.tar
wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCdevkit_08-Jun-2007.tar
 
tar xvf VOCtrainval_06-Nov-2007.tar
tar xvf VOCtest_06-Nov-2007.tar
tar xvf VOCdevkit_08-Jun-2007.tar

将数据集放于data下  存放方式为 VOCdevkit2007/VOC2007

二、使用标注工具labelImg

1.下载标注工具

git clone https://github.com/tzutalin/labelImg

2.安装(在根目录下进行)

$ sudo apt-get install pyqt4-dev-tools 
$ sudo pip install lxml 
$ sudo apt-get install python-lxml

进入labelImg  

make

3.使用labelImg进行标注

open dir 是打开所要标注图像的文件夹

ctrl +R 更改默认注释目标目录(xml文件保存地址)

修改文件可以改变快捷键的使用方式

a 上一张图片

d  下一张图片

w 创建一个矩形框

s 保存

使用快捷键可以避免在切换下一张的过程中,将xml文件转换为txt文件。

画出框后,可以直接输入标签的名称,也可以通过修改predefined_classes.txt文件中修改。

建议训练的标签使用小写字母,空格亲测没有问题。

三、训练前对所要训练的网络中的文件进行修改

1.对 py-faster-rcnn/models/pascal_voc/ZF/faster_rcnn_alt_opt 中的文件、

py-faster-rcnn/models/pascal_voc/ZF/faster_rcnn_end2end 中的train.prototxt和test.prototxt文件进行修改

n为   所要训练的类别+1(背景)

① 开头data层的num_classes:n

② roi_data层的num_classes:n

③ cls_score层的num_output:n

④ bbox_preda层的num_output:4n

2.py-faster-rcnn/lib/datasets/pascal_voc.py修改训练集文件夹以及标签

self._data_path = os.path.join( self ._devkit_path, 'VOC'+self._year)

self._classes=( ' _background_ ' 

                            'bird' , 'tvmonitor' ...)

如果不是基于VOC2007做的数据集,只要替换VOC2007内的Annotations,ImageSets,JPEGImages即可

3.py-faster-rcnn/lib/datasets/imdb.py修改 append_flipped_images(self)函数

boxes[:, 0] = widths[i] - oldx2 - 1
boxes[:, 2] = widths[i] - oldx1 - 1
for i in xrange(len(boxes)):
    if boxes[i][2]<boxes[i][0]
       boxes[i][0]=0

4.需要删除的文件

①py-faster-rcnn根目录中的output文件夹

②py-faster-rcnn/data/cache中的文件

③py-faster-rcnn/data/VOCdevkit2007/annotations_cache中的文件

5.学习率、迭代次数等的修改

学习率 py-faster-rcnn/mdoels/pascal_voc/ZF/faster_rcnn_alt_opt中的solve文件

迭代次数 py-faster-rcnn/mdoels/pascal_voc/ZF/faster_rcnn_alt_opt中的solve文件

              py-faster-rcnn/tools/train_faster_rcnn_alt_opt.py

四 、训练并测试模型

1.进入py-faster-rcnn中

训练模型的格式为

./experiments/scripts/fater_rcnn_alt_opt.sh [GPU_ID][NET][dataset]
./experiments/scripts/fater_rcnn_alt_opt.sh 0 ZF pascal_voc
./experiments/scripts/fater_rcnn_end2end.sh 0 ZF pascal_voc

训练好的模型将在py-faster-rcnn/output/faster_rcnn_end2end/voc_2007_trainval下

如果ImageSet/Main下有test正负样本文件,将自动进行模型的测试,并输出map

2.测试模型

①在ImageSet/Main下创建test.txt文件,最好是训练集和验证集中没有的图片,并生成各个类别test的正负样本文件

②在data目录下创建~data/VOCdevkit2007/results/VOC2007/Main/

③执行命令行

time ./tools/test_net.py --gpu 0 --def models/pascal_voc/ZF/faster_rcnn_end2end/test.prototxt --net output/faster_rcnn_end2end/voc_2007_trainval/zf_faster_rcnn_iter_70000.caffemodel --imdb voc_2007_test --cfg experiments/cfgs/faster_rcnn_end2end.yml

五、demo测试

1.将需要测试的图片放入data/demo中

2.将训练好的~output/faster_rcnn_end2end/voc_2007_trainval/zf_faster_rcnn_iter_7000.caffemodel

放入~data/faster_rcnn_models中

3.修改~tools/demo.py

①修改标签


CLASSES=( ' _background_ ' 

          'bird' , 'tvmonitor' ...)

②修改网络模型

NETS = {'vgg16': ('VGG16',
                  'VGG16_faster_rcnn_final.caffemodel'),
        'zf': ('ZF',
                  'ZF_faster_rcnn_final.caffemodel')}

③修改测试图片名称,根据data/demo中的图片名称进行修改

im_names = ['1559.jpg','1564.jpg']

④运行demo.py

./tools/demo.py --gpu 0 --net zf

猜你喜欢

转载自blog.csdn.net/weixin_39732260/article/details/80930554
今日推荐