本次笔记主要探讨我们训练完后生成的结果文件夹/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
文件。
weights文件夹里面有两个.pt文件。
last.pt
是模型训练过程中最后一个epoch的权重,而best.pt
是在所有验证过程中表现最佳的模型权重。所以一般我们训练完后,在预测时用到的就是best.pt。
但是last.pt也是经常使用的,下面是一些常见的应用场景:
1.继续训练。如果我们计划在现有训练的基础上继续训练模型,那么使用last.pt
可能更合适,这使得我们可以从最后一个epoch的状态继续训练。
2.实验和调试:在进行模型调优和实验时,使用last.pt
可以帮助我们快速迭代和测试不同的超参数或模型配置。
3.实时应用:在需要实时性能的应用中,如视频流处理或实时监控系统,使用last.pt
可能更合适,因为它代表了模型的最新状态,可能在某些情况下提供了更好的实时性能。
而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 | 模型在验证集上的难易样本平衡损失。 |
过拟合发生在模型在训练数据上表现很好,但在未见过的验证或测试数据上表现差的情况下。
所以我们可以先去检查赛事方给定的样本数据,看看是不是所有可能的情况样本都出现,并且数量比较充足。否则再多的“非机动车违停”和“机动车违停”样本,也难以泛化到“垃圾桶满溢”情况为主的测试集上。
总的来说,我们在训练完后,可以优先查看results.png文件,看看训练的损失函数有没有下降,有没有出现过拟合情况。如果出现过拟合情况,可以通过数据增强、正则化等技术来调整。