当前位置: 首页 > news >正文

Yolo11改进策略:注意力改进|Neck层改进|SCSA,探索空间与通道注意力之间的协同效应|即插即用

摘要

论文介绍

  • 摘要内容:论文提出了一种新的空间与通道协同注意模块(SCSA),旨在通过结合空间注意力和通道注意力,提高各种下游视觉任务的性能。SCSA由可共享多语义空间注意力(SMSA)和渐进通道自注意力(PCSA)两部分组成,通过整合多语义信息并有效引导通道再校准,实现了性能的提升。

创新点

  • 多语义空间注意力:利用多尺度深度共享的1D卷积捕获多语义空间信息,增强了局部和全局特征表示。
  • 渐进通道自注意力:采用输入感知的自注意力来细化通道特征,有效缓解语义差异,确保跨通道的稳健特征整合。
  • 协同作用:通过空间注意力引导通道注意力学习,实现了空间与通道注意力的有效协同,提高了模型性能。

方法

  • SMSA模块:首先采用多尺度、深度共享的1D卷积从四个独立的子特征中提取不同语义级别的空间信息,并通过组归一化加速模型收敛。然后将SMSA调制后的特征图输入到PCSA中。
  • PCSA模块:结合了渐进式压缩和通道特定的单头自注意力机制,利用输入感知的单头自注意力机制有效地探索通道相似性,从而缓解SMSA中不同子特征之间的语义差异,并促进信息融合。

模块作用

  • 提高特征提取能力:SCSA模块通过整合多语义空间信息和通道注意力,提高了模型对特征的提取能力,使得模型能够从多个角度学习到更高质量的表征。
  • 增强泛化能力:在多个基准数据集上的实验结果表明,SCSA模块不仅超越了当前的即插即用型最先进注意力方法,而且在各种任务场景中展现出增强的泛化能力。

改进的效果

  • 应用于Yolo11:将SCSA模块加入到Yolo11的neck中,通过整合多语义信息和协同空间与通道注意力,提高了neck部分的特征提取能力。
  • 性能提升:在目标检测任务中,使用SCSA模块改进后的Yolo11模型在准确率、召回率等关键指标上均实现了显著提升。同时,由于SCSA模块的设计具有轻量级和高效性,因此改进后的模型在推理速度和内存占用方面也得到了优化。
  • 实际应用:改进后的Yolo11模型在复杂场景下的目标检测任务中表现出色,具有更高的鲁棒性和准确性,为实际应用提供了有力的支持。

论文翻译:《SCSA:探索空间与通道注意力之间的协同效应》

https://arxiv.org/pdf/2407.05128
通道注意力和空间注意力分别为各种下游视觉任务在提取特征依赖性和空间结构关系方面带来了显著改进。通道注意力和空间注意力的结合使用被广泛认为有利于进一步提升性能;然而,通道注意力和空间注意力之间的协同作用,尤其是在空间引导和缓解语义差异方面,尚未得到深入研究。这促使我们提出了一种新的空间与通道协同注意模块(SCSA),该模块涉及我们在多个语义层面上对空间注意力和通道注意力之间协同关系的研究。我们的SCSA由两部分组成:可共享多语义空间注意力(SMSA)和渐进通道自注意力(PCSA)。SMSA整合了多语义信息,并利用渐进压缩策略将判别性空间先验注入到PCSA的通道自注意力中,有效引导通道再校准。此外,PCSA中基于通道单头自注意力机制的稳健特征交互进一步缓解了SMSA中不同子特征之间多语义信息的差异。我们在七个基准数据集上进行了大量实验,包括在ImageNet-1K上的分类、在MSCOCO上的目标检测、在ADE20K上的分割以及四个其他复杂场景检测数据集。实验结果表明,我们提出的SCSA不仅超越了当前的即插即用型最先进注意力方法,而且在各种任务场景中展现出增强的泛化能力。代码和模型可在以下网址获取:https://github.com/HZAIZJNU/SCSA。

1 引言

注意力机制通过增强感兴趣区域的表示,有助于学习更具判别性的特征,并被广泛用于重新分配通道关系和空间依赖性。现有的即插即用型注意力方法主要可分为三类:通道注意力[23, 27, 62, 55, 31, 41]、空间注意力[22, 56, 42, 9]和混合通道-空间注意力[57, 40, 38, 14, 20, 65, 39, 61]。它们的侧重点不同:通道注意力通过自适应地为不同通道加权来增强关键对象特征的提取,而空间注意力则旨在增强关键空间信息。空间信息在像素级别表示语义特征对象。局部空间信息捕获低语义对象,如精细细节和纹理,而全局空间信息感知高语义对象,如整体形状。

在基于卷积神经网络(CNN)架构的模型中,深度卷积算子通常用于特征提取。这些算子生成的梯度可以在不同的特征通道之间流动和传播,从而促进卷积权重的更新并有效表示图像特征。然而,众多研究表明,仅依赖卷积分支进行特征提取会导致梯度流失真[54],从而导致关键信息丢失或相似特征冗余[4, 17, 66, 35]。为解决此问题,已提出了一些基于激发和抑制机制[23]的方法,这些方法将特征学习重点放在对不同任务最关键的特征上,从而增强了模型的表示能力。特别是,CBAM[57]通过串联通道和空间注意力分别聚合全局空间和通道信息,但压缩所有通道信息会导致所有空间结构之间共享信息。这削弱了空间上下文对不同特征图的适应性。为克服此问题,CPCA[24]引入了通道优先注意力机制和深度条纹卷积,独立提取每个特征的空间结构,显著提高了医学图像分割性能。此外,基于分组注意力和跨空间多尺度交互的EMA[39]模块有效融合了长短期依赖的空间信息,但忽略了组间特征交互。

在这里插入图片描述

尽管这些混合注意力机制增强了表征学习,但它们忽视了跨空间和通道维度的固有多语义信息,以及多语义特征的交互和差异缓解,这对于检测和分割等细粒度任务至关重要,从而限制了这些方法的即插即用能力。如图1所示,我们分析了图像的几个特征图,并观察到不同的空间区域由于不同通道的特征选择性而表现出固有的语义差异和相似性。

基于这一见解,我们提出了一个问题:是否可以利用不同特征通道之间固有的空间语义差异来指导重要特征的学习?此外,考虑到语义差异的存在,我们如何缓解这些多语义差异并促进多语义信息的更好融合?

