用py_faster_rcnn训练自己的数据集

参考链接:https://blog.csdn.net/sinat_30071459/article/details/51332084

 1、在py-faster-rcnn\data下,用你的数据集替换VOC2007数据集。(py-faster-rcnn\data\VOCdevkit2007\VOC2007中对应替换Annotations,ImageSets和JPEGImages)

2、下载ImageNet数据集下预训练得到的模型参数(用来初始化),解压,然后将该文件放在py-faster-rcnn\data下(百度云地址在参考链接1中)

3、训练前的修改:

(1)修改调用文件:需要修改的文件有:models/pascal_voc/ZF/faster_rcnn_alt_opt文件夹下的5个文件,分别为stage1_rpn_train.ptstage1_fast_rcnn_train.ptstage2_rpn_train.ptstage2_fast_rcnn_train.ptfast_rcnn_test.pt,修改格式如下:(1)stage1_fast_rcnn_train.pt和stage2_fast_rcnn_train.pt修改参数num_class:2(识别1类+背景1类),cls_score中num_output:2,bbox_pred中num_output:8((识别类1+背景类1)×2)。(只有这3个)(2)stage1_rpn_train.pt和stage2_rpn_train.pt修改参数num_class:2(识别1类+背景1类)(3)fast_rcnn_test.pt修改参数:cls_score中num_output:2,bbox_pred中num_output:8(只有这2个)

(2)修改lib/datasets/pascal_voc.py

        self._classes = ('__background__', # always index 0
                         'aeroplane')

(3)修改lib/datasets/imdb.py(具体修改方式参考了参考链接1)

def append_flipped_images(self):  
        num_images = self.num_images  
        widths = [PIL.Image.open(self.image_path_at(i)).size[0]  
                  for i in xrange(num_images)]  
        for i in xrange(num_images):  
            boxes = self.roidb[i]['boxes'].copy()  
            oldx1 = boxes[:, 0].copy()  
            oldx2 = boxes[:, 2].copy()  
            boxes[:, 0] = widths[i] - oldx2 - 1  
            print boxes[:, 0]  
            boxes[:, 2] = widths[i] - oldx1 - 1  
            print boxes[:, 0]  
            assert (boxes[:, 2] >= boxes[:, 0]).all()  
            entry = {'boxes' : boxes,  
                     'gt_overlaps' : self.roidb[i]['gt_overlaps'],  
                     'gt_classes' : self.roidb[i]['gt_classes'],  
                     'flipped' : True}  
            self.roidb.append(entry)  
        self._image_index = self._image_index * 2 

(4)修改迭代次数:迭代次数可在py-faster-rcnn\tools的train_faster_rcnn_alt_opt.py中修改

max_iters = [80000, 40000, 80000, 40000]

        分别为4个阶段(rpn第1阶段,fast rcnn第1阶段,rpn第2阶段,fast rcnn第2阶段)的迭代次数。可改成你希望的迭代次数。

如果改了这些数值,最好把py-faster-rcnn/models/pascal_voc/ZF/faster_rcnn_alt_opt里对应的solver文件(有4个)也修改,stepsize小于上面修改的数值。

(5)修改学习率:y-faster-rcnn/models/pascal_voc/ZF/faster_rcnn_alt_opt中的solve文件(py-faster-rcnn/models/pascal_voc/VGG16/faster_rcnn_end2end)设置

4、修改完pascal_voc.py和imdb.py后进入lib/datasets目录下删除原来的pascal_voc.pyc和imdb.pyc文件,重新生成这两个文件,因为这两个文件是python编译后的文件,系统会直接调用。

 

python(此处应出现python的版本)

>>>importpy_compile
>>>py_compile.compile(r'imdb.py')
>>>py_compile.compile(r'pascal_voc.py')

5、训练自己的数据

终端进入py-faster-rcnn下输入:

./experiments/scripts/faster_rcnn_alt_opt.sh0 ZF pascal_voc

 

 

 

 

你可能感兴趣的:(目标检测)