我的编程空间,编程开发者的网络收藏夹
学习永远不晚

YOLOv5训练结果分析

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

YOLOv5训练结果分析

本文的目的是帮助理解每次训练后,在runs/train文件夹下出现的一系列文件,并探索如何评估准确率以及模型的好坏。

一.混淆矩阵—confusion_matrix.png

毕设跑的train有混淆矩阵,但是有点扯,需要跑一下鸟类的验证一下(待验证)

 1.概念

混淆矩阵是对分类问题预测结果的总结。使用计数值汇总正确和不正确预测的数量,并按每个类进行细分,显示了分类模型进行预测时会对哪一部分产生混淆。

混淆矩阵不仅可以让我们直观的了解分类模型所犯的错误,更重要的是可以了解哪些错误类型正在发生,正是这种对结果的分解克服了仅使用分类准确率带来的局限性。

2.图文理解

实际
类1类2类3
预测类14352
类22453
类30149

(1)横轴时预测类别,纵轴是真实类别;

(2)表格里的数目总数为150,表示共有150个测试样本;

(3)每一行之和为50,表示每类各有50个样本,每一行代表了真实的目标被预测为其他类的数量,比如第一行:43代表真实的类一中有43个被预测为类一,5个被错预测为类2,2个被错预测为类3;

二.TP/TN/FP/FN

1.逻辑关系

T(True):最终预测结果正确。

F(False):最后预测结果错误。

P(Positive):模型预测其是正例(目标本身是个鱼,模型也预测它是个鱼)。

N(Negative):模型预测其是负例(目标本身是个鱼,但模型预测它是个猫)。

TP:样本的真实类别是正例,并且模型预测的结果也是正例,预测正确(目标本身是个鱼,模型也预测它是鱼,预测正确;还有一种理解方式,模型预测它是正例,最终预测结果是正确的,所以目标是个正例))。

TN:样本的真实类别是负例,并且模型将其预测成为负例,预测正确(目标本身不是鱼,模型预测它不是了鱼,是个其他的东西,预测正确;还有一种理解方式,模型预测它是负例,最终预测结果是正确的,所以目标是个负例))。

FP:样本的真实类别是负例,但是模型将其预测成为正例,预测错误(目标本身不是鱼,模型预测它是鱼,预测错误;还有一种理解方式,模型预测它是正例,最终预测结果是错误的,所以目标是个负例)。

FN:样本的真实类别是正例,但是模型将其预测成为负例,预测错误(目标本身是鱼,模型预测它不是鱼,是个其他的东西,预测错误;还有一种理解方式,模型预测它是负例,最终预测结果是错误的,所以目标是个正例)。


2.几个指标

(1)正确率/准确率(accuracy)=\frac{}{}\frac{TP+TN}{TP+TN+FP+FN};

注:通常来说正确率越高,模型越好。

(2)错误率=\frac{FP+FN}{TP+TN+FP+FN};

(3)灵敏度(sensitive)=\frac{TP}{TP+FN}

注:表示的是所有正例中被分对的比例,衡量了分类器对正例的识别能力;

(4)特征度/特异度(specificity)=\frac{TN}{TN+FP}

注:表示的是所有负例中被分对的比例,衡量了分类器对负例的识别能力;

(5)精确率(precision)=\frac{TP}{TP+FP}

注:表示被分为正例的示例中实际为正例的比例;

(6)召回率(recall)=\frac{TP}{TP+FN}

注:度量有多个正例被分为正例;


3.label.jpg

 第一张图:classes(每个类别的数据量)

第二个图:labels(框的尺寸和数量)

第三个图:center (框的中心点坐标)

第四个图:labels width and height(框的长和宽)


4.P_curve(精确率和置信度的关系图)

精确率(查准率):表示被分为正例的示例中实际为正例的比例

解释:设置置信度为某一数值的时候,各个类别识别的精确率。

可以看到,当置信度越大的时候,类别检测的越准确。这也很好理解,只有置信度很大,才被判断是某一类别。但这样的话,会漏检一些置信度低的类别。

比如运行程序时,即便某个目标是鱼,模型预测它也是鱼,但是给它的置信度只有70%,当置信度设置在80%时才认为是鱼时,这个目标就会被忽略了。


5.R_curve(召回率和置信度的关系图)

召回率(查全率):度量有多个正例被分为正例

解释:设置置信度为某一数值的时候,各个类别查全的概率。可以看到,当置信度越小的时候,类别检测的越全面。


6.先验知识\rightarrow综合recall和precision

Precision和Recall通常是一对矛盾的性能度量指标。一般来说,Precision越高时,Recall往往越低。