与上述方法不同,我们从以下三个方面探索上述问题的解决方案:维度解耦、轻量级多语义指导和语义差异缓解,并提出了一种新颖的、即插即用的空间和通道协同注意力(SCSA)。我们的SCSA由可共享的多语义空间注意力(SMSA)和顺序连接的渐进式通道自注意力(PCSA)组成。本研究首先采用多尺度、深度共享的1D卷积从四个独立的子特征中提取不同语义级别的空间信息。我们在四个子特征上利用组归一化[58]来加速模型收敛,同时避免引入批次噪声和不同子特征之间语义信息的干扰。随后,我们将SMSA调制后的特征图输入到PCSA中,结合了渐进式压缩和通道特定的单头自注意力机制。我们的渐进式压缩策略旨在最小化计算复杂度,同时保留SMSA中的空间先验,提供了一个实用的折中方案。此外,我们的PCSA利用输入感知的单头自注意力机制有效地探索通道相似性,从而缓解SMSA中不同子特征之间的语义差异,并促进信息融合。我们在四个视觉任务和七个基准数据集上进行了广泛的实验,证明了我们的SCSA中应用的多语义协同的有效性。综上所述,我们的贡献如下:

  • 我们指出了现有即插即用注意力机制的两大关键限制:1)在空间和通道维度上,利用固有的多语义空间信息指导关键特征提取的能力不足;2)对特征图中多语义信息引起的语义差异和交互处理不当。
  • 我们提出了空间和通道协同注意力(SCSA),包括SMSA和PCSA模块。SMSA利用多尺度深度共享的1D卷积捕获多语义空间信息,增强了局部和全局特征表示。PCSA采用输入感知的自注意力来细化通道特征,有效缓解语义差异,确保跨通道的稳健特征整合。
  • 我们的方法在包括ImageNet-1K(分类)、MSCOCO(目标检测)和ADE20K(分割)在内的多个基准测试中优于其他最先进的即插即用注意力机制,并在低光照和小物体基准测试等各种复杂场景中表现出强大的泛化能力。

2 相关工作

2.1 多语义空间信息

多语义空间结构融入了丰富的类别和上下文信息。有效整合全局上下文和局部空间先验,能够使模型从多个角度学习到更高质量的表征。InceptionNets[49,25,50,48]开创了多分支方法,采用并行的不同尺寸的标准卷积来捕获不同的感受野,显著提升了特征提取能力。SKNet[27]将多尺度卷积融入通道注意力中,使用SENet[23]提出的挤压-激励机制来整合具有不同感受野的空间先验。得益于全局上下文建模能力,ViT[9]采用多头自注意力(MHSA)来捕捉不同语义子特征中不同空间位置的相关性,并辅以位置嵌入来补偿空间先验,在各种下游任务中取得了显著的成功。目前,许多研究基于多语义思想开发高效模型[66,35,4,53],以减少参数和计算量,从而提高推理效率。Mamba[16]引入了一个使用扫描机制和GPU并行性的可选状态空间模型,以线性时间复杂度建模全局上下文依赖。此外,VMamba[32]提出了一个跨扫描模块,将1D序列扫描扩展到2D图像扫描,有效地从四个方向捕获多语义全局上下文信息。

2.2 注意力分解

将注意力机制融入主流主干网络或特征融合网络,能够增强对细粒度特征的理解,并提高特征表征的准确性。然而,这不可避免地会导致内存使用量和计算时间的增加。CA[20]和ELA[61]分别在高度( H H H)和宽度( W W W)维度上进行单向空间压缩,在一个方向上保留空间结构,同时在另一个方向上聚合全局空间信息,从而减轻全局压缩带来的信息损失。SA[65]和EMA[39]将特征重塑为子特征,以减少注意力计算和参数。然而,它们在受GPU带宽限制的高维B(批量大小)和C(通道数)中使用的重塑操作会导致昂贵的数据传输,严重影响推理速度。CPCA[24]在独立通道中使用条纹卷积来减少大核卷积中的参数。近期研究还在MHSA中应用维度分解,其中RMT[12]分别在 H H H W W W维度上单独应用MHSA,以最小化计算成本。

在本研究中,我们基于注意力分解的概念,提出了一个整合多语义空间信息的轻量级引导模块。此外,我们还设计了一个基于渐进式通道单头自注意力机制的多语义差异缓解模块,旨在探索空间维度和通道维度之间更优化的协同关系。

3 方法

在本节中,我们首先讨论SMSA模块,该模块探索了轻量级多语义信息引导的好处。接下来,我们介绍PCSA模块,该模块利用渐进式压缩策略和通道自注意力来缓解语义差异。多语义引导和语义差异缓解的协同作用促使我们提出了SCSA模块。总体架构如图2所示。
在这里插入图片描述

3.1. 共享多语义空间注意力:空间与通道分解

神经网络架构中的分解技术显著减少了参数数量和计算开销。受Transformer[52]中1D序列结构的启发,在我们的工作中,我们沿着高度和宽度维度对给定输入 X ∈ R B × C × H × W X \in \mathbb{R}^{B \times C \times H \times W} XRB×C×H×W进行分解。我们对每个维度应用全局平均池化,从而创建两个单向1D序列结构: X H ∈ R B × C × W X_{H} \in \mathbb{R}^{B \times C \times W} XHRB×C×W X W ∈ R B × C × H X_{W} \in \mathbb{R}^{B \times C \times H} XWRB×C×H。为了学习不同的空间分布和上下文关系,我们将特征集划分为 K K K个大小相同、独立的子特征 X H i X_{H}^{i} XHi X W i X_{W}^{i} XWi,每个子特征的通道数为 C K \frac{C}{K} KC。在本文中,我们设置默认值 K = 4 K=4 K=4。分解为子特征的过程如下:

X H i = X H [ : , ( i − 1 ) × C K : i × C K , : ] X W i = X W [ : , ( i − 1 ) × C K : i × C K , : ] \begin{array}{l} X_{H}^{i}=X_{H}\left[:,(i-1) \times \frac{C}{K}: i \times \frac{C}{K},:\right] \\ X_{W}^{i}=X_{W}\left[:,(i-1) \times \frac{C}{K}: i \times \frac{C}{K},:\right] \end{array} XHi=XH[:,(i1)×KC:i×KC,:]XWi=XW[:,(i1)×KC:i×KC,:]

X i X^{i} Xi表示第 i i i个子特征,其中 i ∈ [ 1 , K ] i \in[1, K] i[1,K]。每个子特征是独立的,便于高效地提取多语义空间信息。

在这里插入图片描述

在不相交子特征上应用轻量级卷积策略。在将特征图划分为独立子特征后,我们的目标是在每个子特征内高效地捕获不同的语义空间结构。受减少特征冗余的广泛研究启发[35, 17, 4],这些研究揭示出冗余可能源于特征之间的强烈相互作用,我们也观察到特征之间存在不同的空间结构,如图1所示。基于这些见解,并旨在丰富语义信息、增强语义一致性和最小化语义差距,我们对四个子特征应用了核大小为3、5、7和9的深度一维卷积。此外,为了解决将特征分解为H和W维度并分别应用一维卷积导致的感受野受限问题,我们使用轻量级共享卷积进行对齐,通过在这两个维度上学习一致特征来隐式建模它们之间的依赖关系。关于它们的消融实验细节见表1。提取多语义空间信息的实现过程定义如下:

X ~ H i = D W C o n v 1 d k i C R → C R ( X H i ) X ~ W i = D W C o n v 1 d k i C R → C R ( X W i ) \begin{array}{l} \tilde{X}_{H}^{i}=DWConv1d_{k_{i}}^{\frac{C}{R} \rightarrow \frac{C}{R}}\left(X_{H}^{i}\right) \\ \tilde{X}_{W}^{i}=DWConv1d_{k_{i}}^{\frac{C}{R} \rightarrow \frac{C}{R}}\left(X_{W}^{i}\right) \end{array} X~Hi=DWConv1dkiRCRC(XHi)X~Wi=DWConv1dkiRCRC(XWi)

