YOLOv5性能评估指标->mAP、Precision、Recall、FPS、Confienc (讲解论文关注的主要指标)

简介

这篇博客,主要给大家讲解我们在训练yolov5时生成的结果文件中各个图片及其中指标的含义,帮助大家更深入的理解,以及我们在评估模型时和发表论文时主要关注的参数有那些本文通过举例训练过程中的某一时间的结果来帮助大家理解,大家阅读过程中如有任何问题可以在评论区提问出来,我会帮助大家解答首先我们来看一个在一次训练完成之后都能生成多少个文件如下图所示,下面的文章讲解都会围绕这个结果文件来介绍。

评估用的数据集 

上面的训练结果,是根据一个检测飞机的数据集训练得来,其中只有个标签就是飞机,对于这种单标签的数据集,其实我们可以将其理解为一个二分类任务,

一种情况->检测为飞机,另一种情况->不是飞机。

结果分析 

我们可以从结果文件中看到其中共有文件22个,后9张图片是根据我们训练过程中的一些检测结果图片,用于我们可以观察检测结果,有哪些被检测出来了,那些没有被检测出来,其不作为指标评估的文件。         

Weights文件夹

我们先从第一个weights文件夹来分析,其中有两个文件,分别是best.pt、last.pt,其分别为训练过程中的损失最低的结果和模型训练的最后一次结果保存的模型。

 然后我来说两个比较不重要的yaml文件,其保存了我们训练过程中的一些参数如下->

hyp.yaml

第二个文件是args.yaml文件,其中主要保存一些我们训练时指定的参数,内容如下所示。

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: 0.05
cls: 0.5
cls_pw: 1.0
obj: 1.0
obj_pw: 1.0
iou_t: 0.2
anchor_t: 4.0
fl_gamma: 0.0
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

 

opt.yaml

这个文件里面包含了我们所有的参数,上面的yaml文件只包含了训练过程中的超参数,但是还有一些其他的参数类似于数据集的地址,权重地址,项目名称等一系列设置性参数,内容如下->

weights: yolov5n.pt
cfg: models/yolov5n.yaml
data: Construction Site Safety.v30-raw-images_latestversion.yolov8\data.yaml
hyp:lr0: 0.01lrf: 0.01momentum: 0.937weight_decay: 0.0005warmup_epochs: 3.0warmup_momentum: 0.8warmup_bias_lr: 0.1box: 0.05cls: 0.5cls_pw: 1.0obj: 1.0obj_pw: 1.0iou_t: 0.2anchor_t: 4.0fl_gamma: 0.0hsv_h: 0.015hsv_s: 0.7hsv_v: 0.4degrees: 0.0translate: 0.1scale: 0.5shear: 0.0perspective: 0.0flipud: 0.0fliplr: 0.5mosaic: 1.0mixup: 0.0copy_paste: 0.0
epochs: 200
batch_size: 16
imgsz: 640
rect: false
resume: false
nosave: false
noval: false
noautoanchor: false
noplots: false
evolve: null
bucket: ''
cache: null
image_weights: false
device: '0'
multi_scale: false
single_cls: false
optimizer: SGD
sync_bn: false
workers: 0
project: runs\train
name: exp
exist_ok: false
quad: false
cos_lr: false
label_smoothing: 0.0
patience: 100
freeze:
- 0
save_period: -1
seed: 0
local_rank: -1
entity: null
upload_dataset: false
bbox_interval: -1
artifact_alias: latest
save_dir: runs\train\exp45

 

events.out.tfevents.1702789209.WIN-4OLTEIJCBBM.13772.0文件

这个文件是一个TensorBoard日志文件。虽然TensorBoard起初是为TensorFlow设计的,但它也可以与PyTorch一起使用,因为PyTorch有一个叫 tensorboardX 的库,允许PyTorch生成TensorBoard兼容的事件文件。

这样的文件用于记录训练过程中的各种指标,比如损失、准确率、其他统计数据,可以通过TensorBoard来可视化这些指标,以监控和分析模型的训练进度和性能。

 

混淆矩阵(ConfusionMatrix)

