YOLOv5入门 | 重要性能衡量指标、训练结果评价及分析及影响mAP的因素

本文主要是介绍YOLOv5入门 | 重要性能衡量指标、训练结果评价及分析及影响mAP的因素,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在深度学习目标检测领域,YOLOv5成为了备受关注的模型之一。训练结束后,对训练结果的仔细分析至关重要。这就涉及到了重要性能的衡量指标。本文将手把手教学如何进行YOLOv5的结果分析和重要性能指标的参考,以帮助您更好地学习深度学习目标检测YOLO系列的挑战。

我们将重点讨论以下内容:

混淆矩阵,F1分数,查准率,查全率,PR曲线,wandb可视化等

友情提示

记得收藏,以后写论文可能会用到的! 

目录

1. 重要性能衡量指标

1.1 混淆矩阵

 1.2 查准率,查全率,F1-Score

1.3 PR曲线

1.4 AP与mAP

 2. 训练结果评价

2.1权重文件夹——weights 

2.2 混淆矩阵——Confusion Matrix

2.3 F1分数——F1-score

2.4 可视化文件——events.out.tfevents

 2.5 hyp.yaml和opt.yaml

 2.6 P曲线——P_curve

2.7 R曲线——R_curve

2.8 PR曲线——PR_curve

2.9 result——损失函数、mAP可视化结果

2.10 数据集信息——label.jpg

3.影响mAP的因素

4. 优化策略


1. 重要性能衡量指标

1.1 混淆矩阵

混淆矩阵是用于评估分类模型性能的一种表格形式。它将模型的预测结果与真实标签进行比较,并将它们分类为四种不同的情况:真正例 (True Positive, TP)、真负例 (True Negative, TN)、假正例 (False Positive, FP) 和假负例 (False Negative, FN)。

在混淆矩阵中,行表示实际类别,列表示预测类别。这个矩阵的一个简单示例是:

Predicted Negative

Predicted Positive

Actual Negative

TN

FP

Actual Positive

FN

TP

其中:

  • TP(真正例):模型正确地将猫标记为猫的数量。例如,图像中确实有一只猫,而模型也成功地将其检测为
  • TN(真负例):模型正确地将非猫标记为非猫的数量。例如,图像中没有猫,而模型也正确地将其识别为非猫【其他类别】
  • FP(假正例):模型错误地将非猫标记为猫的数量。例如,图像中没有猫,但模型错误地将一只狗误判为猫
  • FN(假负例):模型错误地将猫标记为非猫的数量。例如,图像中有一只猫,但模型未能将其识别为猫

 1.2 查准率,查全率,F1-Score

Metric

Formula

Purpose

准确率 (Accuracy)

(TP+TN)/(TP+TN+FP+FN)

准确率是指模型正确预测的样本数量与总样本数量之比。

精确率 (Precision)

TP / (TP+FP)

评估模型在预测为正例的样本中的准确程度

召回率 (Recall)

TP / (TP+FN)

评估模型对正例的预测能力

F1 分数 (F1 Score)

(2×Precision×Recall) / (Precision+Recall)

综合考虑精确率和召回率的调和平均值,综合评估模型的性能

下图是为了方便查看公式,更加直观 

 具体的例子:

1. 准确率(Accuracy):准确率是指模型正确预测的样本数量占总样本数量的比例。

   举例:在100张图像中,模型正确地识别了80张图像中的对象,那么准确率为80%。

2. 查准率(Precision):查准率是指模型预测为正例的样本中,真正为正例的样本数量占所有预测为正例的样本数量的比例。

   举例:模型预测了20张图像中有猫,但实际上只有15张图像中确实有猫,那么查准率为15/20 = 0.75。

3. 查全率(Recall):查全率是指模型正确预测为正例的样本数量占所有真正为正例的样本数量的比例。

   举例:在100张图像中有50张图像中确实有猫,而模型成功地识别了其中的40张,那么查全率为40/50 = 0.8。

4. F1-Score:F1-Score是查准率和查全率的调和平均值,它综合了查准率和查全率的性能。

   举例:如果一个模型的查准率为0.75,查全率为0.8,那么F1-Score为2 * (0.75 * 0.8) / (0.75 + 0.8) = 0.774。

