赞
踩
前言
通过前面几篇文章,已经完成数据集制作、环境配置(服务器)和模型训练,本篇博客主要讲解训练yolov5的train.py生成的结果文件各个图片和其中指标的含义,以及在评估模型和发表论文时主要用到的参数~
下面的文章围绕以下这个结果文件讲述:
往期回顾
YOLOv5入门(二)处理自己数据集(标签统计、数据集划分、数据增强)
YOLOv5入门(三)使用云服务器autoDL、VSCode连接和WinSCP文件上传
目录
1.12events.out.tfevents.1714616288.autodl-container-bbd74aba75-e1ff89fb.2194.0
以上两个文件就是我们训练好的权重:
best.pt:训练过程中在验证集上表现最好的模型权重。在训练过程中,每个epoch结束后都会对验证集进行一次评估,记录最好的模型权重
last.pt:模型训练最后一次迭代结束后的模型权重
二者区别:best.pt用于训练后对模型进行推理和部署;last.pt用于继续训练模型,包含最后一次训练迭代结束时的模型权重,可以从上一次训练结束的地方继续训练模型。
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)
F1-Confidence Curve就是F1-Score随着Confience逐渐增高而变化的曲线。
横坐标:Confidence(置信度)
纵坐标:F1-Score
置信度含义:模型判定一个物体并不是百分百判定它是属于某个分类,而是会给予它一个概率,Confidence就是设置的阈值,如果超过这个概率那么就确定为某个分类。
保存我们训练时指定的参数,内容如下:
- 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
labels图片代表每个检测到的目标的类别和边界框信息。
1、第一个图是训练集的数据量,每个类别数;
2、第二个图是框的尺寸和数量;
3、第三个图是中心点相对于整幅图的位置;
4、第四个图是目标相对于整幅图的高宽比例;
含义:指的是一种图形,用于显示目标检测算法在训练过程中预测标签之间的相关性。
作用:体现中心点横纵坐标以及框的高度间的关系
表示中心点坐标x、y,以及框的高宽之间的关系。每行的最后一幅图代表的是x,y,宽和高的分布情况;
1、第一行的图表明中心点横坐标x的分布情况,可以看到大部分集中在整幅图的中心位置;
2、第二行的图表明中心点纵坐标y与横坐标x,y的分布情况
3、第三行的图表明框的宽与横坐标x,y和款的宽的分布情况
4、第四行的图表明框的高与横坐标x,y和框的宽、高的分布情况
包含了数据集路径、权重路径,项目名称等一系列设置性参数
- weights: yolov5s.pt
- cfg: /root/yolov5-7.0/models/yolov5s_tls.yaml
- data: /root/yolov5-7.0/data/traffic_lights.yaml
- hyp:
- 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
- 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
准确率(Precision)与置信度(confidence)之间的关系图
召回率(Recall)和置信度(Confidence)之间的关系
PR曲线中的P代表的是precision(精准率),R代表的是recall(召回率),其代表的是精准率与召回率的关系,一般情况下,将recall设置为横坐标,precision设置为纵坐标。PR曲线下围成的面积即AP,所有类别AP平均值即mAP
全部列从左往右依次为:训练轮数、训练集边界框损失、训练集置信度损失、训练集分类损失、精确率、召回率、均值平均精度mAP@0.5、均值平均精度mAP@0.5:0.95、验证集边界框损失、验证集目标检测损失、验证集分类损失、学习率
TensorBoard日志文件,用于记录训练过程中的各种指标,比如损失、准确率、其他统计数据,可以通过TensorBoard来可视化这些指标,以监控和分析模型的训练进度和性能。
(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
用于训练模型性能的标签:是YOLOv5模型训练集的图片,其中x表示训练集的批次编号。train_batchx中每个图片都有一个对应的标签,用于描述图像中的目标的位置和类别信息。
验证集第x轮的实际标签:指验证集中一个batch的真实标签和框的信息,其中x为batch的编号。这些信息通常包括每个样本的分类标签和相应的边界框坐标。
验证集第x轮的预测标签:指验证集中一个batch的预测标签和框的信息,其中x为batch的编号。这些信息通常包括每个样本的分类标签和相应的边界框坐标。
(1)模型的复杂度
模型的复杂度越高,模型对数据集的拟合能力越强,模型在测试数据集上的性能也会越好。然而,模型过于复杂会导致模型训练时间过长,从而降低模型性能
(2)数据集的大小
数据集越大,模型的性能越好。然而,数据集过大,模型的训练时间会增加,从而降低模型性能
(3)超参数选择
超参数的选择会影响模型的拟合能力,从而影响模型在测试数据集上的性能
(1)数据增强
通过对训练集加噪声、改变亮度、裁剪、平移、旋转、镜像、cutout等方法,增加样本量,从而提高模型的鲁棒性和泛化能力
(2)主干网络替换
使用更加先进的模型结构,如ResNet、MobileNet等对模型进行改进,如增加层数、减小学习率
(4)特征融合的替换
更换特征融合结构,如BiFPN、AFPN、EVC等,增加小目标层(适合小目标较多的数据集)
(5)添加注意力机制
在特征提取、池化层、特征融合部分添加注意力机制,如SE、CBAM等
(6)损失函数
选择合适的损失函数,如Focal Loss、EIoU Loss等,让模型关注难以识别的样本,提高模型的精度
(7)NMS和激化函数
FPS(每秒帧率):用于评估模型在给定硬件上的处理速度,即每秒可以处理的图片数量。该指标对于实现实时检测非常重要,因为只有处理速度快,才能满足实时检测的需求。简单来理解就是图像的刷新频率,也就是每秒多少帧,假设目标检测网络处理1帧要0.02s,此时FPS就是1/0.02=50。(轻量化提高FPS是发论文比较流行的一个方向)
FPS计算问题
(1)参数配置:
data为自己数据集对应的yaml文件
weights为训练自己数据集得到的权重
batchsize设置为1
(3)运行val.py生成结果如下:
(3)FPS计算
pre-process:图像预处理时间,包括图像保持长宽比缩放和padding填充,通道变换(HWC->CHW)和升维处理等
inference:推理速度,指预处理之后的图像输入模型到模型输出结果的时间
NMS:后处理时间,对模型输出结果进行转换
FPS = 1000ms/pre-process+inference+NMS(1000ms除以三个时间之和)
IoU(交并比):在目标检测中,用于衡量模型预测框与标注框之间的重叠程度。IoU值越大,表示两个框之间的相似度越高。通常,当IoU值大于0.5时,认为可以检测到目标物体,这个指标常用于评估模型在特定数据集上的检测准确度
IoU = 交集面积/并集面积
注意事项:
涨点一般看的是训练完权重之后运行val.py得到的map值,也可以看train的最大值。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。