X ~ i \tilde{X}^{i} X~i表示在轻量级卷积操作后获得的第 i i i个子特征的空间结构信息。 k i k_{i} ki表示应用于第 i i i个子特征的卷积核。

在分解独立子特征并捕获不同语义的空间信息后,我们需要构建空间注意力图。具体而言,我们将不同的语义子特征进行拼接,并使用具有 K K K组的组归一化(GN)[58]进行归一化。我们选择GN而不是常见的批量归一化(BN)[26],因为我们的研究发现GN在区分子特征之间的语义差异方面表现更优。GN可以对每个子特征进行独立归一化,而不会引入批次统计噪声,有效减轻子特征之间的语义干扰并防止注意力分散。这一设计通过表1中的消融实验得到了验证。最后,使用简单的Sigmoid激活函数生成空间注意力,该函数激活并抑制特定的空间区域。输出特征的计算如下:

A t t n H = σ ( G N H K ( C o n c a t ( X ~ H 1 , X ~ H 2 , … , X ~ H K ) ) ) A t t n W = σ ( G N W K ( C o n c a t ( X ~ W 1 , X ~ W 2 , … , X ~ W K ) ) ) S M S A ( X ) = X s = A t t n H × A t t n W × X \begin{array}{c} Attn_{H}=\sigma\left(GN_{H}^{K}\left(Concat\left(\tilde{X}_{H}^{1}, \tilde{X}_{H}^{2}, \ldots, \tilde{X}_{H}^{K}\right)\right)\right) \\ Attn_{W}=\sigma\left(GN_{W}^{K}\left(Concat\left(\tilde{X}_{W}^{1}, \tilde{X}_{W}^{2}, \ldots, \tilde{X}_{W}^{K}\right)\right)\right) \\ SMSA(X)=X_{s}=Attn_{H} \times Attn_{W} \times X \end{array} AttnH=σ(GNHK(Concat(X~H1,X~H2,,X~HK)))AttnW=σ(GNWK(Concat(X~W1,X~W2,,X~WK)))SMSA(X)=Xs=AttnH×AttnW×X

σ ( ⋅ ) \sigma(\cdot) σ()表示Sigmoid归一化,而 G N H K ( ⋅ ) GN_{H}^{K}(\cdot) GNHK() G N W K ( ⋅ ) GN_{W}^{K}(\cdot) GNWK()分别表示沿H和W维度进行K组归一化的GN。

3.2 渐进式通道自注意力

计算通道注意力的常用方法是通过探索通道之间依赖关系的卷积操作[23,55]。使用卷积来建模特征之间的相似性有些不直观,并且难以有效测量不同通道之间的相似性。受ViT[9]在利用多头自注意力(MHSA)建模空间中不同标记之间相似性方面的显著优势启发,我们提出将单头自注意力(SHSA)与来自多语义空间注意力(SMSA)的调制空间先验相结合,以计算通道间相似性。此外,为了保留和利用SMSA提取的多语义空间信息,并降低SHSA的计算成本,我们采用基于平均池化的渐进压缩方法,该方法在我们的协同作用中起指导作用。与使用常见的卷积操作建模通道依赖性相比,渐进式通道自注意力(PCSA)表现出更强的输入感知能力,并有效利用SMSA提供的空间先验来加深学习。我们PCSA的实现细节如下:

X p = P o o l ( 7 , 7 ) ( H , W ) → ( H ′ , W ′ ) ( X s ) F p r o j = D W C o n v 1 d ( 1 , 1 ) C → C Q = F p r o j Q ( X p ) , K = F p r o j K ( X p ) , V = F p r o j V ( X p ) X a t t n = A t t n ( Q , K , V ) = S o f t m a x ( Q K T C ) V P C S A ( X s ) = X c = X s × σ ( P o o l ( H ′ , W ′ ) ( H ′ , W ′ ) → ( 1 , 1 ) ( X a t t n ) ) \begin{array}{c} X_{p}=Pool_{(7,7)}^{(H, W) \rightarrow\left(H^{\prime}, W^{\prime}\right)}\left(X_{s}\right) \\ F_{proj}=DWConv1d_{(1,1)}^{C \rightarrow C} \\ Q=F_{proj}^{Q}\left(X_{p}\right), K=F_{proj}^{K}\left(X_{p}\right), V=F_{proj}^{V}\left(X_{p}\right) \\ X_{attn}=Attn(Q, K, V)=Softmax\left(\frac{QK^{T}}{\sqrt{C}}\right)V \\ PCSA\left(X_{s}\right)=X_{c}=X_{s} \times \sigma\left(Pool_{\left(H^{\prime}, W^{\prime}\right)}^{\left(H^{\prime}, W^{\prime}\right) \rightarrow(1,1)}\left(X_{attn}\right)\right) \end{array} Xp=Pool(7,7)(H,W)(H,W)(Xs)Fproj=DWConv1d(1,1)CCQ=FprojQ(Xp),K=FprojK(Xp),V=FprojV(Xp)Xattn=Attn(Q,K,V)=Softmax(C QKT)VPCSA(Xs)=Xc=Xs×σ(Pool(H,W)(H,W)(1,1)(Xattn))

P o o l ( k , k ) ( H , W ) → ( H ′ , W ′ ) ( ⋅ ) Pool_{(k, k)}^{(H, W) \rightarrow\left(H^{\prime}, W^{\prime}\right)}(\cdot) Pool(k,k)(H,W)(H,W)()表示核大小为 k × k k \times k k×k的池化操作,将分辨率从 ( H , W ) (H, W) (H,W)缩放到 ( H ′ , W ′ ) \left(H^{\prime}, W^{\prime}\right) (H,W) F p r o j ( ⋅ ) F_{proj}(\cdot) Fproj()表示生成查询(Q)、键(K)和值(V)的线性投影。

值得注意的是,与ViT中的MHSA不同,其中 Q , K , V ∈ R B × N × C Q, K, V \in \mathbb{R}^{B \times N \times C} Q,K,VRB×N×C N = H W N=HW N=HW,在我们的PCSA的通道注意力单头自注意力(CA-SHSA)中,自注意力是沿通道维度计算的,其中 Q , K , V ∈ R B × C × N Q, K, V \in \mathbb{R}^{B \times C \times N} Q,K,VRB×C×N。此外,为了与SMSA中分解的不同子特征充分交互,我们选择实现更简单的单头自注意力机制,而不是将多头自注意力与通道混洗相结合[66]。

3.3 协同效应

空间与通道注意力机制的协同旨在相互补充。在我们的工作中,我们提出了一种通过空间注意力引导通道注意力学习的新概念。受CBAM [57]和CPCA[24]之间联系的启发,我们采用类似的串行结构来整合我们的空间多语义注意力(SMSA)和位置敏感通道注意力(PSCA)模块,形成空间通道协同注意力(SCSA)。不同的是,首先应用空间注意力SMSA,然后是通道注意力PSCA。前者从每个特征中提取多语义空间信息,为后者提供精确的空间先验;后者通过利用整体特征图 X X X来细化局部子特征 X i X^{i} Xi的语义理解,从而减轻前者中多尺度卷积引起的语义差异。此外,与以前的方法[23,57,40,20]不同,我们没有采用通道压缩,有效防止了关键特征的丢失。最终,我们构建的SCSA如下:

