关于yolov5的一些简单说明(txt文件、训练结果分析等)

目录
  • 一、yolo中txt文件的说明:
  • 二、yolo跑视频、图片文件的格式:
  • 三、yolov5训练结果不好的原因:
  • 四、yolov5训练结果(train文件)分析
  • 总结

一、yolo中txt文件的说明:

二、yolo跑视频、图片文件的格式:

三、yolov5训练结果不好的原因:

1. 欠拟合:

在训练集上表现很差,测试集上表现也很差的现象可能是欠拟合导致的,是因为泛化能力太强,误识别率较高解决办法:

1)增加数据集的正样本数, 增加主要特征的样本数量

2)增加训练次数

3)减小正则化参数

2. 过拟合:

在训练集上表现很好,在测试集上表现很差(模型太复杂)解决办法:

1)增加其他的特征的样本数, 重新训练网络.

2)训练数据占总数据的比例过小,增加数据的训练量

3.  loss值不再变小就说明训练好了

四、yolov5训练结果(train文件)分析

1.  confusion_matrix.png(混淆矩阵)

混淆矩阵能对分类问题的预测结果进行总结,显示了分类模型的在进行预测时会对哪一部分产生混淆。

2. F1_curve:

F1分数与置信度之间的关系。F1分数(F1-score)是分类问题的一个衡量指标,是精确率precision和召回率recall的调和平均数,最大为1,最小为0, 1是最好,0是最差

3. labels.jpg

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

第二个图 labels:标签

第三个图 center xy

第四个图 labels 标签的长和宽

4. labels_corrrelogram.jpg 目前不知道

5. P_curve.png :

准确率precision和置信度confidence的关系图

6. PR_curve.png:

PR曲线中的P代表的是precision(精准率)R代表的是recall(召回率),其代表的是精准率与召回率的关系,一般情况下,将recall设置为横坐标,precision设置为纵坐标。PR曲线下围成的面积即AP,所有类别AP平均值即Map.

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

  • Precision和Recall往往是一对矛盾的性能度量指标;
  • 提高Precision == 提高二分类器预测正例门槛 == 使得二分类器预测的正例尽可能是真实正例;
  • 提高Recall == 降低二分类器预测正例门槛 == 使得二分类器尽可能将真实的正例挑选

7. R_curve.png :召回率和置信度之间的关系

