目标检测中的IoU、GIoU、DIoU与CIoU

什么是IOU?

简单来说IOU就是用来度量目标检测中预测框与真实框的重叠程度。在图像分类中,有一个明确的指标准确率来衡量模型分类模型的好坏。其公式为:

a c c = P t r u e N N = 全 部 样 本 的 数 量 , P t r u e = 预 测 正 确 的 样 本 数 量 acc = \frac{P_{true}}{N} {\quad}{\quad}{\quad}{\quad}{\quad}{\quad}{\quad}N=全部样本的数量,P_{true}=预测正确的样本数量 acc=NPtrueN=Ptrue=

这个公式显然不适合在在目标检测中使用。我们知道目标检测中都是用一个矩形框住被检测物体,又因为检测物体尺度不同,预测框与真实框或大或小。所以度量标准必然是具有尺度不变性的,那么大神们就引入了一个概念IOU(交并比),用预测框(A)和真实框(B)的交集除上二者的并集,其公式为:
I O U = A ∩ B A ∪ B IOU = \frac{A\cap B}{A\cup B} IOU=ABAB
在这里插入图片描述

显而易见,IOU的值越高也说明A框与B框重合程度越高,代表模型预测越准确。反之,IOU越低模型性能越差。

IOU应用场景

除了作为目标检测的评价指标,IOU还有其他应用场景:

  1. 在anchor-based方法的目标检测中,根据IOU的值来区分正样本和负样本。
  2. 可以直接作为边界框回归的loss函数进行优化。
  3. 在NMS(非极大值抑制)对预测框筛选。

IOU的优缺点

普通IOU的优缺点很明显,优点:

  • IOU具有尺度不变性
  • 满足非负性

同时,由于IOU并没有考虑框之间的距离,所以它的作为loss函数的时候也有相应的缺点:

  • 在A框与B框不重合的时候IOU为0,不能正确反映两者的距离大小。
  • IoU无法精确的反映两者的重合度大小。如下图所示,三种情况IOU都相等,但看得出来他们的重合度是不一样的,左边的图回归的效果最好,右边的最差。

iou

对IOU进行改进

普通IOU是对两个框的距离不敏感的,下面两张图中,左图预测框的坐标要比右图预测框的坐标更接近真实框。但两者的IOU皆为0,如果直接把IOU当作loss函数进行优化,则loss=0,没有梯度回传,所以无法进行训练。

GIOU

algorithm

  1. 对于任意的两个A、B框,首先找到一个能够包住它们的最小方框,例如在上述场景 A 和 B 中,C 的形状分别为:
  1. 计算IOU

  2. 根据A、B,我们可以算出C的面积,有了C的面积就可以计算出GIOU了:
    G I O U = I O U − C − ( A ∪ B ) C GIOU = IOU - \frac{C - (A\cup B)}{C} GIOU=IOUCC(AB)
    G I O U = − 1 + ( A ∪ B ) C ( I O U = 0 ) GIOU = -1 + \frac{(A\cup B)}{C} \quad\quad\quad(IOU=0) GIOU=1+C(AB)(IOU=0)

而当IOU为0时,意味着A与B非常远时, A ∪ B C \frac{A\cup B}{C} CAB无限接近于0,GIOU趋近于-1,同理当IOU为1时,两框重合, A ∪ B C \frac{A\cup B}{C} CAB为1。所以GIOU的取值为(-1, 1]。

GIOU作为loss函数时,为 L = 1 − G I O U L=1-GIOU L=1GIOU ,当A、B两框不相交时 A ∪ B A\cup B AB值不变,最大化 G I O U GIOU GIOU就是就小化 C C C,这样就会促使两个框不断靠近。

DIoU

尽管GIoU解决了在IoU作为损失函数时梯度无法计算的问题,且加入了最小外包框作为惩罚项。但是它任然存在一些问题。下图第一行的三张图片是GIoU迭代时预测框收敛情况。其中黑色框代表anchor,蓝色框代表预测框,绿色框代表真实框。

giou_flaw

上图中可以看出,GIoU在开始的时候需要将检测结果方法使其与目标框相交,之后才开始缩小检测结果与GT重合,这就带来了需要较多的迭代次数才能收敛问题,特别是对于水平与垂直框的情况下。此外,其在一个框包含另一个框的情况下,GIoU降退化成IoU,无法评价好坏,见下图所示:

giou_flaw2

综合以上的问题,又有大神提出了DIoU:
D I o U = ρ 2 ( A , B ) c 2 DIoU =\frac{\rho^2(A, B)}{c^2} DIoU=c2ρ2(A,B)
其中 d = ρ ( A , B ) d = \rho(A, B) d=ρ(A,B)是A框与B框中心点坐标的欧式距离,而 c c c则是包住它们的最小方框的对角线距离。

diou

完整的DIoU Loss定义如下:
L D I o U = 1 − I o U + ρ 2 ( A , B ) c 2 L_{DIoU} = 1 - IoU + \frac{\rho^2(A, B)}{c^2} LDIoU=1IoU+c2ρ2(A,B)
从公式和示意图中,我们可以看到,DIoU有几个优点:

  1. DIoU的惩罚项是基于中心点的距离和对角线距离的比值,避免了像GIoU在两框距离较远时,产生较大的外包框,Loss值较大难以优化(因为它的惩罚项是 A ∪ B A \cup B AB比上最小外包框的面积)。所以DIoU Loss收敛速度会比GIoU Loss快。
  2. 即使在一个框包含另一个框的情况下,c值不变,但d值也可以进行有效度量。