SCSA ( X ) = PCSA ( SMSA ( X ) ) \text{SCSA}(X)=\text{PCSA}(\text{SMSA}(X)) SCSA(X)=PCSA(SMSA(X))

3.4 注意力机制的整合

在我们的工作中,我们将提出的SCSA整合到不同的主干网络中,以验证其在增强特征提取能力方面的有效性。如图3所示,SCSA被整合到四个主流模块中:(a)和(b)代表基于ResNet [19]及其变体系列[60]的模块;©代表基于MobileNet系列[46, 21, 37]的倒置残差结构;(d)代表重参数化方法代表RepVGG [8]的模块结构。

在这里插入图片描述

4 实验

4.1 实验设置

在本节中,我们首先介绍实验细节。接下来,我们在四个视觉任务上进行了实验,将我们提出的SCSA与其他最先进的注意力机制进行了比较。之后,在第4.5节中,我们从四个不同角度对我们精心设计的SCSA进行了全面的消融研究。

数据集。我们在四个视觉任务上验证了方法的有效性。对于图像分类,我们选择了广泛使用的ImageNet-1K [44]数据集。在目标检测中,我们使用了几个具有挑战性的检测数据集,包括MSCOCO [30]、Pascal VOC [11]、VisDrone [10]和ExDark [34]。对于语义分割和实例分割,我们选择了广泛使用的ADE20K [67]和MSCOCO [30]基准。

我们热衷于探索注意力机制是否能更有效地应用于各种复杂场景任务。虽然之前的研究[23,55,65,39,57,61]在广泛使用的基准(如ImageNet-1K [44]、MSCOCO [30])上表现出了良好的性能,但在密集、低光照和小目标场景中的有效性仍有待探索。因此,我们使用表4中的代表性基准进行了更多实验:小目标数据集VisDrone [10]、低光照数据集ExDark [34]、红外自动驾驶数据集FLIR-ADAS v2 [13]和通用数据集Pascal VOC [11]。

评估指标。我们使用Top-1和Top-5指标来衡量图像分类性能,使用平均精度(AP)来评估目标检测性能,并报告参数数量(Params)、每秒浮点运算次数(FLOPs)和吞吐量来衡量性能。对于语义分割,我们采用平均交并比(mIoU)。

实现细节。为了评估我们在ImageNet-1K [44]上提出的SCSA,我们选择了四个基于CNN和Transformer架构的主流主干网络,包括ResNet [19]、MobileNetV2 [46]、RepVGG [8]和Swin [33]。具体来说,我们遵循了原始论文[19, 46, 8, 33]中的参数配置,除了批量大小和学习率。由于所有分类模型都在单个NVIDIA RTX 4090 GPU上进行训练,我们根据线性缩放规则[15, 63]调整了批量大小和学习率。对于ResNet [19]、RepVGG [8]和Swin [33],批量大小统一设置为128,学习率分别缩放为0.05、0.05和0.000125。当使用我们的SCSA训练MobileNetV2时,我们使用ECANet [55]中的批量大小和学习率,分别设置为96和0.045。值得注意的是,为了提高训练效率,我们采用了自动混合精度(AMP)训练。

我们使用Faster R-CNN [43]、Mask R-CNN [18]、Cascade R-CNN [3]和RetinaNet [29]在MSCOCO [30]上评估了我们的SCSA。这些检测器使用MMDetection [5]工具箱实现,并采用默认设置。所有模型都使用SGD优化器进行训练,动量设置为0.9,权重衰减设置为 1 e − 4 1 \text{e}-4 1e4,每个GPU的批量大小为2,总共训练12个周期。Faster R-CNN、Mask R-CNN和Cascade R-CNN的学习率从0.0025开始,而RetinaNet的学习率从0.00125开始。所有模型的学习率在第8个和第11个周期时减少10倍。我们使用单个NVIDIA H800 GPU在MSCOCO [30]上对模型进行了12个周期的微调,并在验证集上报告了比较结果。在上述配置的基础上,我们进一步评估了所提出的SCSA方法在Pascal VOC [11]以及VisDrone [10]、ExDark [34]和FLIR-ADAS V2 [13]等复杂场景中的检测性能和泛化能力。

我们还使用UperNet [59]在ADE20K [67]上验证了我们的方法在语义分割方面的有效性。遵循常见做法[6,64],我们使用MMSegmentation [7]工具箱,将批量大小设置为16,并进行80k次训练迭代。所有模型都使用SGD优化器进行训练,初始学习率设置为0.01,动量设置为0.9,权重衰减设置为 5 e − 4 5 \text{e}-4 5e4。我们还使用单个NVIDIA H800 GPU进行训练和推理。

所有模型都使用默认的随机种子0进行训练。
在这里插入图片描述

4.2 图像分类

我们将所提出的空间通道自注意力(SCSA)机制与其他最先进的注意力机制进行了比较,包括SENet[23]、CBAM[57]、ECANet[55]、FcaNet(FCA)[41]、CA[20]、SANet[65]、EMA[39]、CPCA[24]和ELA[61]。如表2所示,我们的SCSA在不同规模的网络中实现了最高的Top-1准确率,同时参数数量和计算复杂度可忽略不计。在混合架构中,我们的方法基于ResNet的吞吐量仅次于CA和ELA,但在适中的模型宽度下,它在准确性、速度和模型复杂度之间提供了更好的平衡。将SCSA方法融入MobileNetV2架构显著提高了模型准确性。尽管SCSA在参数数量上更轻量( 3.63 M 3.63 \mathrm{M} 3.63M vs. 4.07 M 4.07 \mathrm{M} 4.07M,- 0.44 M 0.44 \mathrm{M} 0.44M),但其多分支结构在倒置残差块内遇到了通道维度急剧增加的问题,从而导致吞吐量降低。值得注意的是,将所提出的SCSA方法融入RepVGG[8]和基于空间自注意力的Swin[33]等先进模型,仍然分别实现了 1.21 % 1.21 \% 1.21% 0.70 % 0.70 \% 0.70%的显著准确性提升,有效证明了我们的注意力机制在不同模型架构中的适应性。

4.3 目标检测

MSCOCO上的结果。我们在MSCOCO上评估了各种注意力机制,以验证我们的方法在密集检测场景中的有效性。我们使用ResNet50和ResNet-101作为主干网络,FPN[28]作为特征融合网络。如表3所示,我们的方法在各种检测器、模型大小和对象尺度上均优于其他最先进的注意力方法。对于Faster R-CNN[43],与原始ResNet-50和ResNet101相比,我们的SCSA在AP方面分别提高了 1.7 % 1.7 \% 1.7% 1.3 % 1.3 \% 1.3%。与其他即插即用的注意力模块(包括CBAM[57]、FCA[41]、ECA[55]和CA[20])相比,SCSA表现出更优的性能,在Cascade R-CNN[3]检测器上实现了 0.4 % 0.4 \% 0.4% 1.0 % 1.0 \% 1.0%的增益。此外,它在不同尺度的目标检测中始终表现出色,证实了其对多尺度特征的强大适应性。
在这里插入图片描述

