IoU、GIoU、DIoU、CIoU详解及python代码实现

一、IoU、GIoU、DIoU、CIoU详解:

(1)IoU

IoU 的全称为交并比(Intersection over Union),其计算是 “预测的边框” 和 “真实的边框” 的交集和并集的比值。计算过程可以由下图表示:
在这里插入图片描述
由图可知IoU的值域为[0, 1]。
IoU的优点:
1、IOU可以作为损失函数,IoU loss=1-IOU。但是当两个物体不相交时无回传梯度。
2、 IOU对尺度变化具有不变性,即不受两个物体尺度大小的影响。
IoU的缺点:
1、当预测框和真实框不相交时,IoU(A,B)=0时,不能反映A,B距离的远近,此时损失函数不可导,IoU Loss 无法优化两个框不相交的情况。
2、假设预测框和真实框的大小都确定,只要两个框的相交值是确定的,其IoU值是相同时,IoU值不能反映两个框是如何相交的。

(2)GIoU

GIoU是为克服IoU的缺点同时充分利用优点而提出的,GIoU计算如下:
在这里插入图片描述
上图C是包含A与B的最小框。
GIoU的值域为(-1, 1]。
GIoU的优点:
1、GIoU和IoU一样,可以作为损失函数,GIoU Loss = 1 - GIoU。
2、GIoU能够更好地反应相交情况。如下图,虽然两种情况下IOU一致,但是(a)中相交的更为整齐,因此GIOU要比(b)中大。
在这里插入图片描述
GIoU缺点
当目标框完全包裹预测框的时候,IoU和GIoU的值都一样,此时GIoU退化为IoU, 无法区分其相对位置关系。
在这里插入图片描述

(3)DIoU

基于GIoU的缺点,DIoU被提出。其论文为:Distance-IoU Loss: Faster and Better Learning for Bounding Box Regression
论文给出DIoU Loss为:
在这里插入图片描述
在这里插入图片描述
上图中绿色框为目标框,黑色框为预测框,灰色框为两者的最小外界矩形框,d表示目标框和真实框的中心点距离,c表示最小外界矩形框的距离。

DIoU的性质:
1、尺度不变性。
2、DIoU Loss可以直接优化2个框直接的距离,比GIoU Loss收敛速度更快。
3、对于目标框包裹预测框的这种情况,DIoU Loss可以收敛的很快,而GIoU Loss此时退化为IoU Loss收敛速度较慢

(4)CIoU

一个好的目标框回归损失应该考虑三个重要的几何因素:重叠面积、中心点距离、长宽比。
GIoU:为了归一化坐标尺度,利用IoU,并初步解决IoU为零的情况。
DIoU:DIoU损失同时考虑了边界框的重叠面积和中心点距离。
然而,anchor框和目标框之间的长宽比的一致性也是极其重要的。基于此,论文作者提出了Complete IoU Loss。
CIoU Loss又引入一个box长宽比的惩罚项,该Loss考虑了box的长宽比,定义如下:
在这里插入图片描述
上述损失函数中,CIoU比DIoU多出了α和v这两个参数。其中α是用于平衡比例的参数。v用来衡量anchor框和目标框之间的比例一致性。
从α参数的定义可以看出,损失函数会更加倾向于往重叠区域增多方向优化,尤其是IoU为零的时候。

二、Python代码实现:

这里是实现IoU、GIoU、DIoU、CIoU并非实现其Loss。代码如下:
定义框BBox类:

import math
def euclidean_distance(p1, p2):
    '''
    计算两个点的欧式距离
    '''
    x1, y1 = p1
    x2, y2 = p2
    return math.sqrt((x2-x1)**2 + 
  • 6
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

牛虎兔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值