一、模型进一步探究
本次赛题中我们使用了YOLO模型,这一次,我们可以做一些更细化的研究。
YOLO算法作为很多次进行迭代,放在本赛题上,正好符合题目数据的处理要求。
在上一个笔记里,我们介绍了YOLO的结构是CNN+池化的组合,属于One-stage算法。
在使用YOLO进行训练时,生成的exp/detect/train
类型的文件夹是训练过程中的一个关键组成部分:
模型权重 (.pt
或 .pth
文件): 训练过程中保存的模型权重,可以用于后续的测试或继续训练。(Baseline代码中的yolov8.pt还有后面run文件夹内的训练过后的pt文件)
日志文件 (.log
文件): 包含训练过程中的所有输出信息,如损失值、精度、速度等。
配置文件 (.yaml
或 .cfg
文件): 训练时使用的配置文件副本,记录了数据路径、类别名、模型架构等设置。(所以为什么代码里面有一句需要写yaml文件,是为了配置训练的环境)
图表和可视化: 有时YOLO会生成训练过程中的性能图表,如损失曲线、精度曲线等。
测试结果: 如果训练过程中包括了测试阶段,可能会有测试结果的保存,如检测结果的图片或统计数据。
如果我们改用其他的方法,例如说Two-Stage方法,那么在运算的时间上可能就会更长,因为赛题目标是为了在视频流中检测,需要一定的时间空间去处理。
YOLO模型的实现步骤:
输入:物体检测算法的输入通常是一张图像或视频帧。
特征提取:算法使用深度学习模型(如卷积神经网络CNN)来提取图像的特征。这些特征捕捉了图像中的视觉信息,为后续的物体识别和定位提供基础。
候选区域生成:在某些检测算法中,如基于区域的卷积神经网络(R-CNN)及其变体,首先需要生成图像中的候选区域,这些区域可能包含感兴趣的物体。
区域分类和边界框回归:对于每个候选区域,算法需要判断它是否包含特定类别的物体,并预测物体的边界框。这通常涉及到分类任务和回归任务的结合。
非极大值抑制(NMS):在检测过程中,可能会产生多个重叠的边界框,用于表示同一物体。NMS是一种常用的技术,用于选择最佳的边界框并去除多余的框
相较于One-stage方法,Two-stage方法通过区域提议网络(RPN:Region Proposal Network)生成候选区域,之后对区域进行分类和边界框的细调整。
下面的表格总结了常见的目标检测网络模型。
模型名称 | 分类 | 图像输入输出尺寸要求 | 具体解释 |
YOLO(v1-v4) | One-Stage | 输入图像有具体的尺寸要求 | 图像输入卷积神经网络+池化,为每一个边框预置一个置信度 置信度的计算公式是: (子目标在方框中的概率*目标框与真实框的交并比),在置信度范围内确定目标的位置 |
YOLO(v5之后) | One-Stage | 没有具体的尺寸要求,输入尺寸最好是16的倍数(可能是因为卷积核是16*16吧) | |
R-CNN系列 | Two-Stage | 无 | 提取候选区域,卷积神经网络使用VGG16,使用SVM进行分类。在加速版的该算法里,主要是加上了RPN(减少选择搜索时间);mask则是加上实例分割机制。 |
SSD | One-Stage | 无 | 通过卷积网络实现特征提取,使用多个不同尺度的特征图检测(用于分别区分小物体和大物体),采用anchor策略,预设不同长宽比例的anchor,基于VGG16网络结构(全连接改为卷积层) |
Resnet18 | One-Stage | 无 | 残差神经网络,误差反向传播。 |
二、进阶方案
1、为了提升识别率,我们可以考虑更换模型,比如说YOLO系列的模型中,不同的参数决定模型的性能。
当然,也需要考虑一定的下载时间,毕竟越厉害的模型可能模型资源也越大。
对于动态视频而言,由于检测的难度不低,因此不会存在精确率饱和的情况。
2.尝试增加训练轮数与训练集样本数量。
3、有关过拟合的解决方案。
(1)判断过拟合的方法。
过拟合的典型表现为训练集上表现很好,验证集上表现很差。
通过下面的val/box_loss(),val/cls_loss(),val/dfl_loss()中可以判断出来。
训练中各个标签的含义:
缩写 | 作用描述 |
epoch | 表示模型在整个训练数据集上进行了一次前向和后向传播的完整周期。 |
train/box_loss | 衡量模型预测的边界框与真实边界框之间差异的损失值。 |
train/cls_loss | 衡量模型预测的类别与真实类别之间差异的损失值。 |
train/dfl_loss | 衡量模型对难分类样本的关注程度,减少易分类样本的影响。 |
metrics/precision(B) | 在训练过程中,预测为正类别中实际为正类别的比例。 |
metrics/recall(B) | 在训练过程中,所有实际正类别中被模型正确预测为正类别的比例。 |
metrics/mAP50(B) | 在50%的IoU阈值下计算,衡量模型的整体性能。 |
metrics/mAP50-95(B) | 在0.5到0.95的IoU阈值范围内计算,提供更全面的模型性能评估。 |
val/box_loss | 模型在未见过的验证集上的边界框损失,用于监控模型的泛化能力。 |
val/cls_loss | 模型在验证集上的分类损失,用于监控模型的泛化能力。 |
val/dfl_loss | 模型在验证集上的难易样本平衡损失。 |
(2)如何解决。
除了可以减少训练集或者减少训练的epoch之外,可以考虑:
神经网络上面:
随机Dropout。
机器学习方面:
K折交叉验证、正则化等。