红外、低光照和小目标检测的结果。如表4所示,令人欣慰的是,与其他同类方法相比,所提出的SCSA在这些基准测试[34, 10,11,13]中的表现更佳,进一步证明了我们的策略在保持通道维度和多语义信息协同概念方面的鲁棒性。值得注意的是,我们的结果表明,在长尾数据集(如FLIR-ADASv2[13])上应用注意力机制仍存在一些局限性,这导致了极小的性能提升甚至下降。这可能是由于注意力机制的压缩和激励策略不适合处理不平衡分布的数据,导致关注高频类别而忽视低频类别的学习。
在这里插入图片描述

4.4 分割

我们还在ADE20K[67]上的语义分割和MSCOCO[30]上的实例分割中测试了其性能。我们基于UperNet[59]网络进行了广泛的比较实验。如表5和表6所示,我们的SCSA显著优于其他注意力方法。具体而言,在ResNet-50和ResNet101上,SCSA在mIoU方面分别提高了 0.94 % 0.94 \% 0.94% 1.02 % 1.02 \% 1.02%,而其他方法仅实现了 0.1 % 0.1 \% 0.1% 0.2 % 0.2 \% 0.2%的提升,甚至有些方法的性能还低于基线模型。同时,在实例分割任务中,SCSA在AP方面实现了 0.3 % 0.3 \% 0.3% 0.7 % 0.7 \% 0.7%的提升,超越了其他同类方法。这些结果表明,我们的方法基于多语义空间信息,在像素级任务中表现出色。
在这里插入图片描述

4.5 消融研究

如表1所示,我们将SCSA应用于ResNet-50,在ImageNet-1K数据集[44]上构建了SCSA-50作为基线,以从四个方面进行消融研究。

宏观设计。我们分别验证了SMSA和PCSA模块,与ResNet-50相比,两者在准确性方面均显示出显著提升。在SMSA中,受多语义信息指导,Top-1准确率显著提高了 1.05 % 1.05\% 1.05%,而PCSA通过减轻多语义差异并促进通道交互,将准确率提高了 0.82 % 0.82\% 0.82%。如果PCSA中没有进行渐进式压缩,准确率会下降 0.18 % 0.18\% 0.18%,这主要是因为在进行直接的全局空间压缩后,PCSA无法利用SMSA提供的判别性空间先验来进行计算。

顺序。我们的研究主要旨在探索跨空间和通道维度的固有多语义空间信息是否能有效指导通道特征的学习。为了进一步证明这种“指导”的好处,我们交换了PCSA和SMSA的顺序。有趣的是,Top-1准确率下降了 0.29 % 0.29\% 0.29%,这进一步验证了我们之前的假设,即空间注意力可以指导通道特征的学习,从而证实了使用多语义信息进行指导的有效性。

尽管归一化有助于减少数据噪声并加速模型收敛[45],但SMSA中归一化的位置可能会产生不同的效果。基于MHSA[52, 9]的主干网络通常在注意力计算之前使用层归一化(LN)[1],而一些即插即用的注意力模块要么省略归一化层[55,24],要么提前应用它们[65,39]。为了探索归一化在SMSA中的必要性和最佳位置,我们通过在注意力之前添加归一化和移除归一化来进行实验。表1中的结果表明,归一化对于注意力机制至关重要,尽管其具体位置影响较小。预归一化有助于处理输入特征之间的变化并提高训练稳定性,但可能会导致特征细节丢失,降低注意力对细粒度信息的敏感性。相反,在注意力计算后应用归一化可以减轻噪声,但也可能削弱模型对重要特征的关注。最终,基于准确性结果,我们选择在SMSA的注意力计算后放置归一化。

微观设计。在上述实验分析确认归一化层在注意力计算中的重要性后,我们考虑组归一化是否更适合从所提议的SCSA中的多个子特征中提取多语义信息。为了研究这一点,我们进行了消融研究,比较了深度神经网络(DNNs)中流行的归一化方法,如BN[26]和LN[1]。结果表明,当GN依次被BN和LN替换时,准确性和推理速度均下降,Top-1准确率分别降至 77.19 % 77.19\% 77.19% 77.20 % 77.20\% 77.20%。这些下降归因于GN在保留子特征间语义模式独立性方面的卓越能力,从而最小化了语义干扰。相反,BN对批量大小的敏感性在处理多语义信息时可能会引入统计噪声[2]。LN通过沿通道维度进行归一化并捕获所有特征的信息,可能会破坏SMSA的多尺度卷积从单个子特征中提取的独特语义模式。这些消融研究表明,GN在涉及多个语义的卷积层中可能是更合适的选择。此外,使用非共享卷积导致的准确性下降和参数增加进一步验证了使用共享卷积在H和W维度上一致学习和建模特征依赖性的有效性。

此外,当用多头和通道混洗操作[66]替换PCSA中的单个注意力头时,性能从 77.49 % 77.49\% 77.49%下降到 77.35 % 77.35\% 77.35%。这种现象主要归因于单个头部促进的强通道间交互,这有效缓解了SMSA中产生的语义差异。为了验证沿高度和宽度维度分解的1D序列上的共享卷积学习,我们将其与非共享卷积学习进行了比较。结果表明,准确性下降了 0.17 % 0.17\% 0.17%,吞吐量降低,并且由于更多的卷积运算,参数和浮点运算数(FLOPs)增加。这证实了跨维度的共享学习能够捕获互补特征,从而增强模型的表达能力。

分支。SMSA中语义特征捕获的丰富性取决于每个分支中使用的分支数量和卷积核大小。每个分支都设计为学习不同的子特征。减少分支数量会削弱模块提取固有多语义特征的能力。为了评估捕获不同语义特征对模型性能的影响,我们使用了不同数量的分支和卷积核大小进行了实验。如表1的“分支”部分所示,双分支结构的准确性超过了单分支结构,而四分支结构又进一步优于双分支结构。这一结果支持了我们在捕获子特征间不同语义模式方面,多分支、多尺度结构的有效性,从而增强了模型的表征能力。随着分支数量的增加,模型的内存访问开销也随之增加,导致推理速度下降。

5 可视化与分析

5.1 注意力可视化

我们通过确保对关键区域给予适当关注来评估我们的方法在缓解语义差异和提高一致性方面的有效性。如图4所示,与其他最先进的注意力机制相比,我们的SCSA(语义通道和空间注意力)明显关注多个关键区域,在显著减少关键信息丢失的同时提供了丰富的特征信息。我们还可视化了SCSA的组成部分,包括SMSA(语义多尺度注意力)和PCSA(位置交叉语义注意力)模块。在没有PCSA模块来处理语义差异的情况下,激活强度的分布仍然不够平衡。如果没有SMSA模块来引导多语义空间,对重要区域的关注可能会受到限制。
在这里插入图片描述

