一文掌握 YOLO 中的 IoU 演化:从 IoU 到 DIoU、CIoU、SIoU
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+/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系列、深度学习等内容!
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)