11.1学习笔记

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)

*超参数是什么
超参数则是在算法运行之前手动设置的参数,用于控制模型的行为和性能。
这些超参数的选择会影响到模型的训练速度、收敛性、容量和泛化能力等方面。
例如,学习率、迭代次数、正则化参数、隐藏层的神经元数量等都是常见的超参数。
超参数的选择通常是一个试错的过程,需要根据经验和领域知识进行调整。
 

### YOLOv8n 架构详解与运作机制 #### 网络结构设计 YOLOv8n作为YOLOv8家族的一员,在网络结构上继承并优化了前代版本的设计理念。此模型采用了更高效的特征提取器,通过引入CSP(跨阶段部分连接)模块来提升计算效率和性能表现[^1]。 #### 特征金字塔网络(FPN) 为了更好地捕捉多尺度的目标信息,YOLOv8n集成了FPN结构。这种自顶向下的架构能够融合来自不同层次的特征图,从而增强了对于小目标检测的能力。具体来说,高层语义丰富的特征会逐步传递给低层细节较多的部分,使得整个网络可以更加鲁棒地处理各种尺寸的对象。 #### Loss函数定义 损失函数是训练过程中至关重要的组成部分之一。针对分类、位置回归以及置信度预测三个任务,分别设置了交叉熵损失(Cross Entropy Loss),平滑L1损失(Smooth L1 Loss) 和二元交叉熵损失(Binary CrossEntropy Loss)[^1]。这些损失项共同作用于优化最终输出的质量。 #### 数据增强技术 有效的数据预处理方法有助于提高泛化能力。YOLOv8n利用多种方式扩充原始样本集合,比如随机裁剪(Random Crop), 颜色抖动(Color Jittering)等操作,增加了模型面对复杂场景时的表现力。 #### 训练策略调整 合理的超参数设置同样不可忽视。学习率调度(Learning Rate Schedule),权重衰减(Weight Decay)等因素都会影响收敛速度及稳定性。因此,在实际应用中往往需要根据具体情况灵活调节上述配置选项以达到最佳效果。 ```python import torch.nn as nn class YOLOv8n(nn.Module): def __init__(self, num_classes=80): super(YOLOv8n, self).__init__() # Backbone Network with CSP Blocks self.backbone = ... # Define backbone network here # Feature Pyramid Network (FPN) self.fpn = ... # Implement FPN structure here def forward(self, x): features = self.backbone(x) outputs = self.fpn(features) return outputs ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值