YOLO 中的 IoU 演变类型详解

一、前言

在目标检测任务中,边界框回归 是模型训练的核心环节之一。而 IoU(Intersection over Union)及其改进版本是衡量预测框与真实框重合度的关键指标。

YOLO 系列从 YOLOv1 到 YOLOv8,逐步引入了更先进的 IoU 类型用于损失函数与 NMS 后处理:

YOLO 版本支持的 IoU 类型
YOLOv1~v3❌ 不支持改进 IoU(仅使用传统 IoU)
YOLOv4✅ 支持 CIoU Loss 和 DIoU-NMS
YOLOv5✅ 支持 CIoU Loss + DIoU-NMS
YOLOv6✅ 支持 CIoU Loss + 可选 DFL
YOLOv7✅ 支持 CIoU Loss
YOLOv8✅ 默认使用 CIoU Loss + TaskAlignedAssigner

本文将按照时间线逐一解析这些 IoU 类型的公式定义、改进意义及在 YOLO 中的应用方式。


二、传统 IoU(2016 - YOLOv1 使用)

📌 公式定义:

IoU=Area of OverlapArea of Union \text{IoU} = \frac{\text{Area of Overlap}}{\text{Area of Union}} IoU=Area of UnionArea of Overlap​

即:两个框的交集面积除以并集面积。

⚙️ 使用方式(YOLOv1~v3):

  • 用于 anchor 匹配;
  • 用于 NMS 后处理;
  • 用于损失函数(YOLOv3 及之前为 MSE Loss,YOLOv4+ 转为 CIoU Loss);

📉 局限性:

问题描述
❌ 无梯度信号无重叠区域时,IoU=0,无法提供优化方向
❌ 无中心点引导不考虑边界框中心点距离,容易出现偏移误差
❌ 无宽高比惩罚对形状差异大的框匹配效果差

三、GIoU(Generalized IoU)(YOLOv4 引入)

📌 公式定义:

GIoU=IoU−∣C∖(A∪B)∣∣C∣ \text{GIoU} = \text{IoU} - \frac{|C \setminus (A \cup B)|}{|C|} GIoU=IoU−∣C∣∣C∖(A∪B)∣​

其中:

  • CCC 是最小闭包框(包含 A 和 B);
  • 第二项表示非重叠区域对 C 的比例;

⚙️ 使用方式(YOLOv4):

  • ✅ 在 loss 函数中可配置为 iou_loss=giou;
  • ✅ 支持 GIoU-NMS(通过参数控制);
  • ✅ 用于边界框回归优化;

📈 改进意义:

优点说明
✅ 提供无重叠情况下的梯度信号适用于边界框远离 GT 的情况
✅ 更稳定的学习过程相比传统 IoU 更适合训练
✅ 提升小目标识别能力对低 IoU 框也有一定监督作用

四、DIoU(Distance-IoU)(YOLOv4/v5/v6/v7 均支持)

📌 公式定义:

DIoU=IoU−ρ2(b,bgt)d2 \text{DIoU} = \text{IoU} - \frac{\rho^2(b, b^{gt})}{d^2} DIoU=IoU−d2ρ2(b,bgt)​

其中:

  • ρ\rhoρ:预测框与真实框中心点之间的欧氏距离;
  • ddd:最小闭包框的对角线长度;

使用方式:

  • YOLOv4 中可通过 .cfg 文件配置:
iou_loss=diou
  • YOLOv5 中默认使用 CIoU,但支持切换为 DIoU;
  • YOLOv6 默认使用 CIoU,也可切换为 DIoU;
  • 推理阶段支持 DIoU-NMS(提升密集目标召回率);

改进意义:

优点说明
✅ 显式优化中心点距离边界框偏移更准确
✅ 收敛速度更快相比 GIoU 更高效
✅ 更适合大尺度偏移场景如遮挡、旋转等复杂情况

五、CIoU(Complete IoU)(YOLOv4/v5/v6/v7/v8 默认使用)

📌 公式定义:

CIoU=IoU−ρ2d2−αv \text{CIoU} = \text{IoU} - \frac{\rho^2}{d^2} - \alpha v CIoU=IoU−d2ρ2​−αv

其中:

  • ρ\rhoρ:中心点距离;
  • ddd:最小闭包框对角线;
  • vvv:宽高比一致性惩罚项;
  • α\alphaα:权衡系数;

