【YOLOv8训练结果评估】YOLOv8如何使用训练好的模型对验证集进行评估及评估参数详解

简介: 【YOLOv8训练结果评估】YOLOv8如何使用训练好的模型对验证集进行评估及评估参数详解

前言

最近很多粉丝问我,自己已经训练好了一个YOLO模型,如何对使用验证集对这个训练好的模型进行结果评估呢?

本文将以YOLOv8的目标检测为例,详细介绍如何使用其对验证集进行评估,以判断模型的好坏,并对各个参数进行详细说明;同时我们也可以用改进后的模型对验证集进行评估,以对比改进后模型的性能改变以及提升的大小。

希望对大家有所帮助,如果有什么其他相关问题,欢迎评论留言,问的多的话,我就写篇文章统一解答。

1.对验证集进行评估

具体评估代码如下:

#coding: utf-8
from ultralytics import YOLO
import matplotlib
matplotlib.use( "TkAgg")
if __name__ == '__main__':
    #加载训练好的模型
    model = YOLO('models/best.pt')
    # 对验证集进行评估
    metrics = model.val(data = 'datasets/SteelData/data.yaml')

其中models/best.pt是已经训练好的yolov8模型文件,datasets/SteelData/data.yaml是模型训练时,使用的数据集配置文件。

model.val()可选参数说明:

运行上述代码后,打印结果如下:

打印表格参数说明:

class:代表模型检测的类别名称;

Images:代表验证集图片总数;

Instances:代表每个类别目标所标注的总数;

P:代表精确率Precision=TP / (TP+FP), 在预测是Positive所有结果中,预测正确的比重

R:召回率recall=TP / (TP+FN), 在真实值为Positive的所有结果中,预测正确的比重

mAP50:表示IOU阈值大于0.5的平均精确度(Mean Average Precision, mAP)

mAP50-95:表示在不同IoU阈值(从0.5到0.95,步长0.05)(0.5、0.55、0.6、0.65、0.7、0.75、0.8、0.85、0.9、0.95)上的平均mAP

其中第一行all对应的参数P、R、mAP59、mAP50-95表示所有类别对应参数的平均值。其他行的数值为具体类别所对应的评估参数。

运行上述代码后,同时也会在训练结果目录下生成val目录:

val里面的具体内容文件如下:

2.评估结果说明

confusion_matrix_normalized.png和confusion_matrix.png

confusion_matrix_normalized.png和confusion_matrix.png表示各个类别对应的混淆矩阵,其中confusion_matrix_normalized.png表示归一化后的混淆矩阵,confusion_matrix.png表示各类别数值对应的混淆矩阵。

行是预测类别(y轴),列是真实类别(x轴)

混淆矩阵以矩阵形式将数据集中的记录按照真实的类别与分类模型预测的类别判断两个标准进行汇总。其中矩阵的行表示真实值,矩阵的列表示预测值。

TP(True Positive): 将正类预测为正类数 即正确预测,真实为0,预测也为0

FN (False Negative):将正类预测为负类 即错误预测,真实为0,预测为1

FP(False Positive):将负类预测为正类数 即错误预测, 真实为1,预测为0

TN (True Negative):将负类预测为负类数,即正确预测,真实为1,预测也为1

混淆矩阵是对分类问题预测结果的总结。使用计数值汇总正确和不正确预测的数量,并按每个类进行细分,显示了分类模型进行预测时会对哪一部分产生混淆。通过这个矩阵可以方便地看出机器是否将两个不同的类混淆了,把一个类错认成了另一个。

P_curve.png(准确率曲线)

表示准确率precision和置信度confidence的关系图,其中细线代表每个类别的精度曲线,粗线代表所有类别平均精度曲线。当判定概率超过置信度阈值时,各个类别识别的准确率。当置信度越大时,类别检测越准确,但是这样就有可能漏掉一些判定概率较低的真实样本。

意思就是,当我设置置信度为某一数值的时候,各个类别识别的准确率。可以看到,当置信度越大的时候,类别检测的越准确。这也很好理解,只有confidence很大,才被判断是某一类别。但也很好想到,这样的话,会漏检一些置信度低的类别。

R_curve.png(召回率曲线)

表示召回率recall和置信度confidence之间的关系,其中细线代表每个类别的召回率曲线,粗线代表所有类别平均召回率曲线。

recall(召回率)表示真实为positive的准确率,即正样本有多少被找出来了(召回了多少)。

当置信度越小的时候,类别检测的越全面(不容易被漏掉,但容易误判)。

PR_curve.png(PR曲线)

PR曲线表示体现精确率和召回率的关系,其中细线代表每个类别的PR曲线,粗线代表所有类别平均PR曲线。

P代表的是precision(精准率),R代表的是recall(召回率)。一般情况下,将recall设置为横坐标,precision设置为纵坐标。PR曲线下围成的面积即AP,所有类别AP平均值即mAP.因此我们希望:在准确率很高的前提下,尽可能的检测到全部的类别。因此希望我们的曲线接近(1,1),即希望PR曲线的面积尽可能接近1。

如果PR图的其中的一个曲线A完全包住另一个学习器的曲线B,则可断言A的性能优于B,当A和B发生交叉时,可以根据曲线下方的面积大小来进行比较。一般训练结果主要观察精度和召回率波动情况(波动不是很大则训练效果较好)

Precision和Recall往往是一对矛盾的性能度量指标;及一个的值越高另一个就低一点。

F1_curve.png(F1曲线)

表示是置信度confidence与F1之间的关系曲线。一般来说,置信度阈值(该样本被判定为某一类的概率阈值)较低的时候,很多置信度低的样本被认为是真,召回率高,精确率低;置信度阈值较高的时候,置信度高的样本才能被认为是真,类别检测的越准确,即精准率较大(只有confidence很大,才被判断是某一类别),所以前后两头的F1分数比较少。