第三个文件就是混淆矩阵,大家都应该听过这个名字,其是一种用于评估分类模型性能的表格形式。它以实际类别(真实值)和模型预测类别为基础,将样本分类结果进行统计和汇总。

对于二分类问题,混淆矩阵通常是一个2×2的矩阵,包括真阳性(True Positive, TP)、真阴性(True Negative, TN)、假阳性(False Positive, FP)和假阴性(False Negative, FN)四个元素。

True_Label = [1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1 ,0, 1, 0 , 1 , 0, 0 , 1]
Predict_Label = [0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1 ,0 , 0 , 1 , 0, 0 , 1, 0]

我们来分析这个图,其每个格子代表的含义我在图片上标注了出来,下面我们来拿一个例子来帮助大家来理解这个混淆矩阵。

假设我们的数据集预测为飞机标记为数字0、预测不为飞机标记为1,现在假设我们在模型的训练的某一批次种预测了20次其真实结果和预测结果如下所示。 

其中True_Label代表真实的标签,Predict_Label代表我们用模型预测的标签。

那么我们可以进行对比产生如下分析

  • 6个样本的真实标签和预测标签都是0(真阴性,True Negative)。
  • 1个样本的真实标签是0,但预测标签是1(假阳性,False Positive)。
  • 8个样本的真实标签是1,但预测标签是0(假阴性,False Negative)。
  • 5个样本的真实标签和预测标签都是1(真阳性,True Positive)。

下面根据我们的分析结果,我们就能够画出这个预测的混淆矩阵,

由此我们就能得到那一批次的混淆矩阵,我们的最终结果生成的混淆矩阵可以理解为多个混淆矩阵的统计结果。 

计算mAP、Precision、Recall

在讲解其它的图片之前我们需要来计算三个比较重要的参数,这是其它图片的基础,这里的计算还是利用上面的某一批次举例的分析结果。

  1. 精确度(Precision):预测为正的样本中有多少是正确的,Precision = TP / (TP + FP) = 5 / (5 + 1) = 5/6 ≈ 0.833

  2. 召回率(Recall):真实为正的样本中有多少被正确预测为正,Recall = TP / (TP + FN) = 5 / (5 + 8) ≈ 0.385

  3. F1值(F1-Score):综合考虑精确度和召回率的指标,F1 = 2 * (Precision * Recall) / (Precision + Recall) = 2 * (0.833 * 0.385) / (0.833 + 0.385) ≈ 0.526

  4. 准确度(Accuracy):所有样本中模型正确预测的比例,Accuracy = (TP + TN) / (TP + TN + FP + FN) = (5 + 6) / (5 + 6 + 1 + 8) ≈ 0.565

  5. 平均精确度(Average Precision, AP):用于计算不同类别的平均精确度,对于二分类问题,AP等于精确度。AP = Precision = 0.833

  6. 平均精确度(Mean Average Precision, mAP):多类别问题的平均精确度,对于二分类问题,mAP等于AP(精确度),所以mAP = AP = 0.833

这里需要讲解的主要是AP和MAP如果是多分类的问题,AP和mAP怎么计算,首先我们要知道AP的全称就是Average Precision,平均精度所以我们AP的计算公式如下?

mAP就是Mean Average Precision,计算如下,计算每一个没别的AP进行求平均值处理就是mAP。

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的逐渐增高而变化的一个曲线。

Labels

Labels图片代表每个检测到的目标的类别和边界框信息。每个目标都由一个矩形边界框和一个类别标签表示,我们逆时针来看这个图片!!!

  1. 目标类别:该像素点所检测到的目标类别,例如飞机等。
  2. 目标位置:该像素点所检测到的目标在图像中的位置,即该像素点在图像中的坐标。
  3. 目标大小:该像素点所检测到的目标的大小,即该像素点所覆盖的区域的大小。
  4. 其他信息:例如目标的旋转角度等其他相关信息。

labels_correlogram

labels_correlogram是一个在机器学习领域中使用的术语,它指的是一种图形,用于显示目标检测算法在训练过程中预测标签之间的相关性