⚙️ 使用方式:

  • ✅ YOLOv4 默认启用 CIoU Loss;
  • ✅ YOLOv5 默认使用 CIoU Loss;
  • ✅ YOLOv6 默认使用 CIoU Loss;
  • ✅ YOLOv7 默认使用 CIoU Loss;
  • ✅ YOLOv8 默认使用 CIoU Loss(搭配 TAL 标签分配);

📈 改进意义:

优点说明
✅ 综合考虑重叠、中心距离、宽高比提升回归精度
✅ 更稳定的训练过程收敛更快,mAP 提升明显
✅ 小目标识别更强对于边缘框也提供有效梯度

六、DFL Loss(Distribution Focal Loss)(YOLOv6+/v8 引入)

核心思想:

DFL 并不直接回归边界框坐标,而是建模边界框坐标的概率分布,最终取期望作为输出。

使用方式:

  • ✅ yolov6m+/l/x 支持 DFL;
  • ✅ 可通过 config 配置开启;
  • ✅ DFL 与 CIoU 结合使用,进一步提升定位精度;

七、Task-Aligned Assignment(TAL)中的 IoU 使用(YOLOv8 引入)

核心机制:

YOLOv8 引入了 Task-Aligned Assigner(TAL),它不再使用 SimOTA 或传统 anchor 匹配方式,而是通过以下方式动态选择正样本:

  • ✅ 计算每个 anchor 与所有 GT 的 IoU;
  • ✅ 构建 cost 矩阵(IoU + 分类置信度);
  • ✅ 使用 top-k 选择最优 anchor;

⚙️ 示例流程(简化版):

ious = compute_iou_matrix(anchors, gt_boxes)  # 所有 anchor 与 GT 的 IoU
cls_probs = model.classify(anchors)           # 分类置信度
cost = ious + cls_probs                      # 成本矩阵
topk_indices = select_topk(cost, k=13)        # 选择 top-k 最优匹配

八、YOLO 系列中各 IoU 类型的演进总结

IoU 类型是否 YOLO 使用使用版本是否支持 NMS
✅ 传统 IoU✅ YOLOv1-v3所有版本✅ 是
✅ GIoU✅ YOLOv4+YOLOv4/v5/v6/v7✅ 是(需手动配置)
✅ DIoU✅ YOLOv4+YOLOv4/v5/v6/v7✅ 是(推荐)
✅ CIoU✅ YOLOv4+YOLOv4/v5/v6/v7/v8✅ 是(默认)
✅ DFL✅ YOLOv6+/v8YOLOv6m+/x,YOLOv8s/m/l/x❌ 否(用于回归建模)
✅ TAL(Task-Aligned Assigner)✅ YOLOv8YOLOv8

九、YOLO 中不同 IoU 的性能对比

IoU 类型mAP@COCO val是否默认启用
✅ IoU~36.5% (yolov5s)❌ 否
✅ GIoU~37.0%❌ 否(需手动开启)
✅ DIoU~37.2%✅ 是(部分版本)
✅ CIoU~37.5%✅ 是(多数模型默认)
✅ DFL + CIoU~38.0%✅ YOLOv6m+/x 支持

十、YOLO 中 IoU 演变总结表

模型默认 IoU 类型支持 NMS 类型是否支持 DFL
YOLOv1~v3✅ IoU✅ IoU-NMS❌ 否
YOLOv4✅ CIoU✅ DIoU-NMS❌ 否
YOLOv5✅ CIoU✅ DIoU-NMS❌ 否
YOLOv6s✅ CIoU✅ DIoU-NMS❌ 否
YOLOv6m+✅ CIoU + DFL✅ DIoU-NMS✅ 是
YOLOv7✅ CIoU✅ DIoU-NMS❌ 否
YOLOv8✅ CIoU(默认)✅ DIoU-NMS✅ 是(DFL)

十一、结语

YOLO 系列在 IoU 损失函数上经历了如下演进:

  • ✅ YOLOv1~v3:使用传统 IoU;
  • ✅ YOLOv4~v7:支持 CIoU Loss;
  • ✅ YOLOv6m+/x、YOLOv8:引入 DFL Loss;
  • ✅ 所有 YOLOv4+ 模型支持 DIoU-NMS;

📌 欢迎点赞 + 收藏 + 关注我,我会持续更新更多关于目标检测、YOLO系列、深度学习等内容!

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