目标检测-IOU

IOU为交并比,指的是两个bbox的交集面积比上他们的并集面积,用来评估两个bbox的重合度。。
在这里插入图片描述

应用

(1)在目标检测中,同一个目标可能被预测多个矩形框,这时候只想保留得分最高的那一个,需要剔除与高score bbox有较高重合度的低score bbox(NMS),而这里的重合度评估标准就是计算他们的IOU;
(2)训练faster R_CNN中,对于预测的bounding box,需要通过计算预测框和目标框的IOU来判断这个框是正样本还是负样本,进而训练模型;
(2)对预测框性能评估时,评估指标为mAP(可以简单理解为精确度),我们要对预测正确的框计算mAP,那么怎么才算预测正确呢?这里就用到了IOU,当预框与真实框的IOU>0.5,并且类别一致,说明预测正确,这里就用到了IOU;

代码实现

其实这个实现代码在吴恩达老师的深度学习课程中的编程作业里有实现:
两个矩形框的面积很好求,难点在于求交集的矩形面积,貌似要考虑多种交集的情况,但实际上,所有的情况都是一种情况。。

# box1 -- first box, list object with coordinates (x1, y1, x2, y2), (upper left and lower right)  
# box2 -- second box, list object with coordinates (x1, y1, x2, y2)
xi1 = max(box1[0], box2[0])  ## 左上x
yi1 = max(box1[1], box2[1])  ## 左上y
xi2 = min(box1[2], box2[2])  ## 右下x
yi2 = min(box1[3], box2[3])  #3 右下y
intersection = (yi2 - yi1)*(xi2 - xi1)  #计算交集(右下-左上)

A = (box1[3] - box1[1])*(box1[2] - box1[0])
B = (box2[3] - box2[1])*(box2[2] - box2[0])
union = A + B -intersection  # 计算并集
iou = intersection / union   

GIOU

看了篇论文,GIOU,是一种对IOU改进的方法。
目标检测任务中经常要用到两个框的相似度的度量,之前一直用的都是IOU,边框回归采用的损失函数是平方损失。
这种度量方式存在优点:对尺度不敏感(scale invariant)
但他也存在缺点:
在这里插入图片描述
(1)损失函数
损失函数的目的是修正预测框,让预测框更逼近目标框,那很自然,对于偏离目标框大的,我们希望他的损失函数的一点,从而对他的修正也能大一点,但是从上边的例子可以看到,偏离程度不同的预测框,却得到了相同的损失函数,也就是一样大的修正,这显然不是我们想要的。
那我们观察IOU的值,会想到,为什么不直接用IOU作为损失函数呢?
在这里插入图片描述
当IOU大的时候,loss小,IOU小的时候,loss大,从上图的对比中,好像比平方损失更有效。。
但直接用IoU作为损失函数又会出现两个问题:

  • 如果两个框没有相交,根据定义,IoU=0,不能反映两者的距离大小(重合度)。同时因为loss=0,没有梯度回传,无法进行学习训练。
  • IoU无法精确的反映两者的重合度大小。如下图所示,三种情况IoU都相等,但看得出来他们的重合度是不一样的,左边的图回归的效果最好,右边的最差。
    在这里插入图片描述
    针对IoU做损失函数存在上述两个缺点,本文提出一个新的指标generalized IoU(GIoU):
    在这里插入图片描述GIoU的定义很简单,就是先计算两个框的最小闭包区域面积,再计算IoU,再计算闭包区域中不属于两个框的区域占闭包区域的比重,最后用IoU减去这个比重得到GIoU。GIoU有如下4个特点:
  • 与IoU相似,GIoU也是一种距离度量,作为损失函数的话, ,满足损失函数的基本要求
    GIoU对scale不敏感
  • GIoU是IoU的下界,在两个框无线重合的情况下,IoU=GIoU
  • IoU取值[0,1],但GIoU有对称区间,取值范围[-1,1]。在两者重合的时候取最大值1,在两者无交集且无限远的时候取最小值-1,因此GIoU是一个非常好的距离度量指标。
  • 与IoU只关注重叠区域不同,GIoU不仅关注重叠区域,还关注其他的非重合区域,能更好的反映两者的重合度。

其实GIoU不仅定义简单,在2D目标检测中计算方式也很简单,计算重合区域和IoU一样,计算最小闭包区域只需要得到两者max和min坐标,坐标围成的矩形就是最小闭包区域。

GIoU和IoU作为loss的算法如下所示:

步骤:
分别计算gt和predict box的面积
计算intersection的面积
计算最小闭包区域面积
计算IoU和GIoU
根据公式得到loss
在这里插入图片描述

试验情况

YOLOv3在COCO上有明显效果,但在其他模型下涨点并不明显,作者也指出了faster rcnn和mask rcnn效果不明显的原因是anchor很密,GIoU发挥作用的情况并不多。

总结

文章的motivation比较好,指出用L1、L2作为regression损失函数的缺点,以及用直接指标IoU作为损失函数的缺陷性,提出新的metric来代替L1、L2损失函数,从而提升regression效果,想法简单粗暴,但work的场景有很大局限性。

论文链接 : arxiv.org/abs/1902.0963
参考博文:https://zhuanlan.zhihu.com/p/57863810

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值