YOLOv8改进 - 注意力机制 | SKAttention:选择性核注意力通过多分支融合与自适应感受野调整优化多尺度目标检测

前言

本文介绍了SKAttention(选择性核注意力)机制,这是一种受生物视觉皮层启发的动态多尺度特征提取方法。该技术通过Split、Fuse和Select三个算子,使神经元能根据输入自适应调整感受野大小,通过不同卷积核分支的软注意力融合来捕捉复杂的空间特征。我们将SKAttention集成进YOLOv11(基于YOLOv8架构演进),在保持计算效率的同时显著增强了模型对多尺度目标的检测能力。实验表明,该改进能有效提升模型在复杂场景下的特征聚合与理解能力。

文章目录: YOLOv8改进大全:卷积层、轻量化、注意力机制、损失函数、Backbone、SPPF、Neck、检测头全方位优化汇总

专栏链接: YOLOv8改进专栏

文章目录

  • 前言
  • 介绍
    • 摘要
  • 文章链接
  • 基本原理
    • 概述
    • 选择性内核(SK)
    • Split
      • Fuse
      • Select
  • 核心代码
  • 引入代码
  • 注册
    • 步骤1:
    • 步骤2
  • 配置yolov8_SKAttention.yaml
  • 实验
    • 脚本
    • 结果

介绍

摘要

在标准卷积神经网络(CNNs)中,每一层的人工神经元的感受野大小被设计为相同。然而,神经科学界已知视觉皮层神经元的感受野大小会受到刺激的调节,这一点在构建CNN时很少被考虑。我们提出了一种动态选择机制,使每个神经元能够基于多尺度的输入信息自适应地调整其感受野大小。我们设计了一个称为选择性卷积(Selective Kernel,SK)单元的构建块,在该单元中,具有不同卷积核大小的多个分支通过受这些分支信息引导的softmax注意力融合。在融合层中,这些分支上的不同注意力产生了神经元的不同有效感受野大小。多个SK单元被堆叠形成一个称为选择性卷积网络(SKNets)的深层网络。在ImageNet和CIFAR基准测试中,我们实验证明SKNet在模型复杂度较低的情况下优于现有的最先进架构。详细分析显示,SKNet中的神经元能够捕捉不同尺度的目标对象,这验证了神经元根据输入自适应调整其感受野大小的能力。代码和模型可在https://github.com/implus/SKNet获取。

文章链接

论文地址:论文地址

代码地址:代码地址

基本原理

概述

SKAttention是一种用于深度学习中的注意力机制,特别是在卷积神经网络(CNN)中。它通过动态选择不同大小的卷积核来提高网络对多尺度特征的捕捉能力。SKAttention的设计灵感来源于视觉皮层神经元,这些神经元能够根据刺激自适应地调整其感受野大小。在CNN中实现这种机制可以帮助网络更好地捕捉复杂图像空间的多尺度特征,同时减少计算资源的浪费。

SKAttention的核心是“选择性核(Selective Kernel)”单元,它允许多个具有不同内核大小的分支在信息指导下使用SoftMax进行融合。这些分支中的每个卷积核都会对输入图像进行处理,产生不同尺寸的特征图。然后,通过融合操作将这些不同尺寸的特征图结合起来,生成用于选择权重的全局和综合表示。最后,根据这些权重对不同大小内核的特征图进行聚合,从而得到最终的输出特征。

SKAttention的主要优势在于它可以更有效地捕捉图像空间的多尺度特征,提高模型在处理不同尺度目标时的性能。此外,SKAttention还可以聚合深度特征,使模型更容易理解,同时也允许更好的可解释性。

SKAttention模块可以灵活地集成到各种深度学习模型中,特别是在目标检测领域,如YOLOv5和YOLOv7等模型,已经成功地集成了SKAttention来提升检测效果。在集成时,SKAttention可以作为即插即用的注意力模块添加到网络的任何合适位置。

SKAttention的实现涉及到多个卷积层、全连接层和softmax激活函数。在模型训练过程中,通过反向传播和梯度下降方法不断更新网络参数,优化模型性能。

选择性内核(SK)

“Selective Kernel” (SK) convolution使神经元能够自适应地调整其 RF 大小。

具体来说,我们通过三个算子——Split、Fuse 和 Select 来实现 SK 卷积。如下图所示是一个两分支的情况。

Split

对输入特征图 X 进行两次变换 ~F 和 ^F,以输出 ~U 和 ^U,核大小分别为 3 和 5

~F 和 ^F 均由高效的分组/深度卷积、批量归一化(BN)和 ReLU 依次组成。