原因是:如果我们希望提高Precision,即二分类器预测的正例尽可能是真实正例,那么就要提高二分类器预测正例的门槛。例如,之前预测正例只要置信度\geq0.5的样例我们就标注为正例,那么现在要提高到置信度\geq0.7我们才标注为正例,这样才能保证二分类器挑选出来的正例更有可能是真实正例;而这个目标恰恰与提高Recall相反,如果我们希望提高Recall,即二分类器尽可能地将真实正例挑选出来,那么势必要降低二分类器预测正例的门槛,例如之前预测正例只要置信度\geq0.5的样例我们就标注为真实正例,那么现在要降低到\geq​​​​​​​0.3我们就将其标注为正例,这样才能保证二分类器挑选出尽可能多的真实正例 。

注:算法会为每个目标分配一个置信度

对于二分类器,我的理解是:即便是有多个目标,因为在P_curve和R_curve中,每一类都有一条自己对应的曲线,所以在计算每一类的时候(比如鱼),鱼就是正例,其余的不管有多少类通通归为负例。


 7.PR_curve(精确率和召回率的关系图)

mAP (Mean Average Precision),即均值平均精度。

mAP是所有类别AP的均值,AP由精确率和召回率确定;而IoU 阈值、confidence(置信度) 阈值影响精确率和召回率的计算。计算精确率和召回率时需要判断TP、FP、TN、FN

@后面的数表示判定iou为正负例的阈值

可以看到:精度越高,召回率越低。

我们希望我们的网络,在准确率很高的前提下,尽可能的检测到全部的类别。所以希望我们的曲线接近(1,1)点,即希望mAP曲线的面积尽可能接近1。

第一个衡量指标:mAP曲线的面积大小。


8.F1_curve

F1分数(F1-score)是分类问题的一个衡量指标。是精确率和召回率的调和平均数,1是最好,0是最差。

                                               F_{1}Score=\frac{2*Precision*Recall}{Precision+Recall}

​​​​​​​


 

9.可视化训练结果解析

横坐标代表的是训练轮数(epoch)

obj(Objectness):推测为目标检测loss均值,越小目标检测越准。

cls(Classification):推测为分类loss均值,越小分类越准。

第二个衡量指标:宏观上一般训练结果主要观察精度召回率波动情况,波动不是很大则训练效果较好;如果训练比较好的话图上呈现的是稳步上升。


小感悟

Q1:在学习YOLOv5训练结果分析的过程中突然有了一个疑问:train.py不就是训练训练图片,怎么会涉及到精确率的问题?

解释:在训练过程中,有一步会生成训练集(train.txt)、验证集(val.txt)、测试集(test.txt),其中存放图片的名字(无后缀.jpg)。

训练集:用于训练模型以及确定参数。相当于老师教学生知识的过程。

验证集:用于确定网络结构以及调整模型的超参数。相当于月考等小测验,用于学生对学习的查漏补缺。

测试集:用于检验模型的泛化能力。相当于大考,上战场一样,真正的去检验学生的学习效果。

所以我感觉正是测试测试集的过程中,才出来的精确率、召回率等参数。

关于毕设训练结果文档中P_curve、R_curve都只有黑鲷的原因是:测试集里只有黑鲷的图片。

这里设计到训练集、验证集、测试集的比例划分(未解决)


半成品:仅仅是为了自己理解YOLOv5的具体原理,如有侵权,麻烦告知,立删

来源地址:https://blog.csdn.net/qq_42784882/article/details/127386465

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

YOLOv5训练结果分析

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

YOLOv5模型训练与评估源码分析

本篇内容介绍了“YOLOv5模型训练与评估源码分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1 搭建训练环境首先,我们需要搭建YOLOv
2023-07-05

yolov5训练时参数workers与batch-size的示例分析

这篇文章将为大家详细讲解有关yolov5训练时参数workers与batch-size的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。yolov5训练命令 python .\train.py --
2023-06-29

pytorch DistributedDataParallel 多卡训练结果变差怎么办

小编给大家分享一下pytorch DistributedDataParallel 多卡训练结果变差怎么办,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!DDP 数据
2023-06-15

pytorch 6中batch_train批训练操作的示例分析

这篇文章主要介绍pytorch 6中batch_train批训练操作的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!看代码吧~import torchimport torch.utils.data as Da
2023-06-15

tensorflow语义分割api之使用deeplab训练cityscapes的示例分析

这篇文章给大家分享的是有关tensorflow语义分割api之使用deeplab训练cityscapes的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。安装教程:cityscapes训练:遇到的坑:1.
2023-06-15

如何解决Pytorch在测试与训练过程中的验证结果不一致问题

小编给大家分享一下如何解决Pytorch在测试与训练过程中的验证结果不一致问题,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!引言今天在使用Pytorch导入此前保存的模型进行测试,在过程中发现输出的结果与验证结果差距甚大,
2023-06-15

Linq中怎么分析查询结果

这篇文章给大家介绍Linq中怎么分析查询结果,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。使用Linq查询结果:如果查询结果是强类型的,如string[],List等,就可以不用var类型,而是使用合适的 IEnume
2023-06-17

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录