赞
踩
YOLOv8改进方法
为解决复杂环境下番茄生长点花蕾检测的难题,本研究针对目标尺度多样、外观相似、遮挡严重等问题,从骨干网络(Backbone)、颈部结构(Neck)和检测头(Head)三个方面系统改进了YOLOv8的网络结构和损失函数,旨在提高其对弱小目标的检测精度和环境适应性。
YOLOv8是一种基于Anchor的单阶段目标检测算法,以其检测速度快、精度高、易部署的优势在工业视觉领域得到广泛应用{XXXX1}。如图7所示,YOLOv8以CSPDarknet53为骨干网络,提取多尺度特征;再通过SPP模块和PANet颈部结构融合细粒度和粗粒度特征信息;最后利用YOLOHead输出三个不同尺度的检测框和类别概率。整个过程实现了端到端的目标检测,可同时适应不同大小和宽高比的目标。
【图7 YOLOv8网络架构图】
(a) 整体流程; (b) CSPDarknet53骨干网; © SPP+PANet颈部; (d) YOLOHead检测头
然而,在番茄生长点花蕾检测任务中,YOLOv8仍面临以下局限:
(1) 生长点和花蕾属于小目标,在骨干网络的高层特征图上尺寸较小,容易漏检。而浅层特征语义信息不足,易引入背景干扰。因此,需要一种自适应的特征增强机制,在低层和高层均衡兼顾细节和语义信息。
(2) 番茄植株枝叶茂密,存在大量遮挡和相似的背景区域,易引起检测框的误匹配。而YOLOv8的Neck采用标准卷积进行特征融合,参数量和计算量都较大,不利于实时筛除冗余信息。需要在降低模型复杂度的同时,保持特征的判别力。
(3) 生长点和花蕾在形态和纹理上相似,但尺寸差异较大,标准的IoU损失函数对不同尺度目标一视同仁,容易导致小目标漏检。因此,需要设计对目标尺度自适应的损失函数,加强对小目标的检测能力。
以上问题制约了YOLOv8在番茄生长点花蕾检测中的性能,针对性的模型改进势在必行。
Backbone作为目标检测网络的特征提取器,其性能直接决定了检测的上限。为增强YOLOv8骨干网络CSPDarknet对番茄生长点花蕾的自适应表达能力,本研究在其高、中、低三个尺度的Block中引入了SE(Squeeze-and-Excitation)注意力模块{XXXX2}。SE通过显式建模特征通道间的依赖关系,自适应地调整不同语义的重要性,使骨干网络聚焦于目标相关的区域和特征。
如图8所示,设第 l l l层特征图 F l ∈ R H l × W l × C l F_l \in \mathbb{R}^{H_l\times W_l\times C_l} Fl∈RHl×Wl×Cl,SE模块首先对其在空间维度做全局平均池化,得到通道描述子 z l ∈ R C l z_l\in \mathbb{R}^{C_l} zl∈RCl:
z l = 1 H l W l ∑ i = 1 H l ∑ j = 1 W l F l ( i , j ) z_l=\frac{1}{H_lW_l}\sum_{i=1}^{H_l}\sum_{j=1}^{W_l}F_l(i,j) zl=HlWl1i=1∑Hlj=1∑WlFl(i,j)
其中 ( i , j ) (i,j) (i,j)为空间坐标。 z l z_l zl实际上是一个包含全局感受野的特征向量,聚合了整个特征图的上下文信息。然后,SE通过两个全连接层和一个Sigmoid函数对 z l z_l zl进行非线性变换,生成通道注意力权重 a l ∈ R C l \boldsymbol{a}_l\in \mathbb{R}^{C_l} al∈RCl:
a l = σ ( W 2 δ ( W 1 z l ) ) \boldsymbol{a}_l=\sigma(\boldsymbol{W}_2\delta(\boldsymbol{W}_1\boldsymbol{z}_l)) al=σ(W2δ(W1zl))
其中 W 1 ∈ R C l r × C l , W 2 ∈ R C l × C l r \boldsymbol{W}_1\in\mathbb{R}^{\frac{C_l}{r}\times C_l},\boldsymbol{W}_2\in\mathbb{R}^{C_l\times \frac{C_l}{r}} W1∈RrCl×Cl,W2∈RCl×rCl分别为两个全连接层的权重矩阵, δ \delta δ为ReLU函数, σ \sigma σ为Sigmoid函数, r r r为缩放比例(通常取16)。这两个全连接层起到了bottleneck的作用,在减少参数量的同时增加了非线性。最后,将 a l \boldsymbol{a}_l al与 F l F_l Fl逐通道相乘,得到注意力加权后的特征图 F ^ l \hat{F}_l F^l:
F ^ l ( i , j , c ) = a l ( c ) ⋅ F l ( i , j , c ) \hat{F}_l(i,j,c)=a_l(c)\cdot F_l(i,j,c) F^l(i,j,c)=al(c)⋅Fl(i,j,c)
【图8 SE注意力模块结构示意图】
SE模块结构简洁,计算效率高,可以即插即用地嵌入到任意卷积网络中。其优势主要体现在:
(1) 通过引入通道注意力,自适应增强目标相关通道的权重,抑制背景干扰通道,提高检测网络的判别力;
(2) 利用bottleneck结构减少了全连接层的参数量,每个SE模块的时空复杂度均为
O
(
C
l
)
\mathcal{O}(C_l)
O(Cl),几乎不增加推理开销;
(3) 通过在高低层同时嵌入SE模块,在提取尺度不变语义特征的同时,也兼顾了位置敏感的细节特征。
因此,SE模块是一种高效、灵活、泛化性好的注意力机制,非常适合用于提升YOLOv8的小目标检测能力。
除了SE模块本身的设计,其嵌入位置也会影响检测性能。为寻找最优的SE嵌入位置组合,本研究采用了基于梯度的NAS(Neural Architecture Search)方法{XXXX3},即将待搜索的超参数(每一层是否嵌入SE)建模为伯努利分布,通过梯度反向传播联合优化超参数分布和网络权重,找到在验证集上表现最佳的嵌入方案。如图9所示,搜索过程可分为三步:
(1) 参数化:设骨干网共 L L L个Block,每个Block是否嵌入SE构成一个 L L L维二值向量 z ∈ { 0 , 1 } L \boldsymbol{z}\in\{0,1\}^L z∈{0,1}L,服从参数为 α ∈ R L \boldsymbol{\alpha}\in\mathbb{R}^L α∈RL的伯努利分布:
P ( z ∣ α ) = ∏ l = 1 L α l z l ( 1 − α l ) 1 − z l P(\boldsymbol{z}|\boldsymbol{\alpha})=\prod_{l=1}^L\alpha_l^{z_l}(1-\alpha_l)^{1-z_l} P(z∣α)=l=1∏Lαlzl(1−αl)1−zl
(2) 松弛:将 z \boldsymbol{z} z松弛为连续值 z ^ \hat{\boldsymbol{z}} z^,每个分量 z ^ l ∈ [ 0 , 1 ] \hat{z}_l\in[0,1] z^l∈[0,1]表示第 l l l个Block嵌入SE的概率,由 α l \alpha_l αl通过Sigmoid变换得到:
z ^ l = σ ( log α l 1 − α l ) \hat{z}_l=\sigma(\log \frac{\alpha_l}{1-\alpha_l}) z^l=σ(log1−αlαl)
则Block l l l输出的特征可表示为 F l o u t = z ^ l S E ( F l i n ) + ( 1 − z ^ l ) F l i n F_l^{out}=\hat{z}_lSE(F_l^{in})+(1-\hat{z}_l)F_l^{in} Flout=z^lSE(Flin)+(1−z^l)Flin。
(3) 优化:令 L t r ( z ^ , w ) \mathcal{L}_{tr}(\hat{\boldsymbol{z}},\boldsymbol{w}) Ltr(z^,w)为训练集上的损失函数, w \boldsymbol{w} w为网络权重,则联合优化的目标为最小化验证集损失的期望:
min
α
E
z
∼
P
(
z
∣
α
)
[
L
v
a
(
z
^
,
w
∗
(
z
^
)
)
]
s.t.
w
∗
(
z
^
)
=
arg
min
w
L
t
r
(
z
^
,
w
)
由于 L v a \mathcal{L}_{va} Lva对 α \boldsymbol{\alpha} α可微,可用梯度反向传播联合优化 α \boldsymbol{\alpha} α和 w \boldsymbol{w} w。搜索结束后,每个Block是否嵌入SE取决于 z ^ l \hat{z}_l z^l的大小,当 z ^ l > 0.5 \hat{z}_l>0.5 z^l>0.5时嵌入SE,否则不嵌入。
【图9 基于梯度的SE嵌入位置搜索流程】
为避免搜索过程过拟合,本研究采用了交叉验证的方式,即将原始数据集划分为4个fold,每次取其中3个fold作为训练集,余下1个fold作为验证集,轮流交叉搜索4次,得到4组SE嵌入方案。实验发现,不同fold得到的最优嵌入位置组合虽有差异,但整体趋势一致:浅层Block(1,2,3)倾向于不嵌入SE,中层Block(4,5,6,7)倾向于嵌入SE,高层Block(8,9,10)倾向于不嵌入SE。这可能是因为:浅层语义信息简单,SE收益有限;高层分辨率低,SE可能损失细节;中层兼具一定语义和位置信息,最适合嵌入SE。
综合4组搜索结果,最终确定在第4,5,6,7个Block嵌入SE模块,记为SE@4567。相比直接在所有Block嵌入SE,该方案可在几乎不损失精度的情况下,减少约一半的计算开销。SE@4567成为后续实验的默认配置。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。