1.3 PR曲线

在根据测试集数据评估模型时,得到各特征线性组合后的置信度得分,当确定某阈值后,若得分小于阈值则判为负类,否则为正类,计算出此时的Precision和Recall结果并保存。将阈值从大往小调整得到不同阈值下的Precision和Recall,然后以Recall为横坐标,Precision为纵坐标绘制出P-R曲线图。如果检测器的Precision随着Recall的提升而保持较高,也就是说当改变阈值,Precision和Recall仍然很高,则表示性能较优。

PR曲线的横坐标是精确率P,纵坐标是召回率R。评价标准和ROC一样,先看是否平滑。一般来说,在同一测试集,上面的比下面的好。当P和R的值接近时,F1值最大,此时画连接(0,0)和(1,1)的线,线和PRC重合的地方的F1是这条线最大的F1,此时的F1对于PRC就好像AUC对于ROC一样。一个数字比一条线更方便调型。

在目标检测任务中,我们通常通过比较模型的PR曲线来评估它们的性能。如果一个模型的PR曲线完全包含另一个模型的PR曲线,则可以确定前者的性能优于后者。但是,如果两个模型的PR曲线发生交叉,性能的判断就不那么直接了。

在这种情况下,我们可以利用PR曲线中P(查准率)和R(查全率)相等时的平衡点来进行比较,这个点也被称为平衡点(BEP)。平衡点处的查准率和查全率值相等,即P=R。另外,我们也可以使用F1值来评估模型的性能,F1值越大,我们可以认为该模型的性能较好。

F1值的计算公式:F_1 = \frac{2 \times P \times R}{P + R}

通过比较模型的F1值,我们可以更好地评估它们在目标检测任务中的性能表现。

1.4 AP与mAP

平均准确率(Average Precision, AP)和平均精确率 (mAP) 是用于评估目标检测或语义分割等任务性能的指标。

平均准确率 (AP):

AP是指在不同的类别下,模型对每个类别的预测结果计算出的准确率的平均值。在目标检测任务中,通常使用Precision-Recall曲线来计算AP。Precision-Recall曲线显示了在不同召回率下的精确率。

在计算AP时,首先计算Precision-Recall曲线下的面积 (Area Under the Curve, AUC),然后将其作为AP。具体计算公式为:

 AP = \int_{0}^{1} p(r) dr

其中,p(r) 是在召回率 r 处的精确率。

平均精确率 (mAP):

mAP是指在所有类别上计算的AP的平均值。它提供了模型在所有类别上的综合性能评估。

下面是一个简单的例子,假设我们有一个目标检测模型,在三个类别上进行了评估(猫、狗、鸟),每个类别的AP分别为0.8、0.7和0.6。那么mAP为:

mAP = \frac{0.8 + 0.7 + 0.6}{3} = 0.7

这意味着该模型在这三个类别上的平均准确率为0.7。

通过计算AP和mAP,我们可以更全面地评估目标检测模型的性能,而不仅仅是单个类别的性能评估。

 2. 训练结果评价

2.1权重文件夹——weights 

在训练yolov5模型时,通常会保存模型的权重以供后续使用。在PyTorch中,使用`.pt`文件格式保存模型的权重。

1. best.pt:
   best.pt 文件通常保存了训练过程中性能最佳的模型权重。
   这种情况下,“最佳”的定义可以根据任务不同而不同。例如,在目标检测任务中,“最佳”模型可能是在验证集上取得最高精度或其他评价指标的模型。
   best.pt的权重通常在训练过程中周期性地保存,以便跟踪模型的最佳性能。

2. last.pt:
   last.pt文件保存了训练过程中最后一次保存的模型权重。
   这种情况下,“最后”表示训练过程结束时保存的模型权重,而不考虑性能指标如何。
   last.pt的权重可能对应于训练过程中的最后一个时刻或指定的检查点。

这两个文件对于训练过程的管理和模型权重的保存非常重要。在模型训练结束后,可以使用这些权重文件来进行推断、评估或继续训练。

