1. args.yaml
文件分析
文件内容
args.yaml
文件保存了训练时使用的所有超参数和配置。它是一个 YAML 格式的文件,内容示例如下:
lr0: 0.01 # 初始学习率
momentum: 0.937 # 动量(用于 SGD 优化器)
weight_decay: 0.0005 # 权重衰减(L2 正则化)
warmup_epochs: 3.0 # 学习率预热的轮数
batch: 16 # 批次大小
imgsz: 640 # 输入图像的尺寸
data: coco128.yaml # 数据集配置文件路径
epochs: 100 # 训练的总轮数
device: 0 # 使用的设备(0 表示 GPU 0)
workers: 8 # 数据加载的线程数
optimizer: SGD # 优化器类型
name: exp # 训练运行的名称
project: runs/train # 保存训练结果的目录
如何分析
-
学习率(
lr0
):-
学习率是训练中最重要的超参数之一。
-
如果训练损失波动较大或无法收敛,可能是学习率过高。
-
如果训练损失下降缓慢,可能是学习率过低。
-
-
批次大小(
batch
):-
批次大小影响训练速度和内存占用。
-
较大的批次可以提高训练速度,但需要更多显存。
-
较小的批次可能导致训练不稳定。
-
-
数据增强(
imgsz
和data
):-
imgsz
是输入图像的尺寸,较大的尺寸可以提高模型对小目标的检测能力,但会增加计算量。 -
data
是数据集的配置文件,检查数据集路径和类别数量是否正确。
-
-
优化器(
optimizer
):-
默认使用 SGD,也可以选择 Adam 等其他优化器。
-
如果训练效果不佳,可以尝试更换优化器。
-
-
设备(
device
):-
确认是否使用了 GPU 进行训练。
-
如果使用了多 GPU,检查是否分配合理。
-
-
其他参数:
-
weight_decay
:控制模型复杂度,防止过拟合。 -
warmup_epochs
:学习率预热,避免训练初期的不稳定。
-
2. results.csv
文件分析
文件内容
results.csv
文件记录了每个训练轮次(epoch)的性能指标,内容示例如下:
epoch | train/loss | val/loss | metrics/precision | metrics/recall | metrics/mAP50 | metrics/mAP50-95 | lr/pg0 |
---|---|---|---|---|---|---|---|
1 | 0.1234 | 0.2345 | 0.876 | 0.765 | 0.812 | 0.654 | 0.01 |
2 | 0.1123 | 0.2234 | 0.887 | 0.776 | 0.823 | 0.665 | 0.01 |
... | ... | ... | ... | ... | ... | ... | ... |
字段解释
-
epoch
:-
当前训练的轮次。
-
-
train/loss
:-
训练集上的损失值,反映模型在训练数据上的拟合程度。
-
理想情况下,
train/loss
应逐渐下降并趋于稳定。
-
-
val/loss
:-
验证集上的损失值,反映模型在未见数据上的泛化能力。
-
如果
val/loss
上升或波动较大,可能是过拟合。
-
-
metrics/precision
:-
精确率(Precision),表示模型预测为正样本中实际为正样本的比例。
-
公式:
Precision = TP / (TP + FP)
。
-
-
metrics/recall
:-
召回率(Recall),表示模型正确预测的正样本占所有真实正样本的比例。
-
公式:
Recall = TP / (TP + FN)
。
-
-
metrics/mAP50
:-
mAP@0.5,表示 IoU 阈值为 0.5 时的平均精度(Mean Average Precision)。
-
是目标检测任务中最常用的评估指标之一。
-
-
metrics/mAP50-95
:-
mAP@0.5:0.95,表示 IoU 阈值从 0.5 到 0.95 的平均精度。
-
反映模型在不同 IoU 阈值下的综合性能。
-
-
lr/pg0
:-
当前轮次的学习率。
-
如何分析
-
损失曲线:
-
检查
train/loss
和val/loss
是否同步下降。 -
如果
train/loss
下降但val/loss
上升,可能是过拟合。 -
如果两者均不下降,可能是模型欠拟合或学习率设置不当。
-
-
精确率和召回率:
-
精确率和召回率应逐步上升并趋于稳定。
-
如果精确率较高但召回率较低,说明模型过于保守(漏检较多)。
-
如果召回率较高但精确率较低,说明模型过于激进(误检较多)。
-
-
mAP 指标:
-
mAP50
和mAP50-95
是模型性能的核心指标。 -
如果
mAP50
较高但mAP50-95
较低,说明模型对小目标或高 IoU 阈值下的检测能力不足。
-
-
学习率变化:
-
检查
lr/pg0
是否按预期调整。 -
如果学习率过高,可能导致训练不稳定;如果过低,可能导致收敛缓慢。
-
综合分析示例
场景 1:过拟合
-
现象:
-
train/loss
持续下降,但val/loss
上升或波动较大。 -
metrics/mAP50
和metrics/mAP50-95
在验证集上表现较差。
-
-
原因:
-
模型过于复杂,学习了训练数据中的噪声。
-
数据增强不足或训练数据量不足。
-
-
解决方案:
-
增加数据增强(如随机裁剪、旋转、缩放)。
-
使用正则化方法(如增加
weight_decay
)。 -
减少模型复杂度或使用早停(Early Stopping)。
-
场景 2:欠拟合
-
现象:
-
train/loss
和val/loss
均较高且不下降。 -
metrics/precision
和metrics/recall
较低。
-
-
原因:
-
模型复杂度不足,无法拟合数据。
-
学习率设置过低或训练轮次不足。
-
-
解决方案:
-
增加模型复杂度(如增加网络层数或通道数)。
-
提高学习率或增加训练轮次。
-
场景 3:类别不平衡
-
现象:
-
某些类别的
metrics/precision
和metrics/recall
明显低于其他类别。 -
混淆矩阵中某些类别的对角线值较低。
-
-
原因:
-
数据集中某些类别的样本数量较少。
-
-
解决方案:
-
使用类别平衡的损失函数(如 Focal Loss)。
-
增加少数类别的数据或使用数据增强。
-
总结
-
args.yaml
:记录训练的超参数配置,用于复现实验或调整参数。 -
results.csv
:记录每个训练轮次的性能指标,用于分析模型表现和诊断问题。 -
分析方法:
-
结合损失曲线、精确率、召回率、mAP 等指标,判断模型是否过拟合或欠拟合。
-
根据混淆矩阵和类别表现,定位数据或模型的问题。
-
调整超参数(如学习率、批次大小)或数据增强策略,优化模型性能。
-
通过系统化地分析这些文件,可以更好地理解模型的表现,并针对性地优化训练过程。