首页 > 代码库 > faster-rcnn训练自己的数据集

faster-rcnn训练自己的数据集

按照下面这个博客制作自己的数据集:

http://blog.csdn.net/sinat_30071459/article/details/50723212

按照下面这个博客修改faster-rcnn源码,训练自己的数据:

http://blog.csdn.net/sinat_30071459/article/details/51332084

训练自己的数据的时候如果提示assert (boxes[:, 2] >= boxes[:, 0]).all()这样的AssertionError,有下面几种解决方法:

1、训练前把output文件夹删除(或改个其他名),还要把py-faster-rcnn/data/cache中的文件和

py-faster-rcnn/data/VOCdevkit2007/annotations_cache中的文件删除(如果有的话)。

2、因为VOC2007 的矩形标注坐标是以1为基准的(1-based),而我们在处理图像坐标都是0起始的(0-based)。在py-faster-rcnn/lib/datasets/pascal_voc.py (line 207)文件中会对Xmin,Ymin,Xmax,Ymax进行减1操作。

# Make pixel indexes 0-based
x1 = float(bbox.find(xmin).text) - 1 y1 = float(bbox.find(ymin).text) - 1 x2 = float(bbox.find(xmax).text) - 1 y2 = float(bbox.find(ymax).text) - 1 cls = self._class_to_ind[obj.find(name).text.lower().strip()] boxes[ix, :] = [x1, y1, x2, y2] gt_classes[ix] = cls overlaps[ix, cls] = 1.0 seg_areas[ix] = (x2 - x1 + 1) * (y2 - y1 + 1)

xmin,ymin,xmax,ymax的含义:

xmin,ymin为矩形的左上角坐标(x,y),xmax=x+w-1,ymax=y+h-1

错误来自于py-faster-rcnn/lib/datasets/imdb.py文件中append_flipped_images(self)函数中:

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  

所以在生成XML文件的时候就一定要以1为基准(1-based)来生成。

3、如果已经将你的标注xml中的坐标统一为1-based坐标了,但在执行训练的时候还是会有上面的Assert错误,那么就要好好检查你的标注数据中,是不是有超出图像范围的矩形。如果有,一定要修正。

faster-rcnn训练自己的数据集