值得注意的是:在恢复训练时,通常应该使用last.pt作为初始权重。这是因为last.pt保存了模型在训练结束时的权重状态,而这个状态很可能是最接近当前训练状态的。

2.2 混淆矩阵——Confusion Matrix

 这是一个关于人物检测的混淆矩阵实验结果。从图中可以看出,当预测为人物时,实际也为人物的概率为0.99;当预测为背景时,实际也为背景的概率为0.01。这表明该模型在人物检测方面具有很高的准确性。

混淆矩阵是一个 n*n 的矩阵,其中 n 表示类别的数量。每行代表实际类别,每列代表模型预测的类别。混淆矩阵的大小取决于所涉及的类别数量,因此可以适用于各种分类任务,无论是二分类还是多分类。

2.3 F1分数——F1-score

从图中可以看出,当confidence为0.652时,all classes的F1分数为0.98;当confidence为1.0时,person的F1分数为1.0。这表明该模型在预测“person”类时表现良好,具有较高的准确性和召回率。然而,对于其他类别,模型的性能可能有所不同。因此,需要进一步的数据分析和调整模型参数来提高其泛化能力。

F1分数是精确率(Precision)和召回率(Recall)的调和平均值,它同时考虑了模型预测的准确性和覆盖面。F1分数的范围从0到1,其中1表示模型的精确率和召回率都是完美的,而0则表示模型的精确率或召回率至少有一个非常差。

精确率是指模型正确预测正类的比例,而召回率是指模型正确识别出所有正类的比例。在某些情况下,我们可能更关注其中一个指标,比如在某些医疗诊断应用中,我们可能更希望减少假阴性(即提高召回率),因为漏诊可能会带来严重的后果。但在大多数情况下,我们希望模型在这两个方面都有很好的表现,这时候F1分数就是一个很好的综合评价指标。

2.4 可视化文件——events.out.tfevents

可以用命令tensorboard打开这个文件

tensorboard --logdir=path/to/log-directory

 这个是用tensorboard打开的,可以滑动每个epoch检测训练的损失,map等各项指标

 2.5 hyp.yaml和opt.yaml

hyp.yaml中是记录的一些训练阶段的超参数

opt.yaml中记录的是使用的模型配置文件,训练数据等常规参数

 2.6 P曲线——P_curve

图中的蓝色折线代表“person”类别,整体趋势为随着置信度的增加,精确度也在增加,在置信度为0.92时,精确度达到了1。

2.7 R曲线——R_curve

图中的R曲线为Recall-Confidence Curve(召回率-置信度曲线),它展示了不同置信度下的召回率。具体来说,横轴表示置信度,从0.0到1.0;纵轴表示召回率,从0.0到1.0。图中主要有两条曲线:
1. 浅蓝色线:代表“person”类别的召回率随置信度的变化情况。这条曲线显示了随着置信度的增加,person类别的召回率先保持不变,然后在某个点之后迅速下降。
2. 深蓝色线:代表所有类别的平均召回率随置信度的变化情况。这条曲线在开始时略低于person类别,但随后两者非常接近,尤其是在置信度大于0.8以后。

2.8 PR曲线——PR_curve

图中的曲线为Precision-Recall Curve(精确度-召回率曲线),展示了不同阈值下分类器的精确度和召回率。具体来说,横轴表示Recall(召回率),范围从0.0到1.0;纵轴表示Precision(精确度),范围从0.0到1.0。图中主要有两条曲线:
1. 浅蓝色线代表“person”类别的精确度-召回率曲线,其精确度在0.994左右保持稳定。
2. 深蓝色线代表所有类别的平均精确度-召回率曲线,其精确度也在0.994左右保持稳定。
这两条曲线都显示了随着召回率的增加,精确度略有下降的趋势,但整体上精确度保持在很高的水平。这表明分类器在识别“person”类别时表现非常出色,具有很高的准确性和稳定性。

2.9 result——损失函数、mAP可视化结果

 这个图片内有YOLOv5的损失,其中损失分为三种