CIoU

同时DIoU的作者考虑到,在两个框中心点重合时,c与d的值都不变。所以此时需要引入框的宽高比:
C I o U = ρ 2 ( A , B ) c 2 + α v CIoU = \frac{\rho^2(A, B)}{c^2} + \alpha v CIoU=c2ρ2(A,B)+αv
其中 α \alpha α是权重函数, v v v用来度量宽高比的一致性:
α = v ( 1 − I o U ) + v \alpha = \frac{v}{(1 - IoU) + v} α=(1IoU)+vv

v = 4 π 2 ( a r c t a n w g t h g t − a r c t a n w h ) 2 v = \frac{4}{\pi^2}(arctan \frac{w^{gt}}{h^{gt}} - arctan\frac{w}{h})^2 v=π24(arctanhgtwgtarctanhw)2

最终CIoU Loss定义为:
C I o U = 1 − I o U + ρ 2 ( A , B ) c 2 + α v CIoU = 1 - IoU + \frac{\rho^2(A, B)}{c^2} + \alpha v CIoU=1IoU+c2ρ2(A,B)+αv

### 不同类型的IoU指标定义区别 #### 1. **交并比 (Intersection over Union, IoU)** IoU 是一种用于衡量两个边界框重叠程度的标准方法。其计算方式为预测框和真实框的交集面积除以它们的并集面积[^1]。 公式如下: \[ IoU = \frac{A_{pred} \cap A_{gt}}{A_{pred} \cup A_{gt}} \] 其中 \(A_{pred}\) 表示预测框区域,\(A_{gt}\) 表示真实框区域。 --- #### 2. **广义交并比 (Generalized Intersection over Union, GIoU)** GIoU 扩展了传统 IoU 的概念,在处理不相交的情况时表现更好。它通过引入最小闭包的概念来改进 IoU 计算。 公式如下: \[ GIoU = IoU - \frac{C - (A_{pred} \cup A_{gt})}{C} \] 这里 \(C\) 是能够覆盖 \(A_{pred}\) 和 \(A_{gt}\) 的最小矩形区域。 --- #### 3. **距离交并比 (Distance-IoU Loss, DIoU)** DIoU 进一步优化了目标检测中的定位精度问题,除了考虑重叠部分外,还加入了中心点之间的欧几里得距离以及包围盒的比例关系。 公式如下: \[ DIoU = IoU - \frac{\rho^2(B,B^{GT})}{c^2} \] 其中 \(\rho^2(B,B^{GT})\) 是预测框和真实框中心点的距离平方,而 \(c\) 则是最小封闭矩形对角线长度。 --- #### 4. **完全交并比 (Complete-IoU Loss, CIoU)** CIoU 继承了 DIoU 的优点,并额外加入了一个比例因子项,用来调整宽高比的影响,从而进一步提升回归性能。 公式如下: \[ CIoU = IoU - \left( \frac{\rho^2(B,B^{GT})}{c^2} + v \cdot \alpha(v)\right) \] 这里的 \(v=\frac{(ar)^2-(ar^{*})^2}{(ar)^2+(ar^{*})^2}\),表示宽高比差异;\(\alpha(v)=\frac{v}{(1-\text{IoU}+\epsilon)}\) 控制权重平衡。 --- #### 5. **扩展交并比 (Enhanced-IoU Loss, EIoU)** EIou 主要针对旋转框设计,不仅关注位置偏差,也注重角度误差带来的影响。 具体实现细节可参考相关论文或开源项目代码。 --- #### 6. **形状交并比 (Shape-IoU, SIoU)** SIoU 更加专注于边界框的方向性和几何特性匹配度评估,适用于复杂场景下的对象检测任务。 --- #### 7. **加权交并比 (Weighted-IoU, WIoU)** WIoU 考虑到不同类别间的重要性可能有所不同,因此引入权重机制使得某些类别的误检代价更高。 --- #### 8. **多视角方向交并比 (Multi-Perspective Directional IoU, MPDIoU)** MPDIoU 结合多个视角的信息综合判断目标的位置及姿态信息,适合于三维空间内的物体检测应用场合。 --- #### 9. **形态学交并比 (Morphological Perceptual Distance IoU, ShapeIoU)** 此版本强调的是两幅图像之间像素级相似性的测度而非单纯基于边界的比较。 --- ```python import torch def iou_loss(pred_boxes, gt_boxes): """Basic IoU loss implementation.""" # Compute areas of pred and ground truth boxes. area_pred = ... area_gt = ... # Calculate intersection areas between preds & gts. inter_area = ... union_area = area_pred + area_gt - inter_area return 1 - (inter_area / union_area) # Example usage with PyTorch tensors. if __name__ == "__main__": pred = torch.tensor([[...]]) # Predictions as tensor. target = torch.tensor([[...]]) # Ground truths as tensor. loss_value = iou_loss(pred, target) print(f"IoU Loss Value: {loss_value.item()}") ``` 上述代码片段展示了如何利用 PyTorch 实现基本形式的 IoU 损失函数[^2]。 ---
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值