8. results.png:

  • Box_loss:YOLO V5使用 GIOU Loss作为bounding box的损失,Box推测为GIoU损失函数均值,越小方框越准;
  • Objectness_loss:推测为目标检测loss均值,越小目标检测越准;
  • Classification_loss:推测为分类loss均值,越小分类越准;
  • Precision:精度(找对的正类/所有找到的正类);
  • Recall:真实为positive的准确率,即正样本有多少被找出来了(召回了多少).Recall从真实结果角度出发,描述了测试集中的真实正例有多少被二分类器挑选了出来,即真实的正例有多少被该二分类器召回。
  • val Box_loss: 验证集bounding box损失;
  • val Objectness_loss:验证集目标检测loss均值;
  • val classification_loss:验证集分类loss均值;
  • mAP@.5:.95(mAP@[.5:.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。mAP@.5:表示阈值大于0.5的平均mAP。然后观察mAP@0.5 & mAP@0.5:0.95 评价训练结果。mAP是用Precision和Recall作为两轴作图后围成的面积,m表示平均,@后面的数表示判定iou为正负样本的阈值,@0.5:0.95表示阈值取0.5:0.05:0.95后取均值

注:以上资料、图片来自于YOLOV5官网,CSDN优秀作者以及自己训练的数据集,侵权删除。

  本人正在学习事件相机检测等内容(小白),希望能与学习事件相机的众多大佬一起学习,共同交流!

总结

到此这篇关于关于yolov5的一些简单说明的文章就介绍到这了,更多相关yolov5 txt文件、训练结果分析内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

时间: 2022-06-22

Yolov5训练意外中断后如何接续训练详解

目录 1.配置环境 2.问题描述 3.解决方法 3.1设置需要接续训练的结果 3.2设置训练代码 4.原理 5.结束语 1.配置环境 操作系统:Ubuntu20.04 CUDA版本:11.4 Pytorch版本:1.9.0 TorchVision版本:0.7.0 IDE:PyCharm 硬件:RTX2070S*2 2.问题描述 在训练YOLOv5时由于数据集很大导致训练时间十分漫长,这期间Python.主机等可能遇到死机的情况,如果需要训练300个epoch但是训练一晚后发现在200epoch时

yolov5训练时参数workers与batch-size的深入理解

目录 yolov5训练命令 workers和batch-size参数的理解 workers batch-size 两个参数的调优 总结 yolov5训练命令 python .\train.py --data my.yaml --workers 8 --batch-size 32 --epochs 100 yolov5的训练很简单,下载好仓库,装好依赖后,只需自定义一下data目录中的yaml文件就可以了.这里我使用自定义的my.yaml文件,里面就是定义数据集位置和训练种类数和名字. worke

Keras框架中的epoch、bacth、batch size、iteration使用介绍

1.epoch Keras官方文档中给出的解释是:"简单说,epochs指的就是训练过程接中数据将被"轮"多少次" (1)释义: 训练过程中当一个完整的数据集通过了神经网络一次并且返回了一次,这个过程称为一个epoch,网络会在每个epoch结束时报告关于模型学习进度的调试信息. (2)为什么要训练多个epoch,即数据要被"轮"多次 在神经网络中传递完整的数据集一次是不够的,对于有限的数据集(是在批梯度下降情况下),使用一个迭代过程,更新权重一

记录模型训练时loss值的变化情况

记录训练过程中的每一步的loss变化 if verbose and step % verbose == 0: sys.stdout.write('\r{} / {} : loss = {}'.format( step, total_steps, np.mean(total_loss))) sys.stdout.flush() if verbose: sys.stdout.write('\r') sys.stdout.flush() 一般我们在训练神经网络模型的时候,都是每隔多少步,输出打印一下l

SQL SERVER使用ODBC 驱动建立的链接服务器调用存储过程时参数不能为NULL值

我们知道SQL SERVER建立链接服务器(Linked Server)可以选择的驱动程序非常多,最近发现使用ODBC 的 Microsoft OLE DB 驱动程序建立的链接服务器(Linked Server), 调用存储过程过程时,参数不能为NULL值. 否则就会报下面错误提示: 对应的英文错误提示为: EXEC xxx.xxx.dbo.Usp_Test NULL,NULL,'ALL' Msg 7213, Level 16, State 1, Line 1 The attempt by th

Python定义函数时参数有默认值问题解决

这篇文章主要介绍了Python定义函数时参数有默认值问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 在定义函数的时候,如果函数的参数有默认值,有两种类型的参数,一种是整数,字符串这种不可变类型,另一种是列表这种可变类型,对于第一种情况没有什么特殊的地方,但是对于可变类型,有一个微妙的小陷阱. 可变类型以及小陷阱: def append_item(item, list1=[]): list1.append(item) return lis

解决tensorflow训练时内存持续增加并占满的问题

记录一次小白的tensorflow学习过程,也为有同样困扰的小白留下点经验. 先说我出错和解决的过程.在做风格迁移实验时,使用预加载权重的VGG19网络正向提取中间层结果,结果因为代码不当,在遍历图片提取时内存持续增长,导致提取几十个图片的特征内存就满了. 原因是在对每一张图片正向传播结束后,都会在留下中间信息.具体地说是在我将正向传播的代码与模型的代码分离了,在每次遍历图片时都会正向传播,在tensorflow中新增加了很多的计算节点(如tf.matmul等等),导致内存中遗留了大量的过期信息

tensorflow 固定部分参数训练,只训练部分参数的实例

在使用tensorflow来训练一个模型的时候,有时候需要依靠验证集来判断模型是否已经过拟合,是否需要停止训练. 1.首先想到的是用tf.placeholder()载入不同的数据来进行计算,比如 def inference(input_): """ this is where you put your graph. the following is just an example. """ conv1 = tf.layers.conv2d(inp

postman中POST请求时参数包含参数list设置方式

如下所示: 图中params包含多个参数,具体如下: {"rzrq":"2019-01-21","rzlx":"1","nr":"","jsonStr":"[{'gzlx':'1','gznr':'11','gzcg':'11','czwt':'11','yjjy':'11','rzgl_id':'','px':1},{'gzlx':'1','gznr':'

ajax上传时参数提交不更新等相关问题

先前,我从网上下载了一个jQuery的Ajax上传插件,网页的左侧是上传分类,想要实现的一个功能是如此这样的:我本来是打算在服务端根据上传分类建立不同的文件夹来保存文件的,因此这个就需要传一个上传分类参数给后台.这些上传分类是从数据库读出,用repeater生成的.当点击其中一个分类时就给他设置一个样式,并且将这个分类的名字保存到一个变量uploadCatlog中.我可以取到分类并传给后台,但是很奇怪的是只有第一次是正确的,以后的每次参数都不更新.其实在上传插件的onComplete回调函数中也

Kafka利用Java实现数据的生产和消费实例教程

前言 在上一篇中讲述如何搭建kafka集群,本篇则讲述如何简单的使用 kafka .不过在使用kafka的时候,还是应该简单的了解下kafka. Kafka的介绍 Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据. Kafka 有如下特性: 以时间复杂度为O(1)的方式提供消息持久化能力,即使对TB级以上数据也能保证常数时间复杂度的访问性能. 高吞吐率.即使在非常廉价的商用机器上也能做到单机支持每秒100K条以上消息的传输. 支持Kafka Serv

命令行运行Python脚本时传入参数的三种方式详解

如果在运行python脚本时需要传入一些参数,例如gpus与batch_size,可以使用如下三种方式. python script.py 0,1,2 10 python script.py -gpus=0,1,2 --batch-size=10 python script.py -gpus=0,1,2 --batch_size=10 这三种格式对应不同的参数解析方式,分别为sys.argv, argparse, tf.app.run, 前两者是python自带的功能,最后一个是tensorfl