【深度学习小知识】目标检测中的IOU、GIOU、DIOU、CIOU、EIOU等理论解析


首先明确IOU系列的提出原因,即衡量预测框与真实框的关系。

IOU

IOU原理

在这里插入图片描述
图中,红色框表示为预测框,绿色表示为真实框(标注框)。IOU就是计算真实框与红色框的交并比,具体流程如下:

  • 计算真实框与预测框的交集
    在这里插入图片描述

  • 计算真实框与预测框的并集
    在这里插入图片描述

  • 计算交并比
    IOU =

IOU Loss

明白IOU原理后,进一步看一下IOU loss:IOU loss 将四个点构成的bbox,作为整体进行回归。设置(xt, xb, xl, xr)进行计算,反应真实框和预测框的关系。
Iou loss = 1 - iou
具体如下图所示:
在这里插入图片描述

IOU特点

IOU作用

  • 可以反映预测检测框与真实检测框的检测效果
  • 尺度不变性,也就是对尺度不敏感(scale invariant), 在regression任务中,判断predict box和gt的距离最直接的指标就是IoU。(满足非负性;同一性;对称性;三角不等性)

IOU问题

  • 无法进行梯度回传;loss = 1- IOU ,但IOU=0时(两框不想交)。

  • 无法判断预测框与真实框之间的距离;只要不想交,IOU均为0
    在这里插入图片描述

  • 无法衡量两个框之间的相交方式
    在这里插入图片描述

  • 无法精确判断两种的重合度大小,如下图所示,三种情况IoU都相等,但看得出来他们的重合度是不一样的,左边的图回归的效果最好,右边的最差。
    在这里插入图片描述

GIOU

GIOU原理

GIOU的具体计算流程如下

  • 计算IOU

  • 在这里插入图片描述

  • 计算同时包含预测框和真实框的最小矩形框的面积–A
    在这里插入图片描述

  • A - Union
    在这里插入图片描述

  • (A - Union)/A
    -在这里插入图片描述

  • GIOU = IOU - (A - Union)/A
    在这里插入图片描述

GIOU LOSS

  • GIOU Loss = 1 - GIOU

GIOU的特点

GIOU的作用

  • 对于相交的框,IOU可以被反向传播,即它可以直接用作优化的目标函数。但是非相交的,梯度将会为0,无法优化。此时使用GIoU可以完全避免此问题。所以可以作为目标函数
  • 可以分辨框的对齐方式
  • IoU取值[0,1],但GIoU有对称区间,取值范围[-1,1]。在两者重合的时候取最大值1,在两者无交集且无限远的时候取最小值-1,因此GIoU是一个非常好的距离度量指标
  • GIOU关注的不只是重叠区域,还有其他的非重叠区域

GIOU的问题

  • GIoU对scale不敏感
  • GIoU是IoU的下界,在两个框无限重合、在内部等情况下,IoU=GIoU=1,如下图所示:
    在这里插入图片描述

DIOU

DIOU的提出主要是针对IOU和GIOU中存在的问题:

  1. 直接最小化anchor框与目标框之间的归一化距离是否可行,以达到更快的收敛速度?
  2. 如何使回归在与目标框有重叠甚至包含时更准确、更快

DIOU实现

如下面公式所示,为DIOU的计算过程
在这里插入图片描述
具体流程如下:

  • 计算IOU
  • 计算两个框之间的中心点的欧氏距离
  • 计算最小必报区域的对角线距离

其中d和c如下图所示:
在这里插入图片描述

DIOU特点

  • 与GIoU loss类似,DIoU loss在与目标框不重叠时,仍然可以为边界框提供移动方向。
  • DIoU loss可以直接最小化两个目标框的距离,而GIOU loss优化的是两个目标框之间的面积,因此比GIoU loss收敛快得多。
  • 对于包含两个框在水平方向和垂直方向上这种情况,DIoU损失可以使回归非常快,而GIoU损失几乎退化为IoU损失

CIOU

Ciou的改进在于,回归框三要素中的长宽比进行了考虑;CIOU在DIOU的基础上,加入了长宽比进行改进。
在这里插入图片描述
(a 是权重函数,v用来度量长宽比的相似性)
在这里插入图片描述

EIOU

CIOU Loss虽然考虑了边界框回归的重叠面积、中心点距离、纵横比。
但是通过其公式中的v反映的纵横比的差异,而不是宽高分别与其置信度的真实差异,所以有时会阻碍模型有效的优化相似性。
在CIOU的基础上将纵横比拆开,提出了EIOU Loss,并且加入Focal聚焦优质的锚框
在这里插入图片描述
##EIOU 作用

  • 将纵横比的损失项拆分成预测的宽高分别与最小外接框宽高的差值,加速了收敛提高了回归精度。
  • 引入了Focal Loss优化了边界框回归任务中的样本不平衡问题,即减少与目标框重叠较少的大量锚框对BBox
    回归的优化贡献,使回归过程专注于高质量锚框
### 不同类型的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]。 ---
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值