具体来说,labels_correlogram是一张颜色矩阵图,它展示了训练集数据标签之间的相关性。它可以帮助我们理解目标检测算法在训练过程中的行为和表现,以及预测标签之间的相互影响。

通过观察labels_correlogram,我们可以了解到目标检测算法在不同类别之间的区分能力,以及对于不同类别的预测精度。此外,我们还可以通过比较不同算法或不同数据集labels_correlogram,来评估算法的性能和数据集的质量。

总之,labels_correlogram是一种有用的工具,可以帮助我们更好地理解目标检测算法在训练过程中的行为和表现,以及评估算法的性能和数据集的质量。

P_curve 

这个图的分析和F1_Curve一样,不同的是关于的是Precision和Confidence之间的关系,可以看出我们随着置信度的越来越高检测的准确率按理来说是越来越高的。 

R_curve 

这个图的分析和F1_Curve一样,不同的是关于的是Recall和Confidence之间的关系,可以看出我们随着置信度的越来越高召回率的准确率按理来说是越来越低的。 

PR_curve

它显示了在不同分类阈值下模型的精确度(Precision)和召回率(Recall)之间的关系。

PR曲线越靠近坐标轴的左上角,模型性能越好,越能够正确识别正样本,正确分类正样本的Precision值越高,而靠近右侧则说明模型对正样本的识别能力较差,即召回能力较差。

PR曲线的特点是随着分类阈值的变化,精确度和召回率会有相应的改变。通常情况下,当分类模型能够同时保持较高的精确度和较高的召回率时,PR曲线处于较高的位置。当模型偏向于高精确度或高召回率时,曲线则相应地向低精确度或低召回率的方向移动。

PR曲线可以帮助我们评估模型在不同阈值下的性能,并选择适当的阈值来平衡精确度和召回率。对于模型比较或选择,我们可以通过比较PR曲线下方的面积(称为平均精确度均值,Average Precision, AP)来进行定量评估。AP值越大,模型的性能越好。

总结:PR曲线是一种展示分类模型精确度和召回率之间关系的可视化工具,通过绘制精确度-召回率曲线,我们可以评估和比较模型在不同分类阈值下的性能,并计算平均精确度均值(AP)来定量衡量模型的好坏。

results.csv

results.csv记录了一些我们训练过程中的参数信息,包括损失和学习率等,这里没有什么需要理解大家可以看一看,我们后面的results图片就是根据这个文件绘画出来的。

results

这个图片就是生成结果的最后一个了,我们可以看出其中标注了许多小的图片包括训练过程在的各种损失,我们主要看的其实就是后面的四幅图mAP50、mAP50-95、metrics/precision、metrics/recall四张图片。 

  1. mAP50:mAP是mean Average Precision的缩写,表示在多个类别上的平均精度。mAP50表示在50%的IoU阈值下的mAP值。
  2. mAP50-95:这是一个更严格的评价指标,它计算了在50-95%的IoU阈值范围内的mAP值,然后取平均。这能够更准确地评估模型在不同IoU阈值下的性能。
  3. metrics/precision:精度(Precision)是评估模型预测正确的正样本的比例。在目标检测中,如果模型预测的边界框与真实的边界框重合,则认为预测正确。
  4. metrics/recall:召回率(Recall)是评估模型能够找出所有真实正样本的比例。在目标检测中,如果真实的边界框与预测的边界框重合,则认为该样本被正确召回。

检测效果图

最后的十四张图片就是检测效果图了,给大家看一下这里没什么好讲解的了。

其它参数

FPS和IoU是目标检测领域中使用的两个重要指标,分别表示每秒处理的图片数量和交并比。

  1. FPS:全称为Frames Per Second,即每秒帧率。它用于评估模型在给定硬件上的处理速度,即每秒可以处理的图片数量。该指标对于实现实时检测非常重要,因为只有处理速度快,才能满足实时检测的需求(推理速度有关系等于nms时间 +预处理时间 然后用1000除以这三个数就是fps,现在轻量化提高FPS是一个比较流行的发论文方向且比较简单一些)。
  2. IoU:全称为Intersection over Union,表示交并比。在目标检测中,它用于衡量模型生成的候选框与原标记框之间的重叠程度。IoU值越大,表示两个框之间的相似性越高。通常,当IoU值大于0.5时,认为可以检测到目标物体。这个指标常用于评估模型在特定数据集上的检测准确度。

