1. 简介
这篇博客, 主要给大家讲解我们在训练yolov8时生成的结果文件中各个图片及其中指标的含义 ,帮助大家更深入的理解,以及我们在评估模型时和发表论文时主要关注的参数有那些。
2.评估用的数据集
这个训练结果是基于VisDrone2019-DET数据集进行检测训练得到的。VisDrone2019-DET是一个广泛用于无人机图像目标检测的标准数据集,它包含了各种复杂的场景和目标,包括行人、车辆、自行车等。训练过程中,我们使用了该数据集的图像和标注信息,采用了深度学习的目标检测模型来进行训练。
3. 结果分析
我们可以从结果文件中看到其中 共有文件24个 ,后12张图片是根据我们训练过程中的一些检测结果图片,用于我们可以观察检测结果,有哪些被检测出来了,那些没有被检测出来,其不作为指标评估的文件。
3.1 Weights文件夹
我们先从第一个weights文件夹来分析,其中有两个文件,分别是 best.pt、last.pt ,其分别为训练过程中的损失最低的结果和模型训练的最后一次结果保存的模型。
3.2 args.yaml
第二个文件是args.yaml文件,其中主要保存一些我们训练时指定的参数,内容如下所示。
task: detect
mode: train
model: ultralytics/cfg/models/v8/yolov8-SPDConv.yaml
data: ultralytics/cfg/dataset/VisDrone.yaml
epochs: 240
time: null
patience: 50
batch: 4
imgsz: 640
save: true
save_period: -1
cache: false
device: 1
workers: 8
project: VisDrone
name: yolov8-SPDConv
exist_ok: false
pretrained: true
optimizer: auto
verbose: true
seed: 0
deterministic: true
single_cls: false
rect: false
cos_lr: false
close_mosaic: 10
resume: false
amp: true
fraction: 1.0
profile: false
freeze: null
multi_scale: false
overlap_mask: true
mask_ratio: 4
dropout: 0.0
val: true
split: val
save_json: false
save_hybrid: false
conf: null
iou: 0.7
max_det: 300
half: false
dnn: false
plots: true
source: null
vid_stride: 1
stream_buffer: false
visualize: false
augment: false
agnostic_nms: false
classes: null
retina_masks: false
embed: null
show: false
save_frames: false
save_txt: false
save_conf: false
save_crop: false
show_labels: true
show_conf: true
show_boxes: true
line_width: null
format: torchscript
keras: false
optimize: false
int8: false
dynamic: false
simplify: false
opset: null
workspace: 4
nms: false
lr0: 0.01
lrf: 0.01
momentum: 0.937
weight_decay: 0.0005
warmup_epochs: 3.0
warmup_momentum: 0.8
warmup_bias_lr: 0.1
box: 7.5
cls: 0.5
dfl: 1.5
pose: 12.0
kobj: 1.0
label_smoothing: 0.0
nbs: 64
hsv_h: 0.015
hsv_s: 0.7
hsv_v: 0.4
degrees: 0.0
translate: 0.1
scale: 0.5
shear: 0.0
perspective: 0.0
flipud: 0.0
fliplr: 0.5
mosaic: 1.0
mixup: 0.0
copy_paste: 0.0
auto_augment: randaugment
erasing: 0.4
crop_fraction: 1.0
cfg: null
tracker: botsort.yaml
save_dir: VisDrone/yolov8-SPDConv
3.3 混淆矩阵(ConfusionMatrix)
第三个文件就是混淆矩阵,大家都应该听过这个名字,其是一种用于评估分类模型性能的表格形式。它以实际类别(真实值)和模型预测类别为基础,将样本分类结果进行统计和汇总。
这张混淆矩阵图显示了YOLOv8模型在VisDrone2019-DET数据集上的检测结果。以下是对这张混淆矩阵的解读:
- 对角线元素:表示模型正确预测的数量。例如,在"car"类别中,模型正确预测了10,343次。
- 非对角线元素:表示模型错误预测的数量。例如,在实际类别为"car"的情况下,模型误将其预测为"van" 736次。
各类别的具体分析:
- pedestrian (行人):
- 正确预测:2914次
- 误判为"people":299次
- 误判为"background":1100次
people (人群):
- 正确预测:1041次
- 误判为"pedestrian":185次
- 误判为"background":409次
bicycle (自行车):
- 正确预测:145次
- 误判为"background":210次
car (汽车):
- 正确预测:10343次
- 误判为"van":736次
- 误判为"background":1621次
van (面包车):
- 正确预测:655次
- 误判为"car":226次
- 误判为"background":304次
truck (卡车):
- 正确预测:211次
- 误判为"background":112次
tricycle (三轮车):
- 正确预测:241次
- 误判为"background":162次
awning-tricycle (棚式三轮车):
- 正确预测:59次
- 误判为"background":67次
bus (公交车):
- 正确预测:116次
- 误判为"background":30次
motor (摩托车):
- 正确预测:1774次
- 误判为"bicycle":136次
- 误判为"background":788次
background (背景):
- 正确预测:2872次
- 误判为"pedestrian":5664次
- 误判为"people":3643次
- 误判为"car":3444次
理解YOLOv5的混淆矩阵对于评估模型性能和识别模型错误预测的模式非常重要。下面是一个详细的解读步骤,结合具体的例子说明如何分析和理解混淆矩阵。
混淆矩阵的行表示实际类别(True),列表示预测类别(Predicted)。在YOLOv8的混淆矩阵中,每个单元格 (M_{ij}) 表示模型将实际类别 (i) 的样本预测为类别 (j) 的次数。
- 对角线元素:这些元素代表模型正确分类的数量。对角线上的数值越高,说明模型对该类别的预测越准确。
- 非对角线元素:这些元素代表模型错误分类的数量。通过查看这些元素,可以识别出哪些类别之间容易混淆。
- 行的总和:每一行的总和表示该实际类别的总样本数。
- 列的总和:每一列的总和表示模型预测为该类别的总次数。
3.4 混淆矩阵归一化(Confusion Matrix Normal)
这个混淆矩阵的归一化,就是对混淆矩阵做了一个归一化处理,对混淆矩阵进行归一化可以将每个单元格的值除以该类别实际样本数,从而得到表示分类准确率的百分比。这种标准化使得我们可以直观地比较类别间的分类准确率,并识别出模型在哪些类别上表现较好或较差。
3.5 计算mAP、Precision、Recall
在讲解其它的图片之前我们需要来计算三个比较重要的参数,这是其它图片的基础,这里的计算还是利用上面的某一批次举例的分析结果。
精确度(Precision): 预测为正的样本中有多少是正确的 ,Precision = TP / (TP + FP) = 5 / (5 + 1) = 5/6 ≈ 0.833
召回率(Recall): 真实为正的样本中有多少被正确预测为正, Recall = TP / (TP + FN) = 5 / (5 + 8) ≈ 0.385
F1值(F1-Score): 综合考虑精确度和召回率的指标, F1 = 2 * (Precision * Recall) / (Precision + Recall) = 2 * (0.833 * 0.385) / (0.833 + 0.385) ≈ 0.526
准确度(Accuracy): 所有样本中模型正确预测的比例, Accuracy = (TP + TN) / (TP + TN + FP + FN) = (5 + 6) / (5 + 6 + 1 + 8) ≈ 0.565
平均精确度(Average Precision, AP): 用于计算不同类别的平均精确度,对于二分类问题,AP等于精确度。 AP = Precision = 0.833
平均精确度(Mean Average Precision, mAP): 多类别问题的平均精确度,对于二分类问题,mAP等于AP(精确度) ,所以mAP = AP = 0.833
这里需要讲解的主要是AP和MAP如果是多分类的问题,AP和mAP怎么计算,首先我们要知道AP的全称就是Average Precision,平均精度所以我们AP的计算公式如下,其中
P® 表示在不同Recall值下的最大Precision。
mAP就是Mean Average Precision,计算如下,计算每一个没别的AP进行求平均值处理就是mAP。其中 AP© 表示类 c 的平均精度,N(classes) 表示数据集中类的总数。
3.6 F1_Curve
F1_Curve这个文件,我们点击去的图片的标题是F1-Confidence Curve它显示了在不同分类阈值下的F1值变化情况。
先看它的横纵坐标,横坐标是置信度,纵坐标是F1-Score,F1-Score在前面我们以及讲解过了,那什么是置信度?
置信度(Confidence)-> 在我们模型的识别过程中会有一个概率,就是模型判定一个物体并不是百分百判定它是属于某一个分类,它会给予它以个概率,Confidence就是我们设置一个阈值,如果超过这个概率那么就确定为某一分类, 假如我模型判定一个物体由0.7的概率属于飞机,此时我们设置的阈值如果为0.7以下那么模型就会输出该物体为飞机,如果我们设置的阈值大于0.7那么模型就不会输出该物体为飞机。
F1-Confidence Curve就是随着F1-Score随着Confience的逐渐增高而变化的一个曲线。
3.7 Labels
Labels图片代表每个检测到的目标的类别和边界框信息。每个目标都由一个矩形边界框和一个类别标签表示, 我们来看这个图片!!!
- 类别实例分布 (左上图)
柱状图展示了每个类别的实例数量。这对于了解数据集中各类别的分布非常有帮助。
- pedestrian (行人) 和 car (汽车) 是数据集中实例最多的类别,特别是汽车实例明显最多。
- 其他类别如 people (人群), bicycle (自行车), motor (摩托车) 也有一定数量的实例。
- bus (公交车) 和 awning-tricycle (棚式三轮车) 实例数量较少。
- 边界框中心分布 (左下图)
热图展示了目标边界框中心点的分布情况。
- 横轴 (x) 和纵轴 (y) 分别表示图像的宽度和高度归一化坐标。
- 可以看到大部分边界框的中心集中在图像的中间部分,表明目标物体通常出现在图像的中心区域。
- 边界框尺寸分布 (右下图)
散点图展示了目标边界框的宽度和高度的分布情况。
- 横轴 (width) 和纵轴 (height) 分别表示边界框的宽度和高度归一化后的值。
- 可以看到大部分边界框的尺寸集中在较小的范围内,但也有少数较大的边界框。
- 边界框尺寸分布的重叠图 (右上图)
这个图展示了所有边界框的重叠情况,颜色越亮表示重叠的边界框数量越多。
- 可以看到大部分边界框的尺寸较为集中,形成一个中心密集区域。
从上述图中可以看出一下问题:
-
数据不平衡问题:
- 汽车和行人的实例数量远多于其他类别,可能会导致模型在这些类别上表现较好,而在实例较少的类别(如公交车、棚式三轮车)上表现较差。
- 解决方法:可以通过数据增强、采样方法(如欠采样过多的类别或过采样较少的类别)来平衡数据集。
-
目标中心集中在图像中央:
- 目标边界框的中心点主要集中在图像的中部,这可能是数据集拍摄的一个特性。
- 解决方法:可以考虑在数据增强过程中增加目标物体在图像边缘的实例,以提高模型对不同位置目标的检测能力。
-
边界框尺寸的多样性:
- 边界框尺寸主要集中在较小的范围内,但也有一些较大的边界框。
- 解决方法:可以通过调整模型的锚点(anchor boxes)来更好地匹配不同尺寸的目标。
3.8 labels_correlogram
labels_correlogram是一个在 机器学习领域中使用的术语, 它指的是一种图形, 用于显示目标检测算法在训练过程中预测标签之间的相关性 。
具体来说,labels_correlogram是一张 颜色矩阵图 ,它展示了训练集数据标签之间的相关性。它可以帮助我们理解目标检测算法在训练过程中的行为和表现,以及预测标签之间的相互影响。
通过观察labels_correlogram,我们可以了解到目标检测算法在不同类别之间的区分能力,以及对于不同类别的预测精度。此外,我们还可以通过比较不同算法或不同数据集labels_correlogram,来评估算法的性能和数据集的质量。
总之,labels_correlogram是一种有用的工具,可以帮助我们更好地理解目标检测算法在训练过程中的行为和表现,以及评估算法的性能和数据集的质量。
3.9 P_curve
这个图的分析和F1_Curve一样,不同的是关于的是Precision和Confidence之间的关系, 可以看出我们随着置信度的越来越高检测的准确率按理来说是越来越高的。
3.10 R_curve
这个图的分析和F1_Curve一样,不同的是关于的是Recall和Confidence之间的关系, 可以看出我们随着置信度的越来越高召回率的准确率按理来说是越来越低的。
3.11 PR_curve
它显示了在不同分类阈值下模型的精确度(Precision)和召回率(Recall)之间的关系。
PR曲线越靠近坐标轴的右上角,模型性能越好,越能够正确识别正样本,正确分类正样本的Precision值越高,而靠近右侧则说明模型对正样本的识别能力较差,即召回能力较差。
PR曲线的特点是随着分类阈值的变化,精确度和召回率会有相应的改变。通常情况下,当分类模型能够同时保持较高的精确度和较高的召回率时,PR曲线处于较高的位置。当模型偏向于高精确度或高召回率时,曲线则相应地向低精确度或低召回率的方向移动。
PR曲线可以帮助我们评估模型在不同阈值下的性能,并选择适当的阈值来平衡精确度和召回率。对于模型比较或选择,我们可以通过比较PR曲线下方的面积(称为平均精确度均值,Average Precision, AP)来进行定量评估。AP值越大,模型的性能越好。
总结:PR曲线是一种展示分类模型精确度和召回率之间关系的可视化工具,通过绘制精确度-召回率曲线,我们可以评估和比较模型在不同分类阈值下的性能,并计算平均精确度均值(AP)来定量衡量模型的好坏。
3.12 results.csv
results.csv记录了一些我们训练过程中的参数信息,包括损失和学习率等,这里没有什么需要理解大家可以看一看,我们后面的results图片就是根据这个文件绘画出来的。
3.13 results
这个图片就是生成结果的最后一个了,我们可以看出其中标注了许多小的图片包括训练过程在的各种损失,我们主要看的其实就是后面的四幅图mAP50、mAP50-95、metrics/precision、metrics/recall四张图片。
mAP50:mAP是mean Average Precision的缩写,表示在多个类别上的平均精度。mAP50表示在50%的IoU阈值下的mAP值。
mAP50-95:这是一个更严格的评价指标,它计算了在50-95%的IoU阈值范围内的mAP值,然后取平均。这能够更准确地评估模型在不同IoU阈值下的性能。
metrics/precision:精度(Precision)是评估模型预测正确的正样本的比例。在目标检测中,如果模型预测的边界框与真实的边界框重合,则认为预测正确。
metrics/recall:召回率(Recall)是评估模型能够找出所有真实正样本的比例。在目标检测中,如果真实的边界框与预测的边界框重合,则认为该样本被正确召回。
3.14 检测效果图
最后的图片就是检测效果图了,给大家看一下这里没什么好讲解的了。
4. 其它参数
FPS和IoU是目标检测领域中使用的两个重要指标,分别表示每秒处理的图片数量和交并比。
FPS:全称为Frames Per Second,即每秒帧率。它用于评估模型在给定硬件上的处理速度,即每秒可以处理的图片数量。该指标对于实现实时检测非常重要,因为只有处理速度快,才能满足实时检测的需求。
IoU:全称为Intersection over Union,表示交并比。在目标检测中,它用于衡量模型生成的候选框与原标记框之间的重叠程度。IoU值越大,表示两个框之间的相似性越高。通常,当IoU值大于0.5时,认为可以检测到目标物体。这个指标常用于评估模型在特定数据集上的检测准确度。
在目标检测领域中,处理速度和准确度是两个重要的性能指标。在实际应用中,我们需要根据具体需求来平衡这两个指标。
5. 总结
通过综合考虑这些指标的数值,可以评估YOLOv8模型在目标检测任务中的准确性、召回率、速度和边界框质量等性能表现。根据任务需求和实际条件选择最合适的YOLOv8模型和参数配置。