5.2 有效感受野可视化

如图5所示,利用多语义建模的空间结构,我们的SCSA实现了更广泛的感知区域。更大的有效感受野(ERF)有助于网络利用丰富的上下文信息进行集体决策,这是性能提升的重要因素之一。为了验证我们的方法性能受益于更大的ERF,我们从ImageNet-1K验证集[44]中随机抽取了300张不同类别的图像,测量原始图像中每个像素对模型第三阶段和第四阶段输出特征图中心点的贡献,并通过加权和归一化的梯度值量化ERF的范围。可视化结果表明,随着网络层的加深,我们的SCSA的ERF变得越来越明显,这证实了我们的假设和方法的有效性。
在这里插入图片描述

5.3 计算复杂度

给定输入 X ∈ R B × C × H × W X \in \mathbb{R}^{B \times C \times H \times W} XRB×C×H×W,池化大小为 P × P P \times P P×P,深度卷积核大小为 K × K K \times K K×K,我们依次考虑维度解耦、深度共享的1D卷积、归一化、渐进压缩和通道自注意力对SCSA模块的影响。为了简化观察,我们忽略系数。SCSA的计算复杂度为:
Ω ( S C S A ) = O ( H C + W C ) + O ( K H C + K W C ) + O ( H W C ) + O ( P 2 H ′ W ′ C + H ′ W ′ C ) + O ( H ′ W ′ C + H ′ W ′ C 2 ) \begin{aligned} \Omega(SCSA)= & \mathcal{O}(HC+WC)+\mathcal{O}(KHC+KWC) \\ & +\mathcal{O}(HWC)+\mathcal{O}\left(P^{2}H^{\prime}W^{\prime}C+H^{\prime}W^{\prime}C\right) \\ & +\mathcal{O}\left(H^{\prime}W^{\prime}C+H^{\prime}W^{\prime}C^{2}\right) \end{aligned} Ω(SCSA)=O(HC+WC)+O(KHC+KWC)+O(HWC)+O(P2HWC+HWC)+O(HWC+HWC2)
其中, H ′ H^{\prime} H W ′ W^{\prime} W 分别表示渐进压缩操作产生的中间特征图的高度和宽度。

我们观察到,当模型宽度(即通道数 C C C)适中时, Ω ( S C S A ) \Omega(SCSA) Ω(SCSA) 与输入序列的长度呈线性关系。这表明当模型宽度适中时,我们的SCSA可以以线性复杂度进行推理。

5.4 推理吞吐量评估

如表1和表2所示,我们在消融实验中评估了SCSA各个组件的吞吐量,并比较了使用不同注意力机制的各种基准模型的吞吐量。我们使用GeForce RTX 4090 GPU在224×224的分辨率下进行了实验,批量大小为32,以模拟实际应用并最大化GPU利用率。为了最小化变异性,我们对每种注意力机制重复了100次实验,并报告了平均推理时间。具体而言,如表2所示,尽管SCSA略慢于纯通道注意力,但它优于大多数混合注意力机制,包括CBAM、SANet、EMA和CPCA,并实现了最高的准确性。

5.5 目标检测定性结果

如图6所示,我们的方法在具有挑战性的场景中表现出优越的性能,包括遮挡、密集环境、小物体群集和低光照条件。

在这里插入图片描述

5.6 实例分割定性结果

如图7所示,我们的方法对遮挡和重叠的对象进行了更全面和准确的分割,获得了更高的置信度分数。这些结果突出了我们的方法在利用多语义信息以更好地感知相关对象的上下文空间方面的优势。

5.7 语义分割定性结果

从图8可以看出,我们的方法显著改善了重叠和语义相邻对象的分割,有效区分了如坐在椅子上的观众和浴缸附近的厕所等场景。

在这里插入图片描述

6 局限性

我们证明了所提出的即插即用协同注意力方法——空间通道协同注意力(SCSA)在图像分类、目标检测以及实例和语义分割方面表现出色。尽管我们致力于探索不同维度之间的协同作用,并已通过实证验证了利用多语义空间信息来指导通道重新校准并增强特征交互以缓解语义差异的有效性,但在现实世界的部署中,推理延迟仍然是一个重大挑战。我们的方法在适当的模型宽度下实现了模型参数、准确性和推理速度的最佳平衡。然而,在更大的宽度下,推理速度的主要瓶颈在于构建多语义空间结构时使用了深度卷积和分支,这些操作具有较低的浮点运算数(FLOPS),频繁访问内存,且计算密度较低[4,51,36]。我们认为,应根据具体任务和场景优化这些即插即用注意力模块的定位和数量,以确保达到峰值性能。未来,我们将研究更轻量、更快的即插即用注意力机制,探索不同维度之间的协同关系。

7 结论

在本研究中,我们分析了大多数即插即用注意力方法在利用特征和空间及通道维度中固有的多语义信息方面存在的局限性,以及语义差异带来的挑战。为解决这些问题,我们提出了一种新颖的即插即用空间通道协同注意力(SCSA)机制,该机制融合了维度解耦、轻量级多语义指导和语义差异缓解。SCSA利用多语义空间注意力来指导不同通道特征的学习,随后在通道维度上应用单头自注意力来缓解语义差异并促进语义交互。大量实验表明,SCSA在广泛使用的基准测试中始终优于最先进的注意力机制,表现出增强的性能和稳健的泛化能力。我们希望我们的工作能够鼓励进一步探索不同领域中多个维度之间的协同特性。

代码

