zoukankan      html  css  js  c++  java
  • 训练自己的数据遇到的问题

     先按VOC数据集做好了自己的数据集。

    1. 训练faster rcnn时出现如下报错:

    File "/py-faster-rcnn/tools/../lib/datasets/imdb.py", line 108, in append_flipped_images
        assert (boxes[:, 2] >= boxes[:, 0]).all()
    AssertionError
    编了代码查找标签坐标,发现确实存在坐标为0的情况,说明标签生成是0-base(以0为基准)。

    标准的VOC2007 的矩形标注坐标是以1为基准的(1-based),而在处理图像坐标都是0起始的(0-based)。 
    所以在faster rcnn源码中才要对从xml文件中读取的xmin,ymin,xmax,ymax 统统减1将坐标变为我们做数据处理时所需要的0-based坐标。
    如果Xmin为0,减一后变为65535。

    (不推荐修改源码)我把xml文件中的xmin,ymin,xmax,ymax全部+1处理。
    # py-faster-rcnn/lib/datasets/pascal_voc.py (line 207)
                # 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的含义

    对于一个矩形(x,y,w,h)定义,xmin,ymin,xmax,ymax的准确含义是什么呢?, 
    xmin,ymin一看就明白,我们理解它为矩形的左上角坐标(x,y),那么xmax,ymax是什么呢? 
    根据上面的Python代码最后一行,就可以推断应该是:

    xmax=x+w-1,ymax=y+h-1

    所以应当如下生成:
    createNode("xmin", rect.x + 1),
    createNode("ymin", rect.y + 1),
    createNode("xmax", rect.x + rect.width),
    createNode("ymax", rect.y + rect.height)
    这里width,height恰恰不能加+1,因为xmax,ymax是指矩形右下角1-base坐标(不是在矩形外)
    如果加了1,就是矩形外了。

    矩形越界

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

    是的,我修改样本是1-base之后还是不行,依然报如上错误。

    我对xml文件中xmin,ymin,xmax,ymax的理解有问题,我以为它是左下角和右上角的坐标,但是我错了,它应该是左上角和右下角的坐标,其图片坐标系原点在左上角,x轴向右延伸,y轴向下延伸。当标注矩形的边与图像的边缘重合的时候,也会产生标题中的Assert断言错误。因此, 很有可能是坐标错误导致矩形越界的错误。

    训练缓存清空

    如果你确定没有越界的矩形却还是会报这个Assert错误,那么有可能是缓冲区中的数据乱了。 
    把py-faster-rcnn/data/cache中的文件和 
    py-faster-rcnn/data/VOCdevkit2007/annotations_cache中的文件统统删除(如果有的话),再来试试吧。我就因为这个问题被折腾了一天。

     参考:http://blog.csdn.net/10km/article/details/64641322
  • 相关阅读:
    自助Linux之问题诊断工具strace
    Linux系统与程序监控工具atop教程
    Google C++单元测试框架(Gtest)系列教程之三——测试固件(Test fixture)
    SQLServer2005:在执行批处理时出现错误。错误消息为: 目录名无效
    无法为可更新的订阅设置发布服务器登录名
    忘记SQL SERVER帐户sa的密码
    SQL Server 2008 R2 跟踪标志
    sys.dm_os_volume_stats监控物理磁盘
    SQL SERVER 中常见的高可用方案
    Vim操作的四种模式
  • 原文地址:https://www.cnblogs.com/JZ-Ser/p/7111365.html
Copyright © 2011-2022 走看看