笔者这里是自己学习yolov8结果文件时的笔记心得分享给各位读者,可能也有很多不足之处,希望大家批评指正,共同成长!
在 YOLOv8 的训练过程中,训练结果会存储在 runs/detect/train
目录下,其中包含多个文件和子文件夹。这些文件记录了训练的过程和结果,便于后续的评估和分析。
-
结果文件示意图
1. weights/(权重文件夹)
- best.pt:训练过程中性能最好的模型的权重文件,通常是基于验证集的 mAP 或其他指标来判断模型最佳性能时保存的。
- last.pt:训练结束时的最后一次模型的权重文件,不一定是性能最好的模型,但保存了最后的训练状态。(若需继续训练可选)
这些权重文件可以用于推理、测试或者进一步微调。
2. args.yaml(配置文件)
-
args.yaml示意图
-
args.yaml参数解释
(1)任务和模式
task: detect
: 指定任务为检测(目标检测任务)。
mode: train
: 指定运行模式为训练。
(2)模型与数据
model: yolov8m.yaml
: 使用 YOLOv8 中等规模(medium
)的模型配置文件。
data: /data/data.yaml
: 数据集配置文件的位置。
pretrained: /data/yolov8m.pt
: 预训练模型的路径,用于在此基础上进行微调。
(3)训练参数
epochs: 400
: 训练的总周期数为 400 。
batch: 16
: 批次大小,每次处理 16 张图片。
imgsz: 640
: 输入图像的尺寸为 640x640。
device: 0
: 指定 GPU 设备编号为 0 。
workers: 8
: 数据加载时使用的线程数为 8。
optimizer: auto
: 自动选择优化器。
lr0: 0.00976
: 初始学习率。
momentum: 0.93626
: 优化器动量。
weight_decay: 0.00018
: 权重衰减,防止过拟合。
warmup_epochs: 4.85722
: 热身训练周期,逐步增加学习率。
amp: true
: 启用自动混合精度训练,提高计算效率。
(4) 早停与保存
patience: 50
: 如果连续 50 个周期内没有性能提升,训练将提前终止。
save: true
: 启用保存模型。
save_period: -1
: 默认每个周期都会保存模型。
save_dir: runs/detect/train
: 保存训练结果的目录。
(5)数据增强
auto_augment: randaugment
: 使用随机数据增强技术(RandAugment
)。
flipud: 0.0
: 不进行上下翻转。
fliplr: 0.26921
: 左右翻转的概率为 26.9%。
scale: 0.69983
: 进行图像缩放的数据增强。
mosaic: 0.97292
: 近 97% 的概率应用马赛克数据增强。
(6)其他超参数
iou: 0.7
: NMS(非极大值抑制)的 IOU 阈值设定为 0.7。
max_det: 300
: 每张图片最多检测 300 个目标。
overlap_mask: true
: 启用重叠掩码。
nms: false
: 不使用非极大值抑制。
(7)验证与可视化
val: true
: 启用验证。
split: val
: 验证集的划分方式。
plots: true
: 启用可视化绘图(如损失曲线、检测结果等)。
(8)其他设置
deterministic: true
: 启用确定性设置,确保每次运行结果一致。
fraction: 1.0
: 使用全部数据集进行训练。
seed: 0
: 随机数种子,确保结果可复现。
3. confusion_matrix.png(原始混淆矩阵**)**
-
confusion_matrix.png示意图
**原始混淆矩阵,**用于评估目标检测模型的分类性能。
- 定义:原始混淆矩阵显示的是每个类别的真实标签和预测标签之间的数量关系。矩阵的每个元素表示对应类别的预测结果与实际标签的匹配情况。
- 横轴和纵轴:横轴通常表示模型预测的类别(Predicted Class),纵轴表示实际的类别(True Class)。
- 数值含义:矩阵中的数值表示每个类别的预测次数。例如,(i, j) 位置的数值表示真实类别为 i 的样本被预测为 j 的次数。颜色越深,数值越高,表示预测越准确。
eg:左上角颜色最深的方框,代表它真实类别是car被预测为car的次数是4873次,下面的44代表的是car被预测为background的次数是44。
图像内容解释
- 对角线: 图中从左上到右下的对角线上的数值表示模型正确分类的数量。也就是模型将实际类别为 X 的实例正确预测为 X 的次数。这些数值越大,表示模型在这些类别上的表现越好。
- 非对角线的值: 对角线以外的数值表示模型的误分类情况。即,实际类别为 X 的实例被预测为其他类别的次数。例如,若实际为类别 A 的实例被错误预测为类别 B,那么图中 A 行 B 列的位置会显示这个误分类的次数。
4. confusion_matrix_normalized.png(归一化混淆矩阵)
-
confusion_matrix_normalized.png示意图
-
定义:归一化混淆矩阵是将原始混淆矩阵的数值除以每个类别的总样本数,使得矩阵中的数值反映了每个类别的预测准确率,而不是绝对的样本数。
-
数值含义:归一化后的数值通常是一个百分比,表示每个类别被预测正确的比例。这样可以消除不同类别样本数的差异,便于比较模型在各个类别上的表现。
-
每列的数值总和为 1 :每列的值代表了该行真实类别的实例中,模型对这些实例的预测分布。例如,第一列分别是car=0.99、background=0.01,0.99表示car类别的 99% 实例被正确预测为car类别,其余的比例分布在background类别中。
归一化混淆矩阵的作用
- 比较不同类别的表现: 归一化后,容易比较不同类别的识别率。它消除了因类别数量不均衡带来的影响,使得每个类别的表现都可以以相对比例的方式展现。
- 突出误分类模式: 可以更清晰地看到模型在哪些类别上的识别性能较弱,例如某些类别的误分类比例可能很高。
- 改进模型: 通过查看各类别的归一化值,可以了解模型在哪些类别上表现较差,从而调整数据集或模型参数,以改进性能。
5.events.out.tfevents.*(事件文件)
该文件是由 TensorBoard 生成的事件文件,用于记录训练过程中的相关指标和数据。这些文件可以用 TensorBoard 工具进行可视化分析。
events.out.tfevents.1732094557.8e700628e632.13562.0
(1)文件用途
1)记录训练过程:包含训练和验证期间的所有指标(例如,损失值、学习率、精度等)。
2)可视化数据:通过 TensorBoard,可以用图表直观地查看训练动态,比如损失曲线、mAP 曲线、学习率变化等。
(2)文件名结构
文件名通常是以下格式:
events.out.tfevents.<时间戳>.<主机名>.<进程ID>.0
<时间戳>
:文件生成的时间戳,表示文件的创建时间。
<主机名>
:运行训练任务的主机名或 Docker 容器 ID。
<进程ID>
:训练运行时所在的进程标识符。
(3)文件内容
文件内容是以二进制形式存储的,不能直接查看,但包含以下关键信息:
1)训练指标:
- 训练和验证的损失值(分类损失、定位损失、总损失等)。
- 精度和召回率。
- mAP(Mean Average Precision)。
2)学习率:训练过程中每一步的学习率变化。
3)其他元数据:
- 超参数信息。
- 环境信息(GPU、CUDA 版本等)。
- 数据集信息。
如何使用TensorBoard查看文件内容
(1)安装 TensorBoard
pip install tensorboard
(2)启动 TensorBoard 并指定日志目录
tensorboard --logdir run/detect/train
注:这里需要说明为什么笔者的命令多了两个参数port和bind_all
笔者是在服务器上容器中运行此命令,docker容器启动时,指定的端口参数是 -p 8030:5000,即宿主机的端口8030映射到容器内的端口 5000,所以这里我在浏览器中输入的是http://服务器IP:8030。
这里有不懂的读者可以查一下docker端口映射,这里不再赘述。
(3)打开浏览器访问 TensorBoard 地址(通常是 http://localhost:6006)
鼠标放在曲线上,可以查看该点的详细信息。
6. F1_curve.png(F1分数)
-
F1_curve.png示意图
-
all classes 0.77 at 0.494
由图可知,当confidence为0.494时,all classes的F1分数为0.77;表示该模型在0.494的置信度预测类时整体表现良好,具有一定的准确性和召回率。
-
什么是F1分数?
F1分数是精确率(Precision)和召回率(Recall)的调和平均值,它同时考虑了模型预测的准确性和覆盖面。F1分数的范围从0到1,其中1表示模型的精确率和召回率都是完美的,而0则表示模型的精确率或召回率至少有一个非常差。
-
什么是精确率和召回率?
精确率是指模型正确预测正类的比例,而召回率是指模型正确识别出所有正类的比例。在某些情况下,我们可能更关注其中一个指标,比如在某些医疗诊断应用中,我们可能更希望减少假阴性(即提高召回率),因为漏诊可能会带来严重的后果。但在大多数情况下,我们希望模型在这两个方面都有很好的表现,这时候F1分数就是一个很好的综合评价指标。
-
什么是假阴性?
- 真阳性(True Positives, TP): 正确识别出的目标。
- 假阳性(False Positives, FP): 错误地将其他类别预测为目标类别的实例数。
- 假阴性(False Negatives, FN): 实际为目标类别的实例被错误地预测为其他类别的数量。
这里怎么计算另出一期文章详细讲解,这里只停留在解释是什么。
7. labels.jpg(数据集信息)
这里说明下数据集:car代表车、其余代表不同颜色的车牌。
-
labels.jpg示意图
-
用于展示训练数据集中的标签分布情况,帮助理解数据集的类别分布和标签的几何特性。
(1)类别分布图(左上图)
含义: 展示不同类别的目标数量分布情况。
横坐标 (Class IDs): 类别 ID(通常是从 0 开始的整数),表示数据集中各个类别。
纵坐标 (Count): 每个类别的目标数量,表示该类别在数据集中出现的次数。
作用: 可以帮助检测是否存在类别不平衡问题,例如某些类别数量过多,而另一些类别数量稀少。这可能会影响模型的学习效果。
分析图片可知:数据集中的物体类型不平衡,车是最常见的类别,而其他颜色和物体的出现频率较低。这个不平衡可能影响模型的训练效果,尤其是对于较少出现的类别。
(2)目标框中心坐标分布图 (左下图)
含义: 展示所有目标框的中心点在图像中的分布情况。
横坐标 (X): 目标框的中心点在图像宽度方向上的归一化坐标。
纵坐标 (Y): 目标框的中心点在图像高度方向上的归一化坐标。
作用: 通过查看目标框的中心点分布,可以了解目标物体在图像中的位置分布。如果目标中心点集中在图像的某些区域,可能说明数据采集存在偏差。理想情况下,中心点应该较为均匀分布在整个图像中。
分析图片可知:物体的水平和垂直位置集中在图像的左下方。表明数据集中的物体在图像中的位置有一定偏向,可能是因为标注过程中或数据收集的偏差。
(3)目标框尺寸分布图(右下图)
含义: 展示了物体的尺寸(宽度和高度)。
坐标: 表示物体的宽度,归一化到0到1之间。
- 0表示物体的宽度接近于图像的最窄。
- 1表示物体的宽度接近图像的最宽。
作用: 通过观察宽度的分布,可以了解数据集中的物体尺寸,是否有很多大物体,或者大部分物体较小。
分析图片可知:数据集中的物体普遍较小,只有少量物体较大。这种尺寸分布对模型的训练可能有一定影响,尤其是对于小物体检测的能力。
(4)目标框分布图 (右上图)
目标框也可以说是物体的大小。
含义: 展示所有目标框分布情况。
作用: 可以了解目标物体的大小尺寸。如果目标框的分布过于集中,可能导致模型在特定尺度上的表现优于其他尺度。
分析图片可知:物体位置集中在图像中央,表明数据集中的物体常常居中显示,图像中可能没有很多物体出现在边缘。这样可能会影响模型的泛化能力,尤其是在实际应用中,物体可能会出现在图像的边缘。
分析labels.jpg作用
- 数据质量评估: 通过
labels.jpg
,可以快速了解数据集标签的分布情况,是否存在数据不均衡、目标框过大或过小等问题。 - 数据增强决策: 根据标签分布,可以决定是否对数据进行增强或采样,例如通过数据增强增加小目标或稀有类别的数量。
8. labels_correlogram.jpg(标签相关图)
中心点横纵坐标以及框的高宽间的关系,通过分析这类图,可以更好地理解数据集的特征,为模型训练和优化提供依据。例如,可能需要针对物体较小和分布偏左的问题采取数据增强或调整模型结构。
注:若有不足错误之处,请各位读者批评指正。
-
labels_correlogram.jpg示意图
-
主对角线上的柱状图:展示每个变量的分布。
-
非主对角线上的散点图:展示两个变量之间的关系。
(1)主对角线上的柱状图:单变量分布
每个主对角线上的图是该变量的直方图,展示了该变量的分布情况:
1)x(水平位置):这个图显示了物体在图像中水平位置的分布情况,x 值从 0 到 1,0 代表图像的最左边,1 代表最右边。
从图上看:x 值大部分集中在 0 .5到 1之间,说明大多数物体位于图像的右半部分。
2)y(垂直位置):这个图展示了物体在垂直方向上的位置分布。
从图上看:y 值大部分集中在 0 到 0.5 之间,表明大多数物体位于图像的下半部分。
3)width(宽度):这个图展示了物体宽度的分布。宽度从 0 到 1 表示物体宽度的相对值。
从图上看:物体宽度大多数集中在 0 到 0.3 之间,说明该数据集中大多数物体的宽度较小。
4)height(高度):这个图展示了物体的高度分布。
从图上看:y 值大多数集中在 0 到 0.2 之间,表明大部分物体的高度较小。
(2)非主对角线上的散点图:变量之间的关系
非主对角线上的每个图展示了两个变量之间的散点图,它们分别展示了两个变量之间的关系:
1)x 和 y:这张散点图展示了物体的水平位置 (x
) 与垂直位置 (y
) 之间的关系。
从图上看:大部分点集中在右下区域,说明大部分物体出现在图像的右下区域。
2)x 和 width:这个散点图展示了物体的水平位置 (x
) 和物体的宽度 (width
) 之间的关系。
从图上看:x
值较小的区域通常对应较小的 width
值,说明在图像的左侧,大部分物体较窄,且成正比。
3)x 和 height:该图展示了物体的水平位置 (x
) 和物体的高度 (height
) 之间的关系。
从图上看:散点图没有显示出明显的模式,这可能表明物体的高度与水平位置之间的关系较弱。
4)y 和 width:展示了物体的垂直位置 (y
) 和物体的宽度 (width
) 之间的关系。
从图上看:大部分物体的宽度较小,并且这些物体的垂直位置 (y
) 值较小(位于图像下半部分)。
5)y 和 height:该图展示了物体的垂直位置 (y
) 和物体的高度 (height
) 之间的关系。
从图上看:表现出一定的相关性,y小于0.5时, y
值较小的地方,物体的高度较小;y大于0.5时,y
值较大的地方,物体的高度较小。;y=0.5左右时,物体的高度都比较高。
6)width 和 height:展示了物体的宽度 (width
) 和高度 (height
) 之间的关系。
从图上看:较大物体通常具有较大的宽度和高度。这个图显示了这两个属性之间的正相关性。
9. P_curve.png(精确率曲线)
-
P_curve.png示意图
-
图中的深蓝色折线代表整体的精度,随着置信度的增加,精确度也增加,在置信度为0.945时,精确度达到了1。 其余7条线分别表示7个类别在不同的置信度下的精度
精确率曲线,帮助分析模型在检测任务中的表现,特别是在不同置信度设置下的精确性表现。通过这条曲线,可以选择合适的置信度阈值,以优化模型的检测结果,平衡精确率和召回率。
10. PR_curve.png(精确率-召回率曲线)
-
PR_curve.png示意图
-
图中的曲线为Precision-Recall Curve(精确度-召回率曲线),展示了不同阈值下分类器的精确度和召回率。具体来说,横轴表示Recall(召回率),范围从0.0到1.0;纵轴表示Precision(精确度),范围从0.0到1.0。图中主要有两条曲线:
(1)彩色线代表7个类别的精确度-召回率曲线,每个类别的精确度各有差异。
(2)深蓝色线代表所有类别的平均精确度-召回率曲线,其精确度也在0.816左右保持稳定。
这两条曲线都显示了随着召回率的增加,精确度略有下降的趋势,但整体上精确度保持在很高的水平。
通过这条曲线,可以评估模型在目标检测任务中的整体性能,并找到合适的置信度阈值,以在精确率和召回率之间做出最佳平衡。PR 曲线越接近右上角,模型性能越好,曲线下方的面积越大,说明模型在不同置信度下的表现越稳定。
11. R_curve.png(召回率曲线)
-
PR_curve.png示意图
-
图中的R曲线为Recall-Confidence Curve(召回率-置信度曲线),它展示了不同置信度下的召回率。具体来说,横轴表示置信度,从0.0到1.0;纵轴表示召回率,从0.0到1.0。图中主要有8条曲线:
(1)7条彩色线:代表7个类别的召回率随置信度的变化情况。这条曲线显示了随着置信度的增加,每个类别的召回率先变化较小,然后在某个点之后迅速下降。
(2)深蓝色线:代表所有类别的平均召回率随置信度的变化情况。
展示模型在不同的置信度阈值(confidence thresholds)下的召回率表现。召回率曲线帮助评估模型在目标检测任务中,检测到真正目标的能力。通过这条曲线,用户可以评估模型的检测能力,分析模型在不同阈值下对真实目标的检测是否全面。如果召回率曲线在较低的置信度下表现较好,说明模型可以有效检测大多数目标;如果曲线下降较快,可能需要调整模型或数据集,避免漏检问题。
12. results.csv(训练指标结果)
-
results.csv示意图
-
记录了每个训练 epoch 的详细信息,包括每轮训练的指标和结果:
- epoch:当前的训练轮次(epoch),即模型训练的迭代次数。
- time:训练时间,通常指每个 epoch 的训练所花费的时间。
- train/box_loss:训练阶段的边框损失(box loss),衡量预测框与真实框之间的差异。
- train/cls_loss:训练阶段的分类损失(class loss),衡量预测类别与真实类别之间的差异。
- train/dfl_loss:训练阶段的分布式标签损失(distribution focal loss),用于改善分类和边框回归的性能。
- metrics/precision(B):在训练过程中,模型的精确度(precision),B 表示基于边界框的精度计算。
- metrics/recall(B):在训练过程中,模型的召回率(recall),B 表示基于边界框的召回计算。
- metrics/mAP50(B):在训练过程中,模型在 IOU=0.5 时的平均精度均值(mAP50),B 表示基于边界框的计算。
- metrics/mAP50-95(B):在训练过程中,模型在 IOU=0.5 到 0.95 范围内的平均精度均值(mAP50-95),B 表示基于边界框的计算。
- val/box_loss:验证阶段的边框损失(box loss),衡量预测框与真实框之间的差异。
- val/cls_loss:验证阶段的分类损失(class loss),衡量预测类别与真实类别之间的差异。
- val/dfl_loss:验证阶段的分布式标签损失(distribution focal loss)。
- lr/pg0:第一个学习率组(通常是最小的学习率)的学习率。
- lr/pg1:第二个学习率组的学习率。
- lr/pg2:第三个学习率组的学习率。
这些参数能够帮助评估模型训练过程中各项指标的变化,进而调整训练策略。
13. results.png(结果指标曲线)
-
results.png示意图
-
这个图像文件,显示了训练过程中关键指标(如损失、mAP)的变化趋势。
-
box_loss:定位损失曲线。
- 含义:边界框损失,衡量预测的边界框与真实边界框之间的误差。包括边界框的中心位置、宽度、高度等。
- 图表:通常显示为训练轮次或步数上的损失值曲线,较低的损失值表明模型对边界框的预测更加准确。
-
dfl_loss:目标检测损失曲线。
-
含义:分布式定位损失(Distribution Focal Loss),处理定位任务中的类别不平衡问题。帮助模型更加关注难以预测的目标。
-
图表:显示为训练轮次或步数上的损失值曲线,较低的损失值表示分布式定位任务的效果较好。
-
什么是dfl(分布式定位损失)?
分布式定位损失(Distribution Focal Loss, DFL)是一种用于物体检测任务的损失函数,旨在改进目标检测模型的定位精度。它是一种对目标检测任务中的定位错误进行加权的方法,特别是针对难以预测的目标区域。
-
-
cls_loss:分类损失曲线。
- 含义:类别损失,衡量预测的类别标签与真实类别标签之间的差距。反映了分类器的准确性。
- 图表:显示为训练轮次或步数上的损失值曲线,较低的损失值表示分类器性能较好。
-
Precision (B):精度曲线
- 含义:精确度(B类),表示模型预测的正样本中有多少比例是真正的正样本。B类通常是指背景类。
- 图表:显示为训练轮次或步数上的精确度曲线,较高的精确度表示模型在背景类检测中的准确性较高
-
Recall (B):召回率曲线
- 含义:召回率(B类),表示模型检测到的实际正样本中的比例。B类通常是指背景类。
- 图表:显示为训练轮次或步数上的召回率曲线,较高的召回率表示模型对背景类的检测能力较强。
-
**mAP50 (B):**IoU 阈值为 0.5 时的平均精度
- 含义:在IoU(Intersection over Union)阈值为0.5时的平均精度(B类),反映了模型在此IoU阈值下的精度。
- 图表:显示为训练轮次或步数上的mAP50值曲线,较高的mAP50值表示模型在背景类的检测精度较高。
-
mAP50-95 (B): IoU 阈值在 0.5 到 0.95 之间的平均精度
- 含义:在IoU阈值从0.5到0.95范围内的平均精度(B类),评估模型在不同IoU阈值下的检测性能。
- 图表:显示为训练轮次或步数上的mAP50-95值曲线,较高的mAP50-95值表示模型在背景类的整体性能较强。
-
14. train_batchX.jpg(X 表示 batch 序号)
-
train_batchX.jpg示意图
-
这些图像文件,显示了在训练过程中对某些批次(batch)的图像进行检测后的结果,通常用于展示训练中预测的效果。
-
图像上标注了模型预测的边界框、类别和置信度。这些图像用于直观了解模型在训练过程中的表现。
15. val_batchX_labels.jpg
-
val_batchX_labels.jpg示意图
-
这些图像文件显示了验证集中某些图像的真实标签,即图像中标注的目标的真实边界框和类别信息。
-
这些文件主要用于与预测结果进行对比,以观察模型在验证集上的表现。
16. val_batchX_pred.jpg
-
val_batchX_pred.jpg示意图
-
这些图像文件显示了验证集中某些图像的预测标签,模型经过训练后的预测结果,代表模型在图像中识别到的目标及其位置。
总结:这篇文章是笔者初学yolo时记录的训练结果文件解析,学习东西要知其然并知其所以然;文中有些涉及到公式等并没有详细介绍,如损失函数计算,有机会专门出一期跟大家分享,整理不易,可能有不正确之处,希望各位读者批评指正,共同成长!
标签:run,训练,detrct,模型,曲线,召回,train,类别,物体 From: https://blog.csdn.net/weixin_48870215/article/details/144117609