为了进一步提高效率,具有 5×5 内核的传统卷积被替换为具有 3×3 内核和扩张大小 2 的扩张卷积。

Fuse

  • 首先,多个(上图中两个)分支的结果通过逐元素求和进行融合:
    U = U ~ + U ^ , \mathrm{U}=\tilde{\mathrm{U}}+\hat{\mathrm{U}},U=U~+U^,

  • 应用全局平均池化来获取全局信息。具体来说,s 的第 c 个元素是通过空间维度 H×W 缩小 U 来计算的:
    s c = F g p ( U c ) = 1 H × W ∑ i = 1 H ∑ j = 1 W U c ( i , j ) . s_c=\mathcal{F}_{gp}(\mathbf{U}_c)=\frac{1}{H\times W}\sum_{i=1}^H\sum_{j=1}^W\mathbf{U}_c(i,j).sc=Fgp(Uc)=H×W1i=1Hj=1WUc(i,j).

  • 然后,sc被压缩为紧凑特征z。这是通过一个简单的全连接(fc)层来实现的,并通过降低维度来提高效率:

    其中 δ 是 ReLU,β 是批量范数(BN)。
    z = F f c ( s ) = δ ( B ( W s ) ) , \mathbf{z}=\mathcal{F}_{fc}(\mathbf{s})=\delta(\mathcal{B}(\mathbf{Ws})),z=Ffc(s)=δ(B(Ws)),

  • 为了研究d对模型效率的影响,我们使用一个减速比r来控制其值:
    d = max ⁡ ( C / r , L ) , d=\max(C/r,L),d=max(C/r,L),

Select

跨通道的软注意力用于自适应地选择不同空间尺度的信息,这是由紧凑特征描述符 z 引导的。具体来说,softmax 运算符应用于通道数字:
a c = e A c z e A c z + e B c z , b c = e B c z e A c z + e B a c z , a_c=\frac{e^{\mathbf{A}_c\mathbf{z}}}{e^{\mathbf{A}_c\mathbf{z}}+e^{\mathbf{B}_c\mathbf{z}}},b_c=\frac{e^{\mathbf{B}_c\mathbf{z}}}{e^{\mathbf{A}_c\mathbf{z}}+e^{\mathbf{B}_ac\mathbf{z}}},ac=eAcz+eBczeAcz,bc=eAcz+eBaczeBcz,

  • 在有两个分支的情况下,矩阵B是冗余的,因为ac+bc=1。

  • 最终的特征图V是通过各个内核上的注意力权重获得的:
    V c = a c ⋅ U ~ c + b c ⋅ U ^ c , a c + b c = 1 , \mathbf{V}_c=a_c\cdot\tilde{\mathbf{U}}_c+b_c\cdot\widehat{\mathbf{U}}_c, a_c+b_c=1,Vc=acU~c+bcUc,ac+bc=1,

  • 上面的公式是针对两分支的情况,可以很容易地推导出更多分支的情况。

核心代码

引入代码

在根目录下的ultralytics/nn/目录,新建一个attention目录,然后新建一个以SKAttention为文件名的py文件, 把代码拷贝进去。