定位损失box loss: YOLO V5使用 GIOU Loss作为bounding box的损失,Box推测为GIoU损失函数均值,box loss的值越小框的位置越准
置信度损失obj loss: 推测为目标检测loss均值,值越小目标检测的越准
分类损失cls loss: 推测为分类loss均值,值越小预测的类别越准
val/boxloss: 验证集bounding box损失
val/obj loss: 验证集目标检测loss均值
val/cls loss: 验证集分类loss均值,我训练时只有person这一类,所以为0【单类别这个值都是0】
mAP@0.5:0.95: 表示在不同的10U阈值(从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
mAP@0.5: 表示阈值大于0.5的平均mAP

result.csv这个文件就是训练过程中一些具体的数值,上面的图片就是这个csv可视化的结果,这里就不仔细介绍了。如果还是不懂的话,可以在评论区问我。

2.10 数据集信息——label.jpg

左上角图

这个图是左上角这个数据集每个类别的数量信心,我这个只有一个类别,大概有5000张图片,作为对比,下图是我之前的实验的图,他有六个类别。

右上角图

右上角图是画的正样本anchor的大小,我的数据集种只有person一个类,大概在图中的标注信息就是张右上角的样子。

下面的两幅图则分别是x和y,w和h的值分布情况,这个就是标注的txt文件里面的一些信息。

3.影响mAP的因素

mAP(Mean Average Precision)是用于评估目标检测模型性能的重要指标之一,它考虑了模型在所有类别上的准确率和召回率的平均值。以下是影响mAP指标的一些重要因素:

1. 目标检测算法的准确性:目标检测算法本身的准确性对mAP指标的影响非常大。准确性包括模型对目标的识别能力和定位能力。

2. 模型的训练数据质量:训练数据的质量直接影响了模型的泛化能力和性能。更丰富、更多样化的训练数据通常可以提高模型的mAP指标。

3. 超参数调优:模型的超参数设置(如学习率、批量大小、优化器等)会影响模型的收敛速度和性能,进而影响mAP指标。

4. 数据增强策略:合适的数据增强策略(如随机裁剪、旋转、缩放等)可以增加训练数据的多样性,有助于提高模型的泛化能力和mAP指标。

5. 先验框(Anchor Boxes)的设置:一些目标检测模型(如YOLO和SSD)使用先验框来预测目标的位置和类别,先验框的设置会影响模型的检测精度和mAP指标。

6. 后处理策略:目标检测模型通常会在预测后进行后处理,如非极大值抑制(NMS)等,以过滤重叠的边界框。后处理策略的设计会影响模型的准确性和mAP指标。

综上所述,mAP指标受到多种因素的影响,包括模型本身的设计、训练数据的质量、超参数设置以及数据增强和后处理策略等。

4. 优化策略

1. 数据增强:通过对训练数据进行各种变换,增加数据的多样性,提高模型对不同场景和变化的适应能力,改善模型的泛化能力和鲁棒性。

2. 模型优化:采用先进的模型结构或微调现有模型可提高性能。更深、更复杂的模型结构通常具有更好的特征提取能力,提高目标检测的准确性。

3. 损失函数优化:选择合适的损失函数可使模型更关注难以识别的样本,提高在目标检测任务中的性能。例如,Focal Loss可减少易分类的样本对模型训练的影响,IoU Loss可更好地优化目标的位置和形状。

4. 多尺度训练:使用不同尺度的输入训练模型可使其更好地适应不同大小的目标。这种策略可提高模型对目标的检测能力,尤其在存在尺度差异较大的情况下。

5. 网络融合:将不同的检测网络进行融合可结合它们的优点,提高模型的表现。例如,融合多尺度注意力机制和修改特征提取器,可充分利用它们在不同方面的优势,改善目标检测的性能。

这篇关于YOLOv5入门 | 重要性能衡量指标、训练结果评价及分析及影响mAP的因素的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/973762

相关文章

Vue3 的 shallowRef 和 shallowReactive:优化性能

大家对 Vue3 的 ref 和 reactive 都很熟悉,那么对 shallowRef 和 shallowReactive 是否了解呢? 在编程和数据结构中,“shallow”(浅层)通常指对数据结构的最外层进行操作,而不递归地处理其内部或嵌套的数据。这种处理方式关注的是数据结构的第一层属性或元素,而忽略更深层次的嵌套内容。 1. 浅层与深层的对比 1.1 浅层(Shallow) 定义

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

性能测试介绍

性能测试是一种测试方法,旨在评估系统、应用程序或组件在现实场景中的性能表现和可靠性。它通常用于衡量系统在不同负载条件下的响应时间、吞吐量、资源利用率、稳定性和可扩展性等关键指标。 为什么要进行性能测试 通过性能测试,可以确定系统是否能够满足预期的性能要求,找出性能瓶颈和潜在的问题,并进行优化和调整。 发现性能瓶颈:性能测试可以帮助发现系统的性能瓶颈,即系统在高负载或高并发情况下可能出现的问题

性能分析之MySQL索引实战案例

文章目录 一、前言二、准备三、MySQL索引优化四、MySQL 索引知识回顾五、总结 一、前言 在上一讲性能工具之 JProfiler 简单登录案例分析实战中已经发现SQL没有建立索引问题,本文将一起从代码层去分析为什么没有建立索引? 开源ERP项目地址:https://gitee.com/jishenghua/JSH_ERP 二、准备 打开IDEA找到登录请求资源路径位置

黑神话,XSKY 星飞全闪单卷性能突破310万

当下,云计算仍然是企业主要的基础架构,随着关键业务的逐步虚拟化和云化,对于块存储的性能要求也日益提高。企业对于低延迟、高稳定性的存储解决方案的需求日益迫切。为了满足这些日益增长的 IO 密集型应用场景,众多云服务提供商正在不断推陈出新,推出具有更低时延和更高 IOPS 性能的云硬盘产品。 8 月 22 日 2024 DTCC 大会上(第十五届中国数据库技术大会),XSKY星辰天合正式公布了基于星

数论入门整理(updating)

一、gcd lcm 基础中的基础,一般用来处理计算第一步什么的,分数化简之类。 LL gcd(LL a, LL b) { return b ? gcd(b, a % b) : a; } <pre name="code" class="cpp">LL lcm(LL a, LL b){LL c = gcd(a, b);return a / c * b;} 例题:

Java 创建图形用户界面(GUI)入门指南(Swing库 JFrame 类)概述

概述 基本概念 Java Swing 的架构 Java Swing 是一个为 Java 设计的 GUI 工具包,是 JAVA 基础类的一部分,基于 Java AWT 构建,提供了一系列轻量级、可定制的图形用户界面(GUI)组件。 与 AWT 相比,Swing 提供了许多比 AWT 更好的屏幕显示元素,更加灵活和可定制,具有更好的跨平台性能。 组件和容器 Java Swing 提供了许多

【IPV6从入门到起飞】5-1 IPV6+Home Assistant(搭建基本环境)

【IPV6从入门到起飞】5-1 IPV6+Home Assistant #搭建基本环境 1 背景2 docker下载 hass3 创建容器4 浏览器访问 hass5 手机APP远程访问hass6 更多玩法 1 背景 既然电脑可以IPV6入站,手机流量可以访问IPV6网络的服务,为什么不在电脑搭建Home Assistant(hass),来控制你的设备呢?@智能家居 @万物互联

poj 2104 and hdu 2665 划分树模板入门题

题意: 给一个数组n(1e5)个数,给一个范围(fr, to, k),求这个范围中第k大的数。 解析: 划分树入门。 bing神的模板。 坑爹的地方是把-l 看成了-1........ 一直re。 代码: poj 2104: #include <iostream>#include <cstdio>#include <cstdlib>#include <al

SWAP作物生长模型安装教程、数据制备、敏感性分析、气候变化影响、R模型敏感性分析与贝叶斯优化、Fortran源代码分析、气候数据降尺度与变化影响分析

查看原文>>>全流程SWAP农业模型数据制备、敏感性分析及气候变化影响实践技术应用 SWAP模型是由荷兰瓦赫宁根大学开发的先进农作物模型,它综合考虑了土壤-水分-大气以及植被间的相互作用;是一种描述作物生长过程的一种机理性作物生长模型。它不但运用Richard方程,使其能够精确的模拟土壤中水分的运动,而且耦合了WOFOST作物模型使作物的生长描述更为科学。 本文让更多的科研人员和农业工作者