import typing as timport torch
import torch.nn as nn
from einops import rearrange
__all__ = ['SCSA']class SCSA(nn.Module):def __init__(self,dim: int,head_num: int,window_size: int = 7,group_kernel_sizes: t.List[int] = [3, 5, 7, 9],qkv_bias: bool = False,fuse_bn: bool = False,down_sample_mode: str = 'avg_pool',attn_drop_ratio: float = 0.,gate_layer: str = 'sigmoid',):super(SCSA, self).__init__()self.dim = dimself.head_num = head_numself.head_dim = dim // head_numself.scaler = self.head_dim ** -0.5self.group_kernel_sizes = group_kernel_sizesself.window_size = window_sizeself.qkv_bias = qkv_biasself.fuse_bn = fuse_bnself.down_sample_mode = down_sample_modeassert self.dim // 4, 'The dimension of input feature should be divisible by 4.'self.group_chans = group_chans = self.dim // 4self.local_dwc = nn.Conv1d(group_chans, group_chans, kernel_size=group_kernel_sizes[0],padding=group_kernel_sizes[0] // 2, groups=group_chans)self.global_dwc_s = nn.Conv1d(group_chans, group_chans, kernel_size=group_kernel_sizes[1],padding=group_kernel_sizes[1] // 2, groups=group_chans)self.global_dwc_m = nn.Conv1d(group_chans, group_chans, kernel_size=group_kernel_sizes[2],padding=group_kernel_sizes[2] // 2, groups=group_chans)self.global_dwc_l = nn.Conv1d(group_chans, group_chans, kernel_size=group_kernel_sizes[3],padding=group_kernel_sizes[3] // 2, groups=group_chans)self.sa_gate = nn.Softmax(dim=2) if gate_layer == 'softmax' else nn.Sigmoid()self.norm_h = nn.GroupNorm(4, dim)self.norm_w = nn.GroupNorm(4, dim)self.conv_d = nn.Identity()self.norm = nn.GroupNorm(1, dim)self.q = nn.Conv2d(in_channels=dim, out_channels=dim, kernel_size=1, bias=qkv_bias, groups=dim)self.k = nn.Conv2d(in_channels=dim, out_channels=dim, kernel_size=1, bias=qkv_bias, groups=dim)self.v = nn.Conv2d(in_channels=dim, out_channels=dim, kernel_size=1, bias=qkv_bias, groups=dim)self.attn_drop = nn.Dropout(attn_drop_ratio)self.ca_gate = nn.Softmax(dim=1) if gate_layer == 'softmax' else nn.Sigmoid()if window_size == -1:self.down_func = nn.AdaptiveAvgPool2d((1, 1))else:if down_sample_mode == 'recombination':self.down_func = self.space_to_chans# dimensionality reductionself.conv_d = nn.Conv2d(in_channels=dim * window_size ** 2, out_channels=dim, kernel_size=1, bias=False)elif down_sample_mode == 'avg_pool':self.down_func = nn.AvgPool2d(kernel_size=(window_size, window_size), stride=window_size)elif down_sample_mode == 'max_pool':self.down_func = nn.MaxPool2d(kernel_size=(window_size, window_size), stride=window_size)def forward(self, x: torch.Tensor) -> torch.Tensor:"""The dim of x is (B, C, H, W)"""# Spatial attention priority calculationb, c, h_, w_ = x.size()# (B, C, H)x_h = x.mean(dim=3)l_x_h, g_x_h_s, g_x_h_m, g_x_h_l = torch.split(x_h, self.group_chans, dim=1)# (B, C, W)x_w = x.mean(dim=2)l_x_w, g_x_w_s, g_x_w_m, g_x_w_l = torch.split(x_w, self.group_chans, dim=1)x_h_attn = self.sa_gate(self.norm_h(torch.cat((self.local_dwc(l_x_h),self.global_dwc_s(g_x_h_s),self.global_dwc_m(g_x_h_m),self.global_dwc_l(g_x_h_l),), dim=1)))x_h_attn = x_h_attn.view(b, c, h_, 1)x_w_attn = self.sa_gate(self.norm_w(torch.cat((self.local_dwc(l_x_w),self.global_dwc_s(g_x_w_s),self.global_dwc_m(g_x_w_m),self.global_dwc_l(g_x_w_l)), dim=1)))x_w_attn = x_w_attn.view(b, c, 1, w_)x = x * x_h_attn * x_w_attn# Channel attention based on self attention# reduce calculationsy = self.down_func(x)y = self.conv_d(y)_, _, h_, w_ = y.size()# normalization first, then reshape -> (B, H, W, C) -> (B, C, H * W) and generate q, k and vy = self.norm(y)q = self.q(y)k = self.k(y)v = self.v(y)# (B, C, H, W) -> (B, head_num, head_dim, N)q = rearrange(q, 'b (head_num head_dim) h w -> b head_num head_dim (h w)', head_num=int(self.head_num),head_dim=int(self.head_dim))k = rearrange(k, 'b (head_num head_dim) h w -> b head_num head_dim (h w)', head_num=int(self.head_num),head_dim=int(self.head_dim))v = rearrange(v, 'b (head_num head_dim) h w -> b head_num head_dim (h w)', head_num=int(self.head_num),head_dim=int(self.head_dim))# (B, head_num, head_dim, head_dim)attn = q @ k.transpose(-2, -1) * self.scalerattn = self.attn_drop(attn.softmax(dim=-1))# (B, head_num, head_dim, N)attn = attn @ v# (B, C, H_, W_)attn = rearrange(attn, 'b head_num head_dim (h w) -> b (head_num head_dim) h w', h=int(h_), w=int(w_))# (B, C, 1, 1)attn = attn.mean((2, 3), keepdim=True)attn = self.ca_gate(attn)return attn * xif __name__ == "__main__":scsa = SCSA(dim=32, head_num=8, window_size=7)input_tensor = torch.rand(1, 32, 256, 256)print(f"输入张量的形状: {input_tensor.shape}")output_tensor = scsa(input_tensor)print(f"输出张量的形状: {output_tensor.shape}")

改进方法

新建scsa.py,从官方的github中找到SCSA类,复制到scsa.py,如下图:
在这里插入图片描述

在block.py中导入SCSA,在Bottleneck添加SCSA注意力,新增SCSABlock,加入SCSA注意力和残差结构,代码如下:

from .scsa import SCSAclass Bottleneck(nn.Module):"""Standard bottleneck."""def __init__(self, c1, c2, shortcut=True, g=1, k=(3, 3), e=0.5):"""Initializes a standard bottleneck module with optional shortcut connection and configurable parameters."""super().__init__()c_ = int(c2 * e)  # hidden channelsself.cv1 = Conv(c1, c_, k[0], 1)self.cv2 = Conv(c_, c2, k[1], 1, g=g)self.add = shortcut and c1 == c2self.att = SCSA(c2, 8)def forward(self, x):"""Applies the YOLO FPN to input data."""return x + self.att(self.cv2(self.cv1(x))) if self.add else self.att(self.cv2(self.cv1(x)))class SCSABlock(nn.Module):def __init__(self, c1, head_num):super().__init__()self.att = SCSA(c1, head_num)def forward(self, x):return x + self.att(x)

在__init__.py导入SCSABlock,如下图:

在这里插入图片描述
在这里插入图片描述
在task.py中导入SCSABlock,如下图:
在这里插入图片描述
在task.py的parse_model函数中增加SCSABlock,代码如下:

        elif m is SCSABlock:args = [ch[f], *args]c2 = ch[f]print(args)

修改配置文件ultralytics/cfg/models/11/yolo11l.yaml,代码如下:

