修改COCO的大、中、小指标获得自己想要的尺度的mAP

       做小目标的目标检测的伙伴应该都熟悉,COCO官方把32*32以下的目标定义为小目标,而当我们自己想从中剥离出更小的目标该怎么做呢?(如TOD数据集中指出目标平均像素体积为12.8这样)

      当32*32像素的目标不适合我们所需要更改这个尺寸的时候我们需要修改哪些内容呢?往下看,直接找到cocoval.py的源码,直接ctrl+f搜索small,找到对应有三个位置,第三个small在setDetParams函数中,源码如下:

    def setDetParams(self):
        self.imgIds = []
        self.catIds = []
        # np.arange causes trouble.  the data point on arange is slightly larger than the true value
        self.iouThrs = np.linspace(.5, 0.95, int(np.round((0.95 - .5) / .05)) + 1, endpoint=True)
        self.recThrs = np.linspace(.0, 1.00, int(np.round((1.00 - .0) / .01)) + 1, endpoint=True)
        self.maxDets = [1, 10, 100]
        self.areaRng = [[0 ** 2, 1e5 ** 2], [0 ** 2, 32 ** 2], [32 ** 2, 96 ** 2], [96 ** 2, 1e5 ** 2]]
        self.areaRngLbl = ['all', 'small', 'medium', 'large']
        self.useCats = 1

       以0-13个像素划分为tiny指标为例对代码进行修改,主要就修改areaRng和areaRngLbl两行:

    def setDetParams(self):
        self.imgIds = []
        self.catIds = []
        # np.arange causes trouble.  the data point on arange is slightly larger than the true value
        self.iouThrs = np.linspace(.5, 0.95, int(np.round((0.95 - .5) / .05)) + 1, endpoint=True)
        self.recThrs = np.linspace(.0, 1.00, int(np.round((1.00 - .0) / .01)) + 1, endpoint=True)
        self.maxDets = [1, 10, 100]
        #修改下面这两行
        self.areaRng = [[0 ** 2, 1e5 ** 2], [0 ** 2,13],[13, 32 ** 2], [32 ** 2, 96 ** 2], [96 ** 2, 1e5 ** 2]]
        self.areaRngLbl = ['all', 'tiny','small', 'medium', 'large']
        self.useCats = 1

        从上面的代码修改可以看出,我们加了一个0-13的区域对应着“tiny”这个指标,这样用coco指标进行计算的时候就会自动算出APtiny指标了(同理可以这样获得所有自己想要的指标)。接下来讲讲另外两个要改动的位置。

       前两个“small”在_summarizaDets函数中,该函数的作用是获取各级的AP以及AR指标以便后期打印信息,这里的每一行就是对应最终打印的指标信息。

        def _summarizeDets():
            stats = np.zeros((12,))
            stats[0] = _summarize(1)
            stats[1] = _summarize(1, iouThr=.5, maxDets=self.params.maxDets[2])
            stats[2] = _summarize(1, iouThr=.75, maxDets=self.params.maxDets[2])
            stats[3] = _summarize(1, areaRng='small', maxDets=self.params.maxDets[2])
            stats[4] = _summarize(1, areaRng='medium', maxDets=self.params.maxDets[2])
            stats[5] = _summarize(1, areaRng='large', maxDets=self.params.maxDets[2])
            stats[6] = _summarize(0, maxDets=self.params.maxDets[0])
            stats[7] = _summarize(0, maxDets=self.params.maxDets[1])
            stats[8] = _summarize(0, maxDets=self.params.maxDets[2])
            stats[9] = _summarize(0, areaRng='small', maxDets=self.params.maxDets[2])
            stats[10] = _summarize(0, areaRng='medium', maxDets=self.params.maxDets[2])
            stats[11] = _summarize(0, areaRng='large', maxDets=self.params.maxDets[2])
            return stats

这里就直接和你们说一下要怎么修改吧,把tiny增加在small上面的位置(需要加两条,一条是AP一条是AR),另外一定要注意stats=np.zeros((12,))也要记得修改,加了两条就修改12-》14.
       修改完上述两个内容之后直接运行yolov5的val.py测试一下,结果如下:

可以看出成功的获得了APtiny的指标了。

  • 7
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值