YOLOv5入门(五)目标检测性能评价指标与结果分析

2024-05-03 17:12

本文主要是介绍YOLOv5入门(五)目标检测性能评价指标与结果分析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

前言

       通过前面几篇文章,已经完成数据集制作、环境配置(服务器)和模型训练,本篇博客主要讲解训练yolov5的train.py生成的结果文件各个图片和其中指标的含义,以及在评估模型和发表论文时主要用到的参数~

下面的文章围绕以下这个结果文件讲述:

往期回顾

YOLOv5入门(一)利用Labelimg标注自己数据集

[YOLOv5入门(二)处理自己数据集(标签统计、数据集划分、数据增强)

YOLOv5入门(三)使用云服务器autoDL、VSCode连接和WinSCP文件上传

YOLOv5入门(四)训练自己的目标检测模型

目录

一、结果分析

1.1 weights(模型权重)

以上两个文件就是我们训练好的权重:

best.pt:训练过程中在验证集上表现最好的模型权重。在训练过程中,每个epoch结束后都会对验证集进行一次评估,记录最好的模型权重

last.pt:模型训练最后一次迭代结束后的模型权重

二者区别:best.pt用于训练后对模型进行推理和部署;last.pt用于继续训练模型,包含最后一次训练迭代结束时的模型权重,可以从上一次训练结束的地方继续训练模型。


1.2 confusion_matrix(混淆矩阵)

 1.2.1 混淆矩阵介绍

        混淆矩阵,又称为可能性矩阵或错误矩阵。混淆矩阵是可视化工具,用于监督学习,在无监督学习一般叫做匹配矩阵。在图像精度评价中,主要用于比较分类结果和实际测得值,可以把分类结果的精度显示在一个混淆矩阵里面。

 1.2.2 混淆矩阵结构

True Positive (TP): 模型将实际为正类别的样本正确预测为正类别。

False Positive (FP):模型将实际为负类别的样本错误预测为正类别。

False Negative (FN):模型将实际为正类别的样本错误预测为负类别。

True Negative (TN):模型将实际为负类别的样本正确预测为负类别。

 1.2.3 混淆矩阵效果

1、混淆矩阵的每一行代表了预测类别,每一行的总数表示预测为该类别的数据的数目;
2、每一列代表了数据的真实归属类别,每一列的数据总数表示该类别的数据实例的数目;

 1.2.4 从混淆矩阵得到分类指标

(1)精确率(Accuracy)

含义:精确率用来表示模型的精度,即模型识别正确的个数/样本的总个数

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

(2)正确率/准确率(Precision)

含义:表示在模型识别为正类样本中,真正为正类的样本所占比例

Precision = TP/(TP+FP)

(3)召回率/查全率(Recall)

含义:表示模型正确识别出为正类的样本的数量占总的正类样本数量的比值。Recall越高,说明有更多的正类样本被模型预测正确,模型的效果越好。

Recall = TP/(TP+FN)

(4)平均精度(Average Precision,AP)

含义:AP衡量模型在每个类别上的好坏

(5)均值平均精确度(Mean Average Precision,mAP)

含义:mAP衡量在所有类型上的好坏,mAP取所有类别AP的平均值

mAP@0.5:当IoU为0.5时的mAP

mAP@0.5:0.95 当IoU为0.5:0.95:0.05时的mAP平均数

(6)F1-score

含义:分类问题的一个衡量指标,可以用于评估模型在检测出所有目标的情况下的精确性和完整性。F1-score综合考虑精确度与召回率的指标,最大值为1,最小值为0,公式如下:

F1 = 2 * (Precision * Recall) / (Precision + Recall)


1.3 F1_curve(F1曲线)

F1-Confidence Curve就是F1-Score随着Confience逐渐增高而变化的曲线。

横坐标:Confidence(置信度)

纵坐标:F1-Score

置信度含义:模型判定一个物体并不是百分百判定它是属于某个分类,而是会给予它一个概率,Confidence就是设置的阈值,如果超过这个概率那么就确定为某个分类。

1.4 hpy.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

1.5 labels

labels图片代表每个检测到的目标的类别和边界框信息。

    1、第一个图是训练集的数据量,每个类别数;

    2、第二个图是框的尺寸和数量;

    3、第三个图是中心点相对于整幅图的位置;

    4、第四个图是目标相对于整幅图的高宽比例;


1.6 labels_corrlogram

含义:指的是一种图形,用于显示目标检测算法在训练过程中预测标签之间的相关性。

作用:体现中心点横纵坐标以及框的高度间的关系

表示中心点坐标x、y,以及框的高宽之间的关系。每行的最后一幅图代表的是x,y,宽和高的分布情况;

    1、第一行的图表明中心点横坐标x的分布情况,可以看到大部分集中在整幅图的中心位置;

    2、第二行的图表明中心点纵坐标y与横坐标x,y的分布情况

    3、第三行的图表明框的宽与横坐标x,y和款的宽的分布情况

    4、第四行的图表明框的高与横坐标x,y和框的宽、高的分布情况


1.7 opt.yaml

包含了数据集路径、权重路径,项目名称等一系列设置性参数

weights: yolov5s.pt
cfg: /root/yolov5-7.0/models/yolov5s_tls.yaml
data: /root/yolov5-7.0/data/traffic_lights.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: 100
batch_size: 128
imgsz: 640
rect: false
resume: false
nosave: false
noval: false
noautoanchor: false
noplots: false
evolve: null
bucket: ''
cache: null
image_weights: false
device: ''
multi_scale: false
single_cls: false
optimizer: SGD
sync_bn: false
workers: 8
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/exp3

1.8 P_curve

准确率(Precision)与置信度(confidence)之间的关系图


1.9 R_curve

召回率(Recall)和置信度(Confidence)之间的关系


1.10 PR_curve

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


1.11 result.csv

        全部列从左往右依次为:训练轮数、训练集边界框损失、训练集置信度损失、训练集分类损失、精确率、召回率、均值平均精度mAP@0.5、均值平均精度mAP@0.5:0.95、验证集边界框损失、验证集目标检测损失、验证集分类损失、学习率


1.12events.out.tfevents.1714616288.autodl-container-bbd74aba75-e1ff89fb.2194.0

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


1.13 result.png

(1)边界框损失(box_loss):预测框与标定框之间的误差,越小定位得越准;

(2)置信度损失(obj_loss):目标检测loss均值,越小判定目标的能力越准;

(3)分类损失(cls_loss):计算锚框与对应的标定分类是否正确,越小分类越准;

(4)mAP@0.5:0.95(mAP@[0.5:0.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;

(5)mAP@0.5: 表示阈值大于0.5的平均mAP


1.14 train_batchx

用于训练模型性能的标签:是YOLOv5模型训练集的图片,其中x表示训练集的批次编号。train_batchx中每个图片都有一个对应的标签,用于描述图像中的目标的位置和类别信息。


1.15 val_batchx_labels

验证集第x轮的实际标签:指验证集中一个batch的真实标签和框的信息,其中x为batch的编号。这些信息通常包括每个样本的分类标签和相应的边界框坐标。


1.16 val_batchx_pred

验证集第x轮的预测标签:指验证集中一个batch的预测标签和框的信息,其中x为batch的编号。这些信息通常包括每个样本的分类标签和相应的边界框坐标。

二、评价指标mAP

2.1 影响mAP因素

(1)模型的复杂度

        模型的复杂度越高,模型对数据集的拟合能力越强,模型在测试数据集上的性能也会越好。然而,模型过于复杂会导致模型训练时间过长,从而降低模型性能

(2)数据集的大小

        数据集越大,模型的性能越好。然而,数据集过大,模型的训练时间会增加,从而降低模型性能

(3)超参数选择

        超参数的选择会影响模型的拟合能力,从而影响模型在测试数据集上的性能

2.2 优化mAP方法

(1)数据增强

        通过对训练集加噪声、改变亮度、裁剪、平移、旋转、镜像、cutout等方法,增加样本量,从而提高模型的鲁棒性和泛化能力

(2)主干网络替换

        使用更加先进的模型结构,如ResNet、MobileNet等对模型进行改进,如增加层数、减小学习率

(4)特征融合的替换

        更换特征融合结构,如BiFPN、AFPN、EVC等,增加小目标层(适合小目标较多的数据集)

(5)添加注意力机制

        在特征提取、池化层、特征融合部分添加注意力机制,如SE、CBAM等

(6)损失函数

        选择合适的损失函数,如Focal Loss、EIoU Loss等,让模型关注难以识别的样本,提高模型的精度

(7)NMS和激化函数

三、其他评价指标

3.1 FPS

        FPS(每秒帧率):用于评估模型在给定硬件上的处理速度,即每秒可以处理的图片数量。该指标对于实现实时检测非常重要,因为只有处理速度快,才能满足实时检测的需求。简单来理解就是图像的刷新频率,也就是每秒多少帧,假设目标检测网络处理1帧要0.02s,此时FPS就是1/0.02=50。(轻量化提高FPS是发论文比较流行的一个方向)

3.2 IoU

        IoU(交并比):在目标检测中,用于衡量模型预测框与标注框之间的重叠程度。IoU值越大,表示两个框之间的相似度越高。通常,当IoU值大于0.5时,认为可以检测到目标物体,这个指标常用于评估模型在特定数据集上的检测准确度

IoU = 交集面积/并集面积

这篇关于YOLOv5入门(五)目标检测性能评价指标与结果分析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

POI从入门到实战轻松完成EasyExcel使用及Excel导入导出功能

《POI从入门到实战轻松完成EasyExcel使用及Excel导入导出功能》ApachePOI是一个流行的Java库,用于处理MicrosoftOffice格式文件,提供丰富API来创建、读取和修改O... 目录前言:Apache POIEasyPoiEasyExcel一、EasyExcel1.1、核心特性

Java的"伪泛型"变"真泛型"后对性能的影响

《Java的伪泛型变真泛型后对性能的影响》泛型擦除本质上就是擦除与泛型相关的一切信息,例如参数化类型、类型变量等,Javac还将在需要时进行类型检查及强制类型转换,甚至在必要时会合成桥方法,这篇文章主... 目录1、真假泛型2、性能影响泛型存在于Java源代码中,在编译为字节码文件之前都会进行泛型擦除(ty

慢sql提前分析预警和动态sql替换-Mybatis-SQL

《慢sql提前分析预警和动态sql替换-Mybatis-SQL》为防止慢SQL问题而开发的MyBatis组件,该组件能够在开发、测试阶段自动分析SQL语句,并在出现慢SQL问题时通过Ducc配置实现动... 目录背景解决思路开源方案调研设计方案详细设计使用方法1、引入依赖jar包2、配置组件XML3、核心配

Java NoClassDefFoundError运行时错误分析解决

《JavaNoClassDefFoundError运行时错误分析解决》在Java开发中,NoClassDefFoundError是一种常见的运行时错误,它通常表明Java虚拟机在尝试加载一个类时未能... 目录前言一、问题分析二、报错原因三、解决思路检查类路径配置检查依赖库检查类文件调试类加载器问题四、常见

Python中模块graphviz使用入门

《Python中模块graphviz使用入门》graphviz是一个用于创建和操作图形的Python库,本文主要介绍了Python中模块graphviz使用入门,具有一定的参考价值,感兴趣的可以了解一... 目录1.安装2. 基本用法2.1 输出图像格式2.2 图像style设置2.3 属性2.4 子图和聚

使用Python实现IP地址和端口状态检测与监控

《使用Python实现IP地址和端口状态检测与监控》在网络运维和服务器管理中,IP地址和端口的可用性监控是保障业务连续性的基础需求,本文将带你用Python从零打造一个高可用IP监控系统,感兴趣的小伙... 目录概述:为什么需要IP监控系统使用步骤说明1. 环境准备2. 系统部署3. 核心功能配置系统效果展

Python中的Walrus运算符分析示例详解

《Python中的Walrus运算符分析示例详解》Python中的Walrus运算符(:=)是Python3.8引入的一个新特性,允许在表达式中同时赋值和返回值,它的核心作用是减少重复计算,提升代码简... 目录1. 在循环中避免重复计算2. 在条件判断中同时赋值变量3. 在列表推导式或字典推导式中简化逻辑

Java程序进程起来了但是不打印日志的原因分析

《Java程序进程起来了但是不打印日志的原因分析》:本文主要介绍Java程序进程起来了但是不打印日志的原因分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java程序进程起来了但是不打印日志的原因1、日志配置问题2、日志文件权限问题3、日志文件路径问题4、程序

Java字符串操作技巧之语法、示例与应用场景分析

《Java字符串操作技巧之语法、示例与应用场景分析》在Java算法题和日常开发中,字符串处理是必备的核心技能,本文全面梳理Java中字符串的常用操作语法,结合代码示例、应用场景和避坑指南,可快速掌握字... 目录引言1. 基础操作1.1 创建字符串1.2 获取长度1.3 访问字符2. 字符串处理2.1 子字

Python 迭代器和生成器概念及场景分析

《Python迭代器和生成器概念及场景分析》yield是Python中实现惰性计算和协程的核心工具,结合send()、throw()、close()等方法,能够构建高效、灵活的数据流和控制流模型,这... 目录迭代器的介绍自定义迭代器省略的迭代器生产器的介绍yield的普通用法yield的高级用法yidle