在目标检测领域中,处理速度和准确度是两个重要的性能指标。在实际应用中,我们需要根据具体需求来平衡这两个指标。

总结 

到此为止本篇博客就完结了,大家如果有什么不理解的可以在评论区留言,我看到了会给大家进行解答,大家通过综合考虑这些指标的数值,可以评估YOLOv8模型在目标检测任务中的准确性、召回率、速度和边界框质量等性能表现。根据具体需求,我们可以选择更适合任务场景的模型和参数配置。

最后祝大家学习顺利,科研成功,多多论文!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/235464.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

npm安装依赖报错ERESOLVE unable to resolve dependency tree(我是在taro项目中)(node、npm 版本问题)

换了电脑之后新电脑安装包出错 👇👇👇 npm install 安装包报错 ERESOLVE unable to resolve dependency tree 百度后尝试使用 npm install --force 还是报错 参考 有人说是 node 版本和 npm 版本的问题 参考 新电脑 node版本:16.1…

kotlin第三方库记录

一、测试 除了JUnit与TestNG,下面两个框架提供了用kotlin编写测试的更有表现力的DSL 1.KotlinTest(https://github.com/kotlintest/kotlintest)——灵活的测试框架,它的灵感来自于ScalaTest,支持多种不同的编写测试的…

深度学习中聚类的“类”指的是什么

在深度学习中的聚类中,“类”指的是数据点的一个集合,这些数据点根据某种相似性标准被归为同一组。在聚类的上下文中,这些类通常被称为“簇”(clusters)。每个簇是数据集中的一个子集,簇内的元素相互之间比…

Unity闪屏Logo去除

1.新建一个C#脚本,命名为 “SkipSplashScreen” (代码如下)。 using System.Collections; using System.Collections.Generic; using System; using UnityEngine; using UnityEngine.UI;#if !UNITY_EDITOR using UnityEngine; using UnityEn…

ros2机器人常规控制流程

The joint_state_publisher reads the robot_description parameter from the parameter server, finds all of the non-fixed joints and publishes a JointState message with all those joints defined.也就是说如果我们不需要控制机器人运动,只需要一个节点就可…

自学精灵--专业的编程学习网站

这是我看过的最靠谱的编程学习网站,名字是:自学精灵,网站是:learn.skyofit.com。(某度搜"自学精灵"也可找到此站,搜不到可以用必应搜)。 自学精灵是全网最强的学习平台,我…

Oracle sql 把hjmc等于实施方案的,排序在第一,并且把sxh等于-1的排在最后

要将hjmc等于"实施方案"的行排序在第一,并将sxh等于-1的行排在最后,你可以使用ORDER BY子句来实现。假设你的数据表名为your_table_name,你可以使用以下SQL查询: SELECT * FROM your_table_name ORDER BY CASE WHEN hj…

设计模式-访问模式

模式介绍 访问者模式是一种行为设计模式,它表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素类的前提下定义作用于这些元素的新操作。 在访问者模式中,一个访问者类实现了访问者接口,可以访问对象结构中的元素。这个接口…

QT GUI代码大全(MainWindow, QFile, QPainter, QGraphicsItem/Scene/View)

文章目录 窗口设置QMainWindow类 按钮和菜单QMenuBar类QMenu类QAction类 文件交互QFileDialog类QFileInfo类QFile类QTextStream 绘图QPixmap类QPainter类QBrush类QPen类QPainterPath类 游戏场景QGraphicsItem类QGraphicsScene类QGraphicsView类 窗口设置 QMainWindow类 QMainW…

STM32 OLED 显示原理的讲解以及OLED显示汉字与图片的代码

STM 32 OLED 显示原理的讲解以及OLED显示汉字与图片的代码 本文主要涉及OLED显示原理的讲解以及OLED显示汉字与图片的代码。 文章目录 STM 32 OLED 显示原理的讲解以及OLED显示汉字与图片的代码一、 OLED简介1.1 OLED 的特点1.2 OLED 8080并行接口信号线说明1.3 OLED控制器SSD1…

UE5 runtime模式下自定义视口大小和位置并跟随分辨率自适应缩放

本文旨在解决因UI问题导致屏幕中心位置不对的问题 处理前的现象:如果四周UI透明度都为1,那么方块的位置就不太对,没在中心 处理后的现象: 解决办法:自定义大小和视口偏移 创建一个基于子系统的类或者蓝图函数库(什么类…

使用opencv实现图像中几何图形检测

1 几何图形检测介绍 1.1 轮廓(contours) 什么是轮廓,简单说轮廓就是一些列点相连组成形状、它们拥有同样的颜色、轮廓发现在图像的对象分析、对象检测等方面是非常有用的工具,在OpenCV 中使用轮廓发现相关函数时候要求输入图像是二值图像,这…

Apache Tomcat httpoxy 安全漏洞 CVE-2016-5388 已亲自复现

Apache Tomcat httpoxy 安全漏洞 CVE-2016-5388 已亲自复现 漏洞名称漏洞描述影响版本 漏洞复现环境搭建漏洞利用修复建议 总结 漏洞名称 漏洞描述 在Apache Tomcat中发现了一个被归类为关键的漏洞,该漏洞在8.5.4(Application Server Soft ware)以下。受影响的是组…

安全面试总结

如何防止XSS攻击 XSS(跨站脚本攻击)是一种常见的网络安全漏洞,攻击者通过在网页中注入恶意脚本,利用漏洞获取用户的敏感信息或执行恶意操作。防止 XSS 攻击的方法包括: 1. 输入过滤和转义: 过滤用户输入…

Windows下安装MongoDB实践总结

本文记录Windows环境下的MongoDB安装与使用总结。 【1】官网下载 官网下载地址:Download MongoDB Community Server | MongoDB 这里可以选择下载zip或者msi,zip是解压后自己配置,msi是傻瓜式一键安装。这里我们分别对比进行实践。 【2】ZI…

车载V2X方案的选型分享

ACX200T面向 5G车联网C-V2X 应用的安全芯片,满足V2X场景下消息认证的专用安全芯片,该款芯片采用公司自主的 高速硬件加密引擎 ,支 持国家标准SM1、SM2、SM3、SM4密码算法,同时支持国际ECDSA、AES、SHA-1密码算法。可实现网联汽车云…

使用包、Crate 和模块管理项目(下)

1、使用 use 关键字将路径引入作用域 在之前的示例中我们引用模块中的函数或者结构体之类的,都是需要用到相对路径或者绝对路径去引用,然尔在这里,有一种方法可以简化这个过程。我们可以使用 use 关键字创建一个短路径,然后就可以…

云原生扫盲篇

What 云原生加速了应用系统与基础设施资源之间的解耦,向下封装资源以便将复杂性下沉到基础设施层;向上支撑应用,让开发者更关注业务价值 云原生是一种构建和运行应用程序的方法,也是一套技术体系和方法论. Cloud 表示应用程序位于云中而不是传统的数据中心Native表示应用程序从…

【打卡】牛客网:BM68 矩阵的最小路径和

模板的: 调试很久的地方: 最小的路径和而不是最大路径和。dp[i][j] matrix[i][j] (dp[i-1][j] > dp[i][j-1]? dp[i][j-1]:dp[i-1][j]); //需要加上括号dp和matrix下标的对应。 class Solution { public:/*** 代码中的类名、方法名、参数名已经指定…

C# NPOI导出datatable----Excel模板画图表

1、创建Excel模板 2、安装NPOI管理包 3、创建工作簿 (XLSX和XLS步骤一样,以XLS为例) IWorkbook workbook null; string time DateTime.Now.ToString("yyyyMMddHHmmss"); string excelTempPath Application.StartupPath "…