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=IoUCC(AB)

其中:

  • 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=IoUd2ρ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=IoUd2ρ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+/v8 YOLOv6m+/x,YOLOv8s/m/l/x ❌ 否(用于回归建模)
✅ TAL(Task-Aligned Assigner) ✅ YOLOv8 YOLOv8

九、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 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