YOLO介绍—datawhale
-
速度快:YOLO的设计目标是实现快速的对象检测,它在保持相对高准确度的同时,能够实现高帧率的实时检测。
-
易于实现:YOLO的架构相对简单,易于理解和实现,这使得它在学术和工业界都得到了广泛的应用。
-
版本迭代:YOLO自2016年首次发布以来,已经经历了多个版本的迭代(如YOLOv5、YOLOv6、YOLOv7等),每个版本都在性能和效率上有所提升。
-
社区支持:YOLO拥有一个活跃的开发者社区,提供了大量的教程、工具和预训练模型,这使得小白也可以快速上手并应用YOLO。
-
灵活性:YOLO的架构允许用户根据特定需求调整网络结构,例如改变输入图像的尺寸或调整网络的深度。
YOLO 数据集格式
# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
path: ../dataset/ # dataset root dir
train: images/train/ # train images (relative to 'path') 128 images
val: images/val/ # train images (relative to 'path') 128 images
# Classes
nc: 2 # number of classes表示类别的数量,这里设置为2,意味着数据集中有两类物体需要被识别。
names: ["0", '1'] # class names包含了每个类别的名称。这里有两个类别,名称分别是"0"和"1"。这些名称在训练和测试过程中用于引用特定的类别。
数据集配置
path:数据集的根目录,设置为/数据集/。
train和val:分别包含训练和验证图像的目录。这些路径是相对于路径目录的。在这种情况下,训练图像位于images/strain/中,验证图像位于images/val/中。
类配置
nc:数据集中的类数,设置为2。这意味着模型将被训练以识别两类不同的对象。
names:类名列表,用于在培训和测试期间引用特定的类。在这种情况下,这两个类分别命名为“0”和“1”。
具体查看:物体检测数据集概述 -Ultralytics YOLO 文档
YOLO 训练日志
在使用YOLO进行训练时,生成的exp/detect/train
类型的文件夹是训练过程中的一个关键组成部分。
-
模型权重 (
.pt
或.pth
文件): 训练过程中保存的模型权重,可以用于后续的测试或继续训练。 -
日志文件 (
.log
文件): 包含训练过程中的所有输出信息,如损失值、精度、速度等。 -
配置文件 (
.yaml
或.cfg
文件): 训练时使用的配置文件副本,记录了数据路径、类别名、模型架构等设置。 -
图表和可视化: 有时YOLO会生成训练过程中的性能图表,如损失曲线、精度曲线等。
-
测试结果: 如果训练过程中包括了测试阶段,可能会有测试结果的保存,如检测结果的图片或统计数据。
-
F1_curve.png, PR_curve.png, P_curve.png, R_curve.png: 包含模型性能的不同评估指标曲线图,如F1分数(
F1_curve.png
)、精确率-召回率曲线(PR_curve.png
)、精确率(P_curve.png
)和召回率(R_curve.png
)。 -
results.csv: 一个CSV文件,包含模型训练或测试的结果数据。
-
results.png: 包含训练结果的汇总图表或图像。
-
train_batch*.jpg: 包含训练过程中不同批次的图像和它们的标注。
-
val_batch0_labels.jpg, val_batch0_pred.jpg: 验证集批次的图像,可能包含真实标签(
labels
)和模型预测(pred
)的可视化。 -
weights/: 一个目录,通常包含模型训练过程中保存的权重文件,如
.pt
或.pth
文件。
在训练过程中和训练完成后,都可以查看训练日志。可以优先查看results.png,图像的内容类似如下。从验证集上的损失 (val/box_loss
, val/cls_loss
, val/dfl_loss
) 和性能指标可以评估模型在未见数据上的泛化能力。在下面的训练日志中,我们发现模型在验证集发生了过拟合。
缩写 | 作用描述 |
epoch | 表示模型在整个训练数据集上进行了一次前向和后向传播的完整周期。 |
train/box_loss | 衡量模型预测的边界框与真实边界框之间差异的损失值。 |
train/cls_loss | 衡量模型预测的类别与真实类别之间差异的损失值。 |
train/dfl_loss | 衡量模型对难分类样本的关注程度,减少易分类样本的影响。 |
metrics/precision(B) | 在训练过程中,预测为正类别中实际为正类别的比例。 |
metrics/recall(B) | 在训练过程中,所有实际正类别中被模型正确预测为正类别的比例。 |
metrics/mAP50(B) | 在50%的IoU阈值下计算,衡量模型的整体性能。 |
metrics/mAP50-95(B) | 在0.5到0.95的IoU阈值范围内计算,提供更全面的模型性能评估。 |
val/box_loss | 模型在未见过的验证集上的边界框损失,用于监控模型的泛化能力。 |
val/cls_loss | 模型在验证集上的分类损失,用于监控模型的泛化能力。 |
val/dfl_loss | 模型在验证集上的难易样本平衡损失。 |
训练指标(第一行):
- train/box_loss:训练期间的边界框回归损失随着时间的推移而减少,表明模型在预测边界框坐标方面正在改进。
- train/cls_loss:分类损失也呈下降趋势,表明模型正在学习更准确地对对象进行分类。
- train/dfl_loss:这可能是指 “Distribution Focal Loss”,其下降趋势反映了模型定位能力的改进。
- metrics/precision(B):精度会波动,但最终会提高,但存在一些不稳定性,这可能表示过度拟合或噪声。
- metrics/recall(B):召回率持平在 1.0 时,这意味着训练集上的完美召回率,可能表明模型检测到所有相关对象,没有遗漏任何对象。
验证指标(第二行):
- val/box_loss:验证边界框损失减少,但与训练损失相比显示出更多的不稳定性,这表明模型在验证集上的一致性可能较低。
- val/cls_loss:与训练类似,分类损失减少,但模式表明存在一些波动。
- val/dfl_loss:分布焦点损失减少,跟随其他验证损失的趋势。
- metrics/mAP50(B):50% IoU 的平均精度均值随着时间的推移而提高,表明检测对象的整体性能更好。
- metrics/mAP50-95(B):该指标跟踪一系列 IoU 阈值 (50-95%) 的性能,其逐渐增加表明模型的检测质量在更广泛的难度级别范围内正在提高。
一般观察:
- 训练与验证:与验证损失相比,训练损失通常更平滑、更一致,验证损失显示更多的波动,这是一些噪声或潜在过度拟合的典型迹象。
- 性能指标:mAP50 和 mAP50-95 都在增加,这表明该模型在各种场景中的目标检测性能都在提高
如果模型效果很好,通常这些图的走势应该表现出较为平稳的下降趋势或稳定的性能提升。以下是各个图的预期走势:
训练损失(Train Loss)相关图:
-
train/box_loss(边界框损失):
- 期望走势: 边界框损失应逐渐减小,呈下降趋势,且下降的幅度较为平滑,说明模型在边界框回归任务上逐渐学会了精确定位目标。
- 不理想的情况: 如果有较大的波动或者在某个阶段不再下降,可能意味着学习率设置不佳或模型未能充分学习。
-
train/cls_loss(分类损失):
- 期望走势: 分类损失应呈下降趋势,表明模型在目标分类任务上的表现逐渐提升。
- 不理想的情况: 如果损失出现反弹或者收敛得过早,可能意味着模型过拟合、欠拟合或学习率问题。
-
train/dfl_loss(分布焦点损失):
- 期望走势: 这类损失应像其他损失一样,逐渐减小并趋于稳定。
- 不理想的情况: 如果有明显波动或下降缓慢,可能表明模型在回归边界框的质量上有难度。
验证损失(Validation Loss)相关图:
-
val/box_loss 和 val/cls_loss:
- 期望走势: 验证集上的损失应该和训练集上的趋势相似,逐步下降并趋于平稳。如果验证集的损失持续降低,说明模型在未见过的数据上也表现出良好的泛化能力。
- 不理想的情况: 如果验证集损失在早期就稳定不变或开始增大,说明可能发生了过拟合,即模型在训练集上表现很好,但在验证集上效果不佳。
-
val/dfl_loss:
- 期望走势: 验证集上的分布焦点损失也应像训练集一样,逐步下降,表明模型在更广泛的数据上表现良好。
评价指标(Metrics)相关图:
-
metrics/precision(B)(精度):
- 期望走势: 精度应逐步提升,且最终稳定在较高水平。精度的提升意味着模型减少了错误的正例预测。
- 不理想的情况: 如果精度波动较大或迟迟不提升,可能意味着模型在学习过程中表现不稳定。
-
metrics/recall(B)(召回率):
- 期望走势: 召回率应逐渐提升并保持稳定在较高水平(例如 0.8-1.0),表明模型能够找到几乎所有的目标。
- 不理想的情况: 召回率长期不变,或者在训练过程中大幅波动,可能表示模型在找到所有目标上存在困难。
-
metrics/mAP50(B)(平均精度,IoU=50%):
- 期望走势: mAP50 应呈持续上升趋势,达到某个稳定值。较高的 mAP50 表明模型在较为宽松的 IoU 阈值下表现良好。
- 不理想的情况: 如果 mAP50 迟迟不提升,可能意味着模型对目标的定位和分类效果都不理想。
-
metrics/mAP50-95(B)(平均精度,IoU=50-95%):
- 期望走势: mAP50-95 也应逐步上升,但一般比 mAP50 要慢一些,因为这反映了模型在更严格的 IoU 阈值下的性能。较高的 mAP50-95 表示模型能在多种精度要求下正确预测目标。
- 不理想的情况: 如果 mAP50-95 很低,说明模型在较高精度要求下(即 IoU 较大时)表现不佳。
总结
- 良好表现的模型:训练和验证损失应该逐渐降低,最终趋于稳定。评价指标(如精度、召回率、mAP 等)应呈现逐步上升,并在高值区域趋于平稳。
- 需要注意的情况:如果验证损失和训练损失出现较大差距,验证集上的损失不再下降,或评价指标不提升甚至下降,通常表明模型在验证集上的泛化能力较差,即可能过拟合。
具体查看:YOLO 性能指标 -Ultralytics YOLO 文档