YOLOv8是YOLO系列推出的目标检测模型之一。
YOLOv8提供了5个版本,分别为YOLOv8n、YOLOv8s、
YOLOv8m、YOLOv8l和YOLOv8x。在这几个版本中,
YOLOv8n虽然识别精度稍低,但是其模型架构最轻量化,
检测速度最快[12]。基于这一特性,本研究经过综合考虑,
选择YOLOv8n作为蓝莓果实成熟度识别任务的基础模型。
YOLOv8由输入端、主干网络(Backbone)、颈部
网络(Neck)、头部网络(Head)4部分组成[13]。主干
网络有5个卷积块、4个C2f块、1个SPPF块构成。C2f
块相对于YOLOv5主干网络中的C3块,显著减少了参
数数量,从而降低计算量。颈部网络采用了路径聚合网
络(path aggregation network,PANet)[14],与特征金字
塔网络(feature pyramid network,FPN)[15]相比,PANet
引入了一种自下向上的路径机制,使得底层信息可以更为
顺畅地传递到高层顶部。头部网络将回归分支和预测分
支进行分离,这样做收敛更快,效果更好。头部网络的
设计将回归分支和预测分支进行了分离,这种设计策略
有助于模型在训练过程中更快地收敛,并提升整体性能。
注意力机制:
注意力机制(Attention Mechanism)源于对人类视觉的研究。在认知科学中,由于信息处理的瓶颈,人类会选择性地关注所有信息的一
部分,同时忽略其他可见的信息。为了合理利用有限的视觉信息处理资源,人类需要选择视觉区域中的特定部分,然后集中关注它。例
如,人们在阅读时,通常只有少量要被读取的词会被关注和处理。综上,注意力机制主要有两个方面:决定需要关注输入的哪部分;分配
有限的信息处理资源给重要的部分。
,采
用MobileNetV3作为主干网络显著提升了模型的实时性,
模型参数量达到7.01M;引入CBAM注意力机制有效增
强了模型对蓝莓特征的关注度并抑制了背景干扰,而边
界框损失函数采用SIoU则进一步减小了漏检机会。
蓝莓的成熟度分为4个类别,
分别为未成熟、欠成熟、成熟、过成熟
*为避免训练数据集过少导致的过拟合现象,通过添加噪
声、镜像、翻转及调整亮度等离线数据增强方法对原始
图像进行处理,将原始训练数据集、验证集、测试集分
别扩充至1 400、400、200张。
*池化的功能
先通过与卷积的相同点及不同点说明池化的功能。
池化与卷积的共同点:池化操作也是原图像矩阵(或特征图矩阵)与一个固定形状的窗口(核、或者叫算子)进行计算,
并输出特征图的一种计算方式;
池化与卷积的不同点:卷积操作的卷积核是有数据(权重)的,而池化直接计算池化窗口内的原始数据,
这个计算过程可以是选择最大值、选择最小值或计算平均值,分别对应:最大池化、最小池化和平均池化。
由于在实际使用中最大池化是应用最广泛的池化方法,以下讲述均针对于最大池化进行说明,平均池化和最小池化也是同样的作用原理。
*什么是损失函数:
简单的理解就是每一个样本经过模型后会得到一个预测值,然后得到的预测值和真实值的差值就成为损失(当然损失值越小证明模型越是成功),
我们知道有许多不同种类的损失函数,这些函数本质上就是计算预测值和真实值的差距的一类型函数,
然后经过库(如pytorch,tensorflow等)的封装形成了有具体名字的函数。
*消融实验是一种科学研究方法,用于确定一个条件或参数对结果的影响程度。当研究者提出了一个新的方案或方法时,
消融实验通过逐一控制一个条件或参数,来观察结果的变化,以确定哪个条件或参数对结果的影响更大。
举个例子,假设在目标检测系统中,使用了A、B、C三种方法相加取得了不错的效果。但是我们并不知道这个效果是由于A、B还是C起的作用。
为了确定哪个方法对结果的影响更大,我们可以保留A、B,移除C进行实验,观察结果的变化。通过这样的消融实验,
我们可以最终确定到底是哪个方法对结果的影响更大。总结来说,消融实验类似于"控制变量法",通过逐一控制条件或参数来观察结果的变化,以确定它们对结果的影响程度。
*非极大值抑制NMS是目标检测常用的后处理算法,用于剔除冗余检测框,本文将对可以提升精度的各种NMS方法及其变体进行阶段性总结。
对NMS进行分类,大致可分为以下六种,这里是依据它们在各自论文中的核心论点进行分类,这些算法可以同时属于多种类别。
分类优先:传统NMS,Soft-NMS (ICCV 2017)
定位优先:IoU-Guided NMS (ECCV 2018)
加权平均:Weighted NMS (ICME Workshop 2017)
方差加权平均:Softer-NMS (CVPR 2019)
自适应阈值:Adaptive NMS (CVPR 2019)
+中心点距离:DIoU-NMS (AAAI 2020)
*超参数是什么
超参数则是在算法运行之前手动设置的参数,用于控制模型的行为和性能。
这些超参数的选择会影响到模型的训练速度、收敛性、容量和泛化能力等方面。
例如,学习率、迭代次数、正则化参数、隐藏层的神经元数量等都是常见的超参数。
超参数的选择通常是一个试错的过程,需要根据经验和领域知识进行调整。