1. 前言
前面介绍训练时通过设置 plots=True参数, 在训练后不仅有数值指标,还能有可视化的结果,方便:
- 快速定位数据集问题(
labels.jpg、train_batch*.jpg) - 分析模型性能(
results.png、confusion_matrix.png) - 直观查看预测效果(
val_batch*_pred.jpg)
生成的文件如下:
kerry@wuchenruideMacBook-Pro train % ls
args.yaml confusion_matrix_normalized.png train_batch0.jpg train_batch2.jpg
BoxF1_curve.png confusion_matrix.png train_batch1.jpg val_batch0_labels.jpg
BoxP_curve.png labels.jpg train_batch180.jpg val_batch0_pred.jpg
BoxPR_curve.png results.csv train_batch181.jpg weights
BoxR_curve.png results.png train_batch182.jpg| 文件名 | 作用 | 是否关键 |
|---|---|---|
| args.yaml | 记录本次训练的所有参数(数据集路径、模型结构、训练轮数、batch size 等),用于复现训练。 | ✅ 非常重要 |
| results.png | 汇总训练和验证过程的损失曲线(box_loss、cls_loss、dfl_loss)和指标曲线(mAP、Precision、Recall)。 | ✅ 非常重要 |
| results.csv | 与 results.png 同源的数值版,每一行是一个 epoch 的指标和损失。方便用 Excel 或 Pandas 分析。 | ✅ 重要 |
| weights/ | 存放训练得到的模型权重:best.pt(验证集表现最佳)、last.pt(最后一个 epoch)。 | ✅ 必须保留 |
| confusion_matrix.png | 混淆矩阵,显示每个类别的预测情况(正确、误检、漏检)。 | ✅ 分类任务非常重要 |
| confusion_matrix_normalized.png | 归一化后的混淆矩阵,更直观地看类别间混淆比例。 | ✅ 分类任务非常重要 |
| labels.jpg | 数据集中所有标注框的分布可视化(位置、大小、长宽比)。用于检查数据集标注质量。 | ✅ 数据集分析重要 |
| BoxP_curve.png | Box Precision 曲线:定位框预测的准确率随 IoU 阈值变化的趋势。 | 🔍 辅助分析 |
| BoxR_curve.png | Box Recall 曲线:定位框召回率随 IoU 阈值变化的趋势。 | 🔍 辅助分析 |
| BoxF1_curve.png | Box F1 Score 曲线:Precision 和 Recall 的综合指标随 IoU 阈值变化的趋势。 | 🔍 辅助分析 |
| BoxPR_curve.png | Box Precision-Recall 曲线:显示不同置信度下 Precision 与 Recall 的关系。 | 🔍 辅助分析 |
| train_batch0.jpg / train_batch1.jpg / train_batch2.jpg | 训练集样本的可视化(带标注框),用于检查数据增强和标注是否正常。 | 🔍 可选 |
| train_batch180.jpg / train_batch181.jpg / train_batch182.jpg | 后期训练批次的可视化(可能是最后几个 batch),方便观察增强效果和样本多样性。 | 🔍 可选 |
| val_batch0_labels.jpg | 验证集样本的标注框可视化(真实标签)。 | 🔍 可选 |
| val_batch0_pred.jpg | 验证集样本的预测框可视化(模型输出)。 | 🔍 可选 |
2. 核心文件介绍
2.1. results.png
作用
记录训练过程的损失曲线和评估指标曲线,是判断模型收敛情况的核心图表。
内容
通常包含以下曲线(每条曲线都是按 epoch 绘制的):
- train/box_loss:训练集边界框回归损失,衡量预测框与真实框的差异。
- train/cls_loss:训练集分类损失,衡量预测类别与真实类别的差异。
- train/dfl_loss:分布焦点损失(YOLOv8 特有,用于精细化回归边界框)。
- val/box_loss、val/cls_loss、val/dfl_loss:验证集上的同类损失。
- metrics/precision:精确率,预测为正的样本中有多少是真的正。
- metrics/recall:召回率,真实正样本中有多少被正确预测。
- metrics/mAP50:IoU=0.5 时的 mAP。
- metrics/mAP50-95:IoU=0.5~0.95 平均的 mAP。
例子解读
假设你的 results.png 曲线是:
- 前 10 个 epoch,训练损失下降很快,验证损失也下降。
- 20 个 epoch 后,验证损失开始上升,训练损失继续下降 → 可能过拟合。
- mAP50 从 0.3 提升到 0.75,说明模型检测效果提升明显。
2.2. confusion_matrix.png
作用
展示多分类检测任务中,各类别的预测准确性和混淆情况。
内容
- 横轴:预测的类别
- 纵轴:真实的类别
- 格子颜色/数值:该真实类别被预测为某类别的次数(归一化为比例)。
例子解读
假设你检测三类:cat、dog、person
- 混淆矩阵显示真实
dog有 20% 被预测成cat→ 说明模型对猫狗区分不够好,可能需要更多区分性数据。 - 如果某类对角线上的数值明显低于其他类,说明该类召回率较低。
2.3. labels.jpg
作用
分析训练集标签的分布情况。
内容
通常包含两部分:
- 左图:每个类别的标注框数量柱状图。
- 右图:所有标注框的宽高分布(归一化到 [0,1],表示相对于图片尺寸的比例)。
例子解读
- 左图:如果某类别的数量只有其他类别的 1/10,说明类别不均衡,可能需要数据增补或加权训练。
- 右图:如果大部分框的宽高很小(如 <0.05),说明物体很小,可能需要调整模型输入尺寸或使用更适合小目标的结构。
2.4. val_batch0_pred.jpg
作用
展示模型在验证集某个 batch 上的预测结果。
内容
- 每张图片会显示预测框、类别标签、置信度分数。
- 框颜色区分不同类别。
例子解读
- 如果预测框位置偏差大,说明回归效果差。
- 如果置信度普遍很低(如 0.3~0.5),可能说明模型还未收敛或训练数据不足。
- 如果某些物体完全漏检,说明召回率有问题。
2.5. train_batch0.jpg
作用
展示训练集某个 batch 的原始图片和标注框,可用于检查数据增强和标签是否正确。
内容
- 框颜色区分不同类别。
- 框旁会标出类别名。
例子解读
- 如果标注框与物体不匹配,说明数据集标注有问题。
- 如果数据增强导致图片过度变形、物体被裁掉,可能需要调整数据增强策略。
2.6. opt.yaml
作用
保存训练配置参数(模型路径、数据集路径、超参数等),方便复现训练。
例子内容:
model: yolov8n.pt
data: data.yaml
epochs: 50
batch: 16
imgsz: 640
plots: True可以用它来快速复现:
yolo train opt.yaml2.7. hyp.yaml
作用
保存训练时使用的超参数(学习率、数据增强比例等)。
例子内容:
lr0: 0.01
momentum: 0.937
weight_decay: 0.0005
hsv_h: 0.015
hsv_s: 0.7
hsv_v: 0.4
degrees: 0.0
translate: 0.1
scale: 0.52.8. train.log
作用
记录训练过程中的日志(每个 epoch 的损失和指标),方便在没有图片的情况下分析训练过程。
例子内容:
Epoch GPU_mem box_loss cls_loss dfl_loss P R mAP50 mAP50-95
1/50 2.34G 0.050 0.020 0.015 0.65 0.70 0.72 0.65
...3. 训练效果-指标
上述文件中,核心关注 results.png,是对各类指标的总览。
3.1. 损失类参数(Loss)
3.1.1. train/box_loss
定义
- 衡量预测框与真实框的空间位置差异。
YOLOv8 默认使用 CIoU(Complete IoU) 或 GIoU(Generalized IoU) 损失。相比普通 IoU,它会考虑:
- 框的重叠面积
- 框中心点的距离
- 框宽高比例匹配程度
与相似参数对比
- train/dfl_loss 也与定位有关,但它是用离散分布来回归坐标,更精细;
box_loss是整体位置误差。 box_loss下降速度通常比dfl_loss慢,因为位置调整需要更多迭代。
异常现象
- 训练集下降,验证集不下降:可能过拟合,模型记住了训练集位置,但泛化差。
- 下降很慢:可能是数据集标注不准,或者物体尺度差异大。
数据集调整建议
- 检查标注质量(框是否紧贴物体边缘)。
- 对小物体,可以增加输入分辨率(如从 640 提到 960)。
- 对大物体,可以减少图片缩放比例,避免框失真。
3.1.2. train/cls_loss
定义
- 衡量预测类别与真实类别的差异。
- YOLOv8 使用 BCE Loss 或 Focal Loss(后者更适合类别不均衡)。
与相似参数对比
- Precision 和 Recall 也反映分类效果,但它们是基于检测结果的最终指标;
cls_loss是训练过程中的损失。 cls_loss高可能导致 Precision、Recall 都低。
异常现象
- 训练集低,验证集高:模型过拟合分类特征。
- 下降很慢:类别差异不明显,特征提取困难。
数据集调整建议
- 增加类别样本数量,尤其是样本少的类别。
- 使用数据增强(颜色、亮度变化)增加类别特征多样性。
- 对容易混淆的类别(如猫 vs 狗),增加区分性特征(不同背景、不同姿态)。
3.1.3. train/dfl_loss
定义
- DFL(Distribution Focal Loss) 用于精细化预测框坐标。
- 不是直接预测坐标,而是预测一个概率分布,然后取期望值作为坐标。
与相似参数对比
- 与
box_loss一起决定定位精度,但dfl_loss在小物体检测中作用更明显。 - 如果
box_loss已很低但dfl_loss仍高,说明框位置粗略正确但精度不足。
异常现象
- 下降缓慢:可能是图像分辨率太低,小物体特征不足。
- 训练集低,验证集高:泛化差,小物体定位不稳定。
数据集调整建议
- 增加小物体样本比例。
- 提高输入分辨率。
- 减少数据增强中的裁剪比例,避免小物体被截掉。
3.2. 验证集损失(val/...)
这些参数的作用主要是对比训练集损失,判断模型泛化能力。
7.2.4. val/box_loss
与
train/box_loss对比:- 差距小 → 泛化好。
- 差距大 → 过拟合或验证集分布与训练集差异大。
调整建议:
- 保证训练集和验证集分布一致(相同拍摄条件、分辨率)。
- 增加数据集多样性(不同背景、光照)。
3.2.5. val/cls_loss
与
train/cls_loss对比:- 差距大 → 说明模型分类在新数据上表现差。
调整建议:
- 增加验证集中样本少的类别在训练集的比例。
- 检查类别标签是否一致(避免标签错位)。
3.2.6. val/dfl_loss
与
train/dfl_loss对比:- 差距大 → 小物体定位在验证集上表现差。
调整建议:
- 增加小物体在训练集中的比例。
- 调整锚框(Anchor)或输入分辨率。
3.3. 评估指标(metrics/...)
3.3.7. metrics/precision
定义
$$ Precision = \frac{TP}{TP + FP} $$
- 高 Precision → 模型误检少。
与 Recall 对比
- Precision 高但 Recall 低 → 模型很保守,只预测非常确定的目标。
- Precision 低但 Recall 高 → 模型大胆预测,误检多。
异常现象
- Precision 高但 Recall 低 → 数据集正负样本差异大,模型容易漏检。
- Precision 低但 Recall 高 → 背景复杂,模型容易把背景当成目标。
数据集调整建议
- Precision 高 Recall 低 → 增加难例(模糊、遮挡)的正样本。
- Precision 低 Recall 高 → 增加背景样本,让模型学会区分目标与背景。
3.3.8. metrics/recall
定义
$$ Recall = \frac{TP}{TP + FN} $$
- 高 Recall → 模型漏检少。
与 Precision 对比
- 高 Recall + 低 Precision → 误检多。
- 高 Precision + 高 Recall → 模型理想状态。
异常现象
- Recall 低 → 小物体漏检、长尾类别漏检。
- Recall 高 Precision 低 → 预测阈值太低。
数据集调整建议
- Recall 低 → 增加漏检类别样本数量。
- Recall 高 Precision 低 → 提高推理置信度阈值,或减少背景干扰样本。
3.3.9. metrics/mAP50
- IoU=0.5 时的平均精度,容错高。
- 高 mAP50 但低 mAP50-95 → 框位置粗略正确,但精度不足。
调整建议
- 提高分辨率,改善定位精度。
- 优化
dfl_loss,增加小物体样本。
3.3.10. metrics/mAP50-95
- 更严格的定位指标。
- 高 mAP50-95 → 模型定位非常精确。
- 低 mAP50-95 → 框位置偏差大。
调整建议
- 提高分辨率。
- 减少数据增强中大幅度的平移、缩放。
3.4. 综合分析方法
当你看到 results.png 时,可以按以下流程分析:
- 损失曲线:训练集与验证集差距大 → 检查过拟合。
Precision & Recall:
- 高 Precision + 低 Recall → 增加难例正样本。
- 低 Precision + 高 Recall → 增加背景样本。
mAP50 vs mAP50-95:
- 高 mAP50 低 mAP50-95 → 定位精度不足,优化分辨率和小物体数据。
4. dfl_loss/box_loss
dfl_loss 和 box_loss 都跟预测框有关,它们到底有什么区别?为什么 YOLO 要同时用两个损失?
4.1. 核心区别
| 损失类型 | 作用位置 | 预测方式 | 主要目标 | 精度层级 |
|---|---|---|---|---|
| box_loss | 框整体定位 | 直接预测中心点坐标 + 宽高(回归值) | 让预测框与真实框的 整体位置 尽量重合 | 粗定位 |
| dfl_loss | 框坐标细化 | 预测每个坐标的离散概率分布 | 让预测框的 边界坐标 精确到像素级 | 精定位 |
- box_loss:整体位置对齐,粗定位。
- dfl_loss:边界坐标精细化,精定位。
- 两者配合:先粗后精,保证快速收敛和最终精度。
优化方向:
- 提高分辨率 → 改善 dfl_loss。
- 改善标注质量 → 同时改善两者。
- 合理数据增强 → 避免位置漂移影响 box_loss。
4.2. 计算方式上的差异
4.2.1 box_loss
- 计算对象:预测框的四个坐标(中心点 x,y,宽 w,高 h)。
计算方法:使用 IoU-based loss(如 CIoU、GIoU、DIoU):
- 考虑框的重叠面积
- 考虑中心点距离
- 考虑宽高比例
特点:
- 粗粒度:一次性对整个框位置进行评估。
- 容忍小的坐标误差,只要整体 IoU 高就可以。
4.2.2 dfl_loss(Distribution Focal Loss)
- 计算对象:预测框的每个边界坐标(左、右、上、下)。
计算方法:
- 将每个坐标离散化成多个位置(例如 0 ~ 640 像素,分成 N 个格子)。
- 模型对每个位置输出一个概率分布(哪个位置最可能是边界)。
- 取概率分布的加权平均作为最终坐标。
- 用 Focal Loss 或 Cross Entropy 来让概率分布集中在真实位置附近。
特点:
- 精粒度:像素级精确定位。
- 对小物体特别有用,因为小物体的坐标误差对 IoU 影响很大。
4.3. 为什么用两个损失?
- box_loss:保证整体框位置是对的,快速收敛到合理位置。
- dfl_loss:在位置大致正确的基础上,进一步微调到更精确的坐标。
💡 类比:
box_loss就像你用地图导航到某个小区门口(大致位置对了)。dfl_loss就像你在小区里精确找到具体的楼栋和门牌号(精确定位)。
4.4. 对训练曲线的影响
训练初期:
box_loss下降快,因为先学会粗定位。dfl_loss下降慢,因为精定位需要框已经接近目标。
训练中后期:
box_loss下降趋缓,dfl_loss开始明显下降。- mAP50 主要受
box_loss影响,mAP50-95 主要受dfl_loss影响。
4.5. 举例说明
假设你检测一个猫的脸:
- 只有 box_loss:框能圈到猫的脸,但可能稍微偏大或偏小,边缘不够贴合。
- 加上 dfl_loss:框不仅圈到猫的脸,而且四个边精确贴到耳朵和下巴的位置,IoU 更高。
粗定位(box_loss) 精定位(dfl_loss)
┌──────────────────────┐ ┌──────────────────────┐
│ ┌──────────┐ │ │ ┌──────────┐ │
│ │ │ │ │ │ 精确框 │ │
│ │ 猫脸 │ │ │ └──────────┘ │
│ │ │ │ │ │
│ └──────────┘ │ │ │
│ │ │ │
└──────────────────────┘ └──────────────────────┘解释
左图(box_loss)
框的位置大致正确,圈住了猫的脸,但边缘与真实物体不完全贴合。- 这种情况下 IoU 可能已经不低(比如 0.7),但还有优化空间。
- 主要通过 IoU-based loss(如 CIoU、GIoU)调整整体位置。
右图(dfl_loss)
在左图的基础上,边界坐标进一步微调,精确贴合物体边缘。- IoU 从 0.7 提升到 0.85+。
- 通过预测每个坐标的概率分布,像素级优化边界。
4.6. 怎么调整数据集?
4.6.1 dfl_loss 高、box_loss 低
- 现象:框位置粗略正确,但边界不精确。
原因:
- 数据集分辨率低,小物体边界模糊。
- 标注框不够精确(边界没贴物体)。
调整方法:
- 提高输入分辨率(如 640 → 960)。
- 检查标注质量,确保框边贴近物体边缘。
- 增加小物体样本比例。
4.6.2 box_loss 高、dfl_loss 低
- 现象:框边界很精确,但整体位置不对(可能框偏移)。
原因:
- 数据增强过度(平移、裁剪导致位置漂移)。
- 训练集分布与验证集差异大(背景变化大)。
调整方法:
- 减少过度平移、裁剪的数据增强。
- 保证训练集和验证集的背景、拍摄角度一致。
4.6.3 两者都高
原因:
- 数据集标注差(位置和边界都不准)。
- 数据集噪声大(背景复杂、遮挡多)。
调整方法:
- 重新标注或清洗数据。
- 增加干净的样本。
- 先用较少增强训练收敛,再加增强微调。
5.IoU
IoU(Intersection over Union),是目标检测领域的一个核心概念,几乎所有 YOLO 系列模型的定位指标、损失函数、评估标准都离不开它。很多人第一次接触时只是知道它是个“重叠比例”,但其实它有很多细节、变种,以及在训练和评估中的不同作用。
5.1. IoU 的定义
IoU = 预测框 和 真实框 的重叠程度。
数学定义:
$$ IoU = \frac{\text{重叠区域面积}}{\text{并集区域面积}} $$
- 重叠区域面积(Intersection):预测框和真实框交集的面积。
- 并集区域面积(Union):预测框面积 + 真实框面积 − 重叠区域面积。
直观理解
假设:
- 预测框:圈到一只猫的头部
- 真实框:圈到猫的头部
- 两个框完全重合 → IoU = 1.0
- 两个框完全不重叠 → IoU = 0.0
- 部分重叠 → IoU 在 0 ~ 1 之间
5.2. 计算过程示例
假设:
- 预测框面积 = 40
- 真实框面积 = 50
- 重叠面积 = 30
并集面积 = 40 + 50 − 30 = 60
$$ IoU = \frac{30}{60} = 0.5 $$
→ 说明预测框和真实框的重叠程度是 50%。
5.3. IoU 在目标检测中的作用
评估指标
- mAP(平均精度)计算时会用到 IoU 作为匹配条件。
- 例如:mAP@0.5 表示 IoU ≥ 0.5 就算预测正确;mAP@0.5:0.95 会计算多个 IoU 阈值的平均。
训练损失
- YOLO 的
box_loss基于 IoU 变种(GIoU、DIoU、CIoU)来优化预测框的位置和大小。
- YOLO 的
非极大值抑制(NMS)
- 在推理时,IoU 用来判断两个框是否是同一个目标,如果 IoU 高于某个阈值,就会删除重复框。
5.4. 几个常见变种
因为普通 IoU 在某些情况下不够敏感,所以衍生了很多改进版本:
| 变种 | 公式变化 | 改进点 | 适用场景 |
|---|---|---|---|
| GIoU(Generalized IoU) | IoU − 空间惩罚项 | 考虑预测框和真实框的最小包围框面积 | 框不重叠时也能优化 |
| DIoU(Distance IoU) | IoU − 中心点距离惩罚项 | 考虑框中心点之间的距离 | 提高定位速度 |
| CIoU(Complete IoU) | IoU − 距离惩罚 − 长宽比惩罚 | 同时优化位置、尺度、长宽比 | YOLOv5/YOLOv8 默认 |
| EIoU(Efficient IoU) | IoU − 宽高差惩罚 | 更快收敛 | 大目标检测 |
为什么要用 CIoU 而不是普通 IoU?
普通 IoU 在预测框和真实框没有重叠时,梯度为 0,模型无法学习。而 CIoU 会在这种情况下仍提供优化信号(通过中心点距离和长宽比差异),让框逐渐靠近目标。
5.5. 在 YOLO 中的具体应用
训练阶段
train/box_loss基于 CIoU(或 GIoU)计算,优化框的位置。- IoU 越高,说明框位置越接近真实框,损失越低。
验证阶段
mAP50:IoU ≥ 0.5 就算预测正确。mAP50-95:在 IoU 阈值 0.5 ~ 0.95 之间的平均结果,更严格。
推理阶段
- NMS 使用 IoU 阈值(如 0.6)来去除重复预测框。
5.6. 数据集优化与 IoU 的关系
| IoU 异常表现 | 可能原因 | 数据集优化方法 |
|---|---|---|
| IoU 长期低 | 标注框不准;分辨率低;小物体特征不足 | 检查标注质量;提高分辨率;增加小物体样本 |
| IoU 高但 mAP50-95 低 | 框位置对但边界不精确 | 优化 dfl_loss;精确标注边界;提高分辨率 |
| IoU 波动大 | 数据集分布差异大;数据增强过度 | 保证训练/验证集分布一致;减少过度平移裁剪 |
5.7. 直观图解
真实框:████████
预测框: ████████
重叠部分: ████
IoU = 重叠面积 / 并集面积- IoU 越接近 1 → 定位越精准
- IoU 越接近 0 → 定位越差
6. IoU变种对比
6.1. 图形总览
下面的示意图中:
- 🟩 绿色框 = 真实框 (Ground Truth)
- 🟥 红色框 = 预测框 (Predicted Box)
- 🟦 蓝色区域 = IoU 重叠部分
- 🔲 黑色虚线框 = 两个框的最小包围框 (GIoU 用到)
- 📏 中心点虚线 = 两个框中心距离 (DIoU / CIoU 用到)
场景 1:两个框部分重叠
IoU: 只计算蓝色重叠区域 / 并集
GIoU: IoU - (最小包围框面积 - 并集面积) / 最小包围框面积
DIoU: IoU - (中心点距离 / 最小包围框对角线长度)
CIoU: DIoU - 长宽比差异惩罚 ┌───────────────┐
│ 🟩真实框 │
│ ┌───────┐ │
│ │🟥预测框│ │
│ └───────┘ │
└───────────────┘- IoU:只关心重叠部分比例
- GIoU:即使重叠不多,也考虑两框的最小包围框面积,让优化方向更明确
- DIoU:考虑中心点距离,框会更快移到正确位置
- CIoU:同时优化位置、尺度和长宽比
场景 2:两个框完全不重叠
IoU: = 0(无法提供梯度,模型难以优化)
GIoU: < 0(根据最小包围框面积惩罚)
DIoU: 惩罚中心点距离
CIoU: 惩罚距离 + 长宽比差异🟩真实框 🟥预测框
┌───────┐ ┌───────┐
│ │ │ │
└───────┘ └───────┘- IoU:梯度为 0 → 无法学习
- GIoU:通过最小包围框面积差让框逐渐靠近
- DIoU:通过中心点距离让框快速移动到目标附近
- CIoU:还会修正长宽比,让框形状更接近目标
场景 3:位置接近但长宽比差异大
IoU: 重叠区域可能还可以,但形状差异大
GIoU: 类似 IoU,额外考虑空白区域
DIoU: 中心点已对齐,惩罚减少
CIoU: 强烈惩罚长宽比差异┌─────────────┐
│ 🟩真实框 │
│ ┌─────────┐ │
│ │ 🟥预测框 │ │
│ └─────────┘ │
└─────────────┘- IoU:不关心长宽比,只看重叠比例
- CIoU:在这个场景下会继续优化框形状,直到和真实框匹配
6.2. 对比总结表
| 场景 | IoU | GIoU | DIoU | CIoU |
|---|---|---|---|---|
| 部分重叠 | 只看重叠比例 | 额外考虑空白区域 | 考虑中心点距离 | 考虑距离+长宽比 |
| 不重叠 | 梯度为 0 | 惩罚空白区域 | 惩罚中心点距离 | 距离+长宽比双惩罚 |
| 长宽比差 | 不关心形状 | 不关心形状 | 不关心形状 | 优化形状匹配 |
6.3. 为什么 YOLO 默认用 CIoU
- IoU 在不重叠时无法提供优化信号 → 模型学不动
- GIoU 能在不重叠时优化,但不考虑距离和形状 → 收敛慢
- DIoU 加了距离项 → 框更快到位
- CIoU 同时优化位置、距离、长宽比 → 定位更精确,收敛更快
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。