importtorchimporttorch.nnasnnfromcollectionsimportOrderedDictclassSKAttention(nn.Module):def__init__(self,channel=512,kernels=[1,3,5,7],reduction=16,group=1,L=32):super().__init__()self.d=max(L,channel//reduction)self.convs=nn.ModuleList([])forkinkernels:self.convs.append(nn.Sequential(OrderedDict([("conv",nn.Conv2d(channel,channel,kernel_size=k,padding=k//2,groups=group,),),("bn",nn.BatchNorm2d(channel)),("relu",nn.ReLU()),])))self.fc=nn.Linear(channel,self.d)self.fcs=nn.ModuleList([])foriinrange(len(kernels)):self.fcs.append(nn.Linear(self.d,channel))self.softmax=nn.Softmax(dim=0)defforward(self,x):bs,c,_,_=x.size()conv_outs=[]forconvinself.convs:conv_outs.append(conv(x))feats=torch.stack(conv_outs,0)# k,bs,channel,h,wU=sum(conv_outs)# bs,c,h,wS=U.mean(-1).mean(-1)# bs,cZ=self.fc(S)# bs,dweights=[]forfcinself.fcs:weight=fc(Z)weights.append(weight.view(bs,c,1,1))# bs,channelattention_weughts=torch.stack(weights,0)# k,bs,channel,1,1attention_weughts=self.softmax(attention_weughts)# k,bs,channel,1,1V=(attention_weughts*feats).sum(0)returnV

注册

ultralytics/nn/tasks.py中进行如下操作:

步骤1:

fromultralytics.nn.attention.SKAttentionimportSKAttention

步骤2

修改def parse_model(d, ch, verbose=True):

elifmisSKAttention:c1,c2=ch[f],args[0]ifc2!=nc:c2=make_divisible(min(c2,max_channels)*width,8)args=[c1,*args[1:]]

配置yolov8_SKAttention.yaml

ultralytics/cfg/models/v8/yolov8_SKAttention.yaml

# Ultralytics YOLO 🚀, GPL-3.0 license# YOLOv8 object detection model with P3-P5 outputs. For Usage examples see https://docs.ultralytics.com/tasks/detect# Parametersnc:2# number of classesscales:# model compound scaling constants, i.e. 'model=yolov8n.yaml' will call yolov8.yaml with scale 'n'# [depth, width, max_channels]n:[0.33,0.25,1024]# YOLOv8n summary: 225 layers, 3157200 parameters, 3157184 gradients, 8.9 GFLOPss:[0.33,0.50,1024]# YOLOv8s summary: 225 layers, 11166560 parameters, 11166544 gradients, 28.8 GFLOPsm:[0.67,0.75,768]# YOLOv8m summary: 295 layers, 25902640 parameters, 25902624 gradients, 79.3 GFLOPsl:[1.00,1.00,512]# YOLOv8l summary: 365 layers, 43691520 parameters, 43691504 gradients, 165.7 GFLOPsx:[1.00,1.25,512]# YOLOv8x summary: 365 layers, 68229648 parameters, 68229632 gradients, 258.5 GFLOPs# YOLOv8.0n backbonebackbone:# [from, repeats, module, args]-[-1,1,Conv,[64,3,2]]# 0-P1/2-[-1,1,Conv,[128,3,2]]# 1-P2/4-[-1,3,C2f,[128,True]]-[-1,1,Conv,[256,3,2]]# 3-P3/8-[-1,6,C2f,[256,True]]-[-1,1,Conv,[512,3,2]]# 5-P4/16-[-1,6,C2f,[512,True]]-[-1,1,Conv,[1024,3,2]]# 7-P5/32-[-1,3,C2f,[1024,True]]-[-1,1,SPPF,[1024,5]]# 9# YOLOv8.0n headhead:-[-1,1,nn.Upsample,[None,2,'nearest']]-[[-1,6],1,Concat,[1]]# cat backbone P4-[-1,3,C2f,[512]]# 12-[-1,1,nn.Upsample,[None,2,'nearest']]-[[-1,4],1,Concat,[1]]# cat backbone P3-[-1,3,C2f,[256]]# 15 (P3/8-small)-[-1,1,Conv,[256,3,2]]-[[-1,12],1,Concat,[1]]# cat head P4-[-1,3,C2f,[512]]# 18 (P4/16-medium)-[-1,1,Conv,[512,3,2]]-[[-1,9],1,Concat,[1]]# cat head P5-[-1,3,C2f,[1024]]# 21 (P5/32-large)-[-1,1,SKAttention,[1024]]-[[15,18,22],1,Detect,[nc]]# Detect(P3, P4, P5)

实验

脚本

importosfromultralyticsimportYOLO# Define the configuration options directlyyaml='ultralytics/cfg/models/v8/yolov8_SKAttention.yaml'# Initialize the YOLO model with the specified YAML filemodel=YOLO(yaml)# Print model informationmodel.info()if__name__=="__main__":# Train the model with the specified parametersresults=model.train(data='ultralytics/datasets/original-license-plates.yaml',name='yolov8_SKAttention',epochs=10,workers=8,batch=1)

结果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1196585.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java毕设项目推荐-基于springboot vue的实验室设备借用管理系统【附源码+文档,调试定制服务】

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

Java计算机毕设之基于vue设备租赁报修借用管理系统基于springboot的实验设备借用平台的设计与实现 实验室设备租赁系统(完整前后端代码+说明文档+LW,调试定制等)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

springboot_ssm802二手车估值与销售网络平台--论文

目录具体实现截图摘要系统所用技术介绍写作提纲源码文档获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!具体实现截图 摘要 随着二手车市场的快速发展,准确估值与高效交易成为行业痛点。传统估值方法依赖人工经验,存在主…

想转行大模型?先了解算法与应用工程师的真实门槛与学习路径

文章分析了大模型领域两类岗位:门槛极高的算法工程师和相对较低的应用工程师。建议没有技术或业务壁垒的从业者可考虑大模型应用方向,但需警惕盲目跟风。推荐利用业余时间先尝试研究,确认适合后再转行。文章还介绍了大模型在各行业的应用场景…

Qwen Code Skills实战:构建数据分析智能体,轻松实现数据问答与报表生成

文章详细介绍了如何使用Qwen Code Skills功能构建数据库查询智能体。通过COVID-19数据分析案例,展示了创建自定义Skill的完整流程,包括编写SKILL.md配置文件和Python脚本,实现数据查询、分析和自动生成报表页面。开发者可借此将专业知识打包成…

程序员转行AI大模型全攻略:后端开发轻松转型大模型应用开发,非常详细收藏我这一篇就够了

文章为Java程序员提供转行大模型开发的完整指南,包括基础知识学习、工具框架掌握、编程能力提升、数学知识储备和项目实践等步骤。分析了Java程序员的转型优势,介绍了AI大模型时代的新型技术岗位及所需知识体系,并提供七阶段学习路径&#xf…

【课程设计/毕业设计】基于springboot的高校实验设备借用平台的设计与实现 实验室设备租赁系统【附源码、数据库、万字文档】

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

鸿蒙 RTL 适配踩坑记录:为什么你的布局在阿拉伯语下一定会翻车

摘要 随着鸿蒙应用逐步走向国际化,应用不再只面对中文和英文用户。 在 中东、北非 等地区,阿拉伯语、希伯来语 这类 从右到左(RTL)语言 是主流,如果应用在这些语言环境下: 布局顺序是反的返回按钮方向不对…

详细介绍:SQL时间函数全解析从基础日期处理到高级时间序列分析

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

Java毕设项目推荐-基于springboot的婚庆公司服务平台婚礼司仪主持婚车租赁的设计与实现【附源码+文档,调试定制服务】

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

深入解析:Flink SQL Window Deduplication按窗口“保留第一条/最后一条”记录(Streaming)

深入解析:Flink SQL Window Deduplication按窗口“保留第一条/最后一条”记录(Streaming)pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !impor…

Windows系统优化工具RyTuneX1.6.0 完全安装配置指南,Win10 Win11优化指南

平时用Windows系统的时候,是不是经常遇到系统卡顿、占空间,甚至担心隐私被泄露?别担心!今天我给大家挖到一款超好用的Windows优化神器,完美适配Win10和Win11,功能强大到超乎想象! RyTuneX是一款…

MemOS记忆图谱实战:从零构建LangChain智能体的长期记忆系统(含完整代码)

文章详细介绍了MemOS开源框架的Graph记忆图谱能力及其在LangChain智能体中的应用。首先通过TreeTextMemory实现基于图结构的记忆存储与检索,构建带记忆的ChatBot;其次介绍了异步记忆重组机制,自动将孤立记忆节点组织成知识图谱;最…

【计算机毕业设计案例】基于springboot的婚庆公司相亲主持服务平台的设计与实现(程序+文档+讲解+定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

【计算机毕业设计案例】基于Java springboot实验室预约系统实验室设备租赁设备报修维修报废(程序+文档+讲解+定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

大模型未来已来:从ChatGPT到Agentic AI的收藏级进阶指南

本文探讨了AI从被动的大语言模型向主动的代理式人工智能(Agentic AI)的转变。Agentic AI系统通过感知、推理、行动和记忆形成闭环控制,采用ReAct范式解决复杂问题,并正从单智能体向多智能体协作演进。尽管面临幻觉、对齐危机和可靠性挑战,Age…

一文读懂Qwen3-VL-EmbeddingReranker:多模态检索新标杆,收藏学习!

Qwen3-VL-Embedding 和 Qwen3-VL-Reranker 是基于 Qwen3-VL 基础模型构建的统一多模态检索框架,采用 “三阶段训练→Matryoshka 嵌入→知识蒸馏” 技术路线,解决了传统多模态检索模型在存储效率和跨模态对齐方面的痛点。该模型在 MMEB-V2 基准测试中以77…

大模型项目实战宝典:从6B到65B模型训练,含LoRA/QLoRA/RLHF等热门技术,建议收藏

本文汇总了大模型实战项目,涵盖模型训练、微调(LoRA、P-Tuning等)及分布式训练等核心环节。提供从6B到65B模型的全量微调到高效微调再到RLHF的完整教程,包含命令行调用、Demo部署、LangChain集成等工程化实战指南。项目通过模块化代码和清晰文档&#xf…

强联通分量及缩点

一、\(dfs\)森林和强联通分量 二、强联通分量的\(Tarjan\)和\(Kosaraju\)算法 三、缩点和DP

Java毕设选题推荐:基于spring boot的开放实验室设备租赁报修预约管理系统【附源码、mysql、文档、调试+代码讲解+全bao等】

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…