F1参数是精确率P和召回率R的调和平均数。一些多分类问题的竞赛,常常将F1-score作为最终测评的方法。它是精确率和召回率的调和平均数,最大为1,其中1是最好,0是最差。

val_batch0_labels与val_batch0_pred

val_batch0_labels.png表示验证集真实的标签情况示例。

val_batch0_pred.png表示模型预测出的标签图片。可以对比查看模型预测情况。

其他

有时在使用自己的算法对数据集的精度进行提高时,发现mAP50的值已高达90以上,那对我们来说改进是很难的,就需要提高mAP75或mAP95的值来验证算法的有效性。下面介绍如何直接得到mAP75或mAP95的具体数值:

mAP的计算基于不同的IoU(交并比)阈值。常见的阈值包括0.5、0.75和0.9等。mAP50指的是使用IoU阈值为0.5时的mAP,它主要衡量了模型对目标的边界定位准确性。而mAP75和mAP90则使用更严格的IoU阈值,分别为0.75和0.9。

可以通过metrics = model.val(data = 'datasets/SteelData/data.yaml')得到的结果,查看不同mAP的具体值,代码如下:


相关文章
|
机器学习/深度学习 计算机视觉 网络架构
改进YOLOv8:添加CBAM注意力机制(涨点明显)
改进YOLOv8:添加CBAM注意力机制(涨点明显)
7598 1
|
机器学习/深度学习 编解码 监控
目标检测实战(六): 使用YOLOv8完成对图像的目标检测任务(从数据准备到训练测试部署的完整流程)
这篇文章详细介绍了如何使用YOLOv8进行目标检测任务,包括环境搭建、数据准备、模型训练、验证测试以及模型转换等完整流程。
20841 59
目标检测实战(六): 使用YOLOv8完成对图像的目标检测任务(从数据准备到训练测试部署的完整流程)
|
9月前
|
机器学习/深度学习 数据可视化 算法
YOLOv8改进目录一览 | 涉及卷积层、轻量化、注意力、损失函数、Backbone、SPPF、Neck、检测头等全方位改进
YOLOv8改进目录一览 | 涉及卷积层、轻量化、注意力、损失函数、Backbone、SPPF、Neck、检测头等全方位改进
1175 6
YOLOv8改进目录一览 | 涉及卷积层、轻量化、注意力、损失函数、Backbone、SPPF、Neck、检测头等全方位改进
|
XML 机器学习/深度学习 数据格式
YOLOv8训练自己的数据集+常用传参说明
YOLOv8训练自己的数据集+常用传参说明
21134 3
|
机器学习/深度学习 人工智能 文字识别
ultralytics YOLO11 全新发布!(原理介绍+代码详见+结构框图)
本文详细介绍YOLO11,包括其全新特性、代码实现及结构框图,并提供如何使用NEU-DET数据集进行训练的指南。YOLO11在前代基础上引入了新功能和改进,如C3k2、C2PSA模块和更轻量级的分类检测头,显著提升了模型的性能和灵活性。文中还对比了YOLO11与YOLOv8的区别,并展示了训练过程和结果的可视化
19868 0
|
XML 数据格式 Python
将xml标签转换为txt(voc格式转换为yolo方便进行训练)
该文章提供了一个Python脚本,用于将VOC格式的XML标签文件转换为YOLO训练所需的TXT格式,包括修改数据集类别、输入图像与标注文件夹地址、转换过程和结果展示。
将xml标签转换为txt(voc格式转换为yolo方便进行训练)
|
机器学习/深度学习 编解码 算法
YOLOv8改进 | 主干网络 | 增加网络结构增强小目标检测能力【独家创新——附结构图】
YOLOv8在小目标检测上存在挑战,因卷积导致信息丢失。本文教程将原网络结构替换为更适合小目标检测的backbone,并提供结构图。通过讲解原理和手把手教学,指导如何修改代码,提供完整代码实现,适合新手实践。文章探讨了大特征图对小目标检测的重要性,如细节保留、定位精度、特征丰富度和上下文信息,并介绍了FPN等方法。YOLOv8流程包括预处理、特征提取、融合和检测。修改后的网络结构增加了上采样和concatenate步骤,以利用更大特征图检测小目标。完整代码和修改后的结构图可在文中链接获取。
|
机器学习/深度学习
YOLOv8的多分类模型如何计算准确率(Accuracy)、精确率(Precision)、召回率(recall)和F1-Score模型评估参数
YOLOv8的多分类模型如何计算准确率(Accuracy)、精确率(Precision)、召回率(recall)和F1-Score模型评估参数
|
算法 Go vr&ar
YOLOv8模型yaml结构图理解(逐层分析)
YOLOv8模型yaml结构图理解(逐层分析)
18429 0
|
机器学习/深度学习 算法 计算机视觉
YOLOv8改进 | 融合模块 | 用Resblock+CBAM卷积替换Conv【轻量化网络】
在这个教程中,介绍了如何将YOLOv8的目标检测模型改进,用Resblock+CBAM替换原有的卷积层。Resblock基于ResNet的残差学习思想,减少信息丢失,而CBAM是通道和空间注意力模块,增强网络对特征的感知。教程详细解释了ResNet和CBAM的原理,并提供了代码示例展示如何在YOLOv8中实现这一改进。此外,还给出了新增的yaml配置文件示例以及如何注册模块和执行程序。作者分享了完整的代码,并对比了改进前后的GFLOPs计算量,强调了这种改进在提升性能的同时可能增加计算需求。教程适合深度学习初学者实践和提升YOLO系列模型的性能。