# Ultralytics YOLO 🚀, AGPL-3.0 license
# YOLO11 object detection model with P3-P5 outputs. For Usage examples see https://docs.ultralytics.com/tasks/detect# Parameters
nc: 80 # number of classes
scales: # model compound scaling constants, i.e. 'model=yolo11n.yaml' will call yolo11.yaml with scale 'n'# [depth, width, max_channels]n: [0.50, 0.25, 1024] # summary: 319 layers, 2624080 parameters, 2624064 gradients, 6.6 GFLOPss: [0.50, 0.50, 1024] # summary: 319 layers, 9458752 parameters, 9458736 gradients, 21.7 GFLOPsm: [0.50, 1.00, 512] # summary: 409 layers, 20114688 parameters, 20114672 gradients, 68.5 GFLOPsl: [1.00, 1.00, 512] # summary: 631 layers, 25372160 parameters, 25372144 gradients, 87.6 GFLOPsx: [1.00, 1.50, 512] # summary: 631 layers, 56966176 parameters, 56966160 gradients, 196.0 GFLOPs# YOLO11n backbone
backbone:# [from, repeats, module, args]- [-1, 1, Conv, [64, 3, 2]] # 0-P1/2- [-1, 1, Conv, [128, 3, 2]] # 1-P2/4- [-1, 2, C3k2, [256, False, 0.25]]- [-1, 1, Conv, [256, 3, 2]] # 3-P3/8- [-1, 2, C3k2, [512, False, 0.25]]- [-1, 1, Conv, [512, 3, 2]] # 5-P4/16- [-1, 2, C3k2, [512, True]]- [-1, 1, Conv, [1024, 3, 2]] # 7-P5/32- [-1, 2, C3k2, [1024, True]]- [-1, 1, SPPF, [1024, 5]] # 9- [-1, 2, C2PSA, [1024]] # 10# YOLO11n head
head:- [-1, 1, nn.Upsample, [None, 2, "nearest"]]- [[-1, 6], 1, Concat, [1]] # cat backbone P4- [-1, 2, C3k2, [512, False]] # 13- [-1, 1, nn.Upsample, [None, 2, "nearest"]]- [[-1, 4], 1, Concat, [1]] # cat backbone P3- [-1, 2, C3k2, [256, False]] # 16 (P3/8-small)- [-1, 1, Conv, [256, 3, 2]]- [[-1, 13], 1, Concat, [1]] # cat head P4- [-1, 2, C3k2, [512, False]] # 19 (P4/16-medium)- [-1, 1, Conv, [512, 3, 2]]- [[-1, 10], 1, Concat, [1]] # cat head P5- [-1, 2, C3k2, [1024, True]] # 22 (P5/32-large)- [16, 1, SCSABlock, [4]] #23- [19, 1, SCSABlock, [8]] #24- [22, 1, SCSABlock, [16]]#25- [[23, 24, 25], 1, Detect, [nc]] # Detect(P3, P4, P5)

在项目的根目录添加train.py脚本,代码如下:

from ultralytics import YOLOif __name__ == '__main__':# 加载模型model = YOLO(model="ultralytics/cfg/models/11/yolo11l.yaml") # 从头开始构建新模型print(model)# Use the modelresults = model.train(data="VOC.yaml",patience=0, epochs=2, device='0', batch=8, seed=42,imgsz=[640,640])  # 训练模

训练完成后,就可以看到测试结果!

在项目的根目录添加val.py脚本,代码如下:


from ultralytics import YOLOif __name__ == '__main__':# Load a model# model = YOLO('Yolo11m.pt')  # load an official modelmodel = YOLO('runs/detect/train/weights/best.pt')  # load a custom model# Validate the modelmetrics = model.val(split='val')  # no arguments needed, dataset and settings remembered

split='val’代表使用验证集做测试,如果改为split=‘test’,则使用测试集做测试!

在项目的根目录添加test.py脚本,代码如下:

from ultralytics import YOLOif __name__ == '__main__':# Load a model# model = YOLO('Yolo11m.pt')  # load an official modelmodel = YOLO('runs/detect/train/weights/best.pt')  # load a custom modelresults = model.predict(source="ultralytics/assets", device='0',save=True)  # predict on an imageprint(results)

test脚本测试assets文件夹下面的图片,save设置为true,则保存图片的测试结果!

测试结果

YOLO11l summary: 976 layers, 25,355,184 parameters, 0 gradients, 86.7 GFLOPsClass     Images  Instances      Box(P          R      mAP50  mAP50-95): 100%|██████████| 15/15 [00all        230       1412      0.973      0.968      0.991      0.748c17         40        131      0.991          1      0.995      0.845c5         19         68          1      0.953      0.994      0.839helicopter         13         43      0.974          1       0.98       0.61c130         20         85          1      0.976      0.994      0.657f16         11         57      0.996       0.93      0.981      0.652b2          2          2      0.937          1      0.995      0.895other         13         86       0.97      0.965      0.981      0.522b52         21         70      0.989      0.971      0.987      0.841kc10         12         62      0.999      0.984      0.989       0.85command         12         40          1      0.976      0.995      0.817f15         21        123      0.992      0.979      0.995        0.7kc135         24         91      0.986      0.989       0.99      0.687a10          4         27          1      0.744      0.968      0.438b1          5         20          1      0.985      0.995      0.687aew          4         25      0.951          1      0.992      0.783f22          3         17      0.955          1      0.995       0.79p3          6        105          1      0.971      0.995      0.795p8          1          1       0.92          1      0.995      0.796f35          5         32          1      0.745      0.983      0.549f18         13        125      0.976      0.992      0.987       0.82v22          5         41      0.994          1      0.995      0.681su-27          5         31       0.99          1      0.995       0.84il-38         10         27      0.985          1      0.995      0.857tu-134          1          1      0.819          1      0.995      0.895su-33          1          2      0.958          1      0.995      0.726an-70          1          2      0.889          1      0.995      0.796tu-22          8         98      0.994       0.98      0.994      0.829

总结

完整代码:

通过网盘分享的文件:Yolo11改进策略:注意力改进Neck层改进SCSA,探索空间与通道注意力之间的协同效应
链接: https://pan.baidu.com/s/1yRfeI5dhMXQG0SI0BQEHOw?pwd=47w7 提取码: 47w7

http://www.mrgr.cn/news/82191.html

相关文章:

  • Navicat 17 for Mac 数据库管理软件
  • linux tar 文件解压压缩
  • Win32汇编学习笔记03.RadAsm和补丁
  • vue学习第一阶段
  • 【Vue3】h、ref:vue3的两个新特性(重要)-h和ref
  • ElasticSearch11-8.x 新特性
  • 【Rust自学】9.2. Result枚举与可恢复的错误 Pt.1:match、expect和unwrap处理错误
  • 【Rust自学】9.1. 不可恢复的错误以及panic!
  • 【Rust自学】8.6. HashMap Pt.2:更新HashMap
  • 深入探讨服务器虚拟化:架构、技术与应用
  • 我们能否使用 ANSYS SPEOS 测量水质?
  • Unity3D仿星露谷物语开发14之Custom Property Attribute
  • 偏移类窗口函数—— LAG()、LEAD()用法详解
  • 【Kafka 消息队列深度解析与应用】
  • 【Rust自学】8.5. HashMap Pt.1:HashMap的定义、创建、合并与访问
  • 【分布式缓存中间件Memcached原理与应用】
  • 面试题汇总
  • GXUOJ-算法-第四次作业(圆排列、连续邮资、n皇后、符号三角形)
  • 【非关系型数据库Redis 】 入门
  • primevue的<Menu>组件
  • 基于 Node.js 的 ORM(对象关系映射)工具——Sequelize介绍与使用,并举案例分析
  • 【循环神经网络】RNN介绍
  • 【容器化技术 Docker 与微服务部署】详解
  • 基于WSL在Windows下安装Ubuntu
  • C++ 设计模式:组合模式(Composite Pattern)
  • 智能工厂的设计软件 应用场景的一个例子:为AI聊天工具添加一个知识系统 之12 方案再探之3:特定于领域的模板 之2 首次尝试和遗留问题解决