YOLOv11 改进 - 注意力机制 | LSKA大核分离卷积注意力:轻量级设计实现动态大感受野,优化小目标检测鲁棒性

部署运行你感兴趣的模型镜像

前言

本文介绍了大可分卷积核注意力(LSKA)模块及其在YOLOv11中的结合应用。带有大卷积核注意力(LKA)模块的视觉注意网络(VAN)在深度卷积层使用大卷积核时,计算和内存占用会二次增长。LSKA将二维卷积核分解为串联的水平和垂直一维卷积核,解决了该问题。与LKA等模块相比,LSKA能在低计算复杂度和内存占用下达到相当性能,且更关注物体形状。我们将LSKA集成进YOLOv11,实验表明改进后的模型在多方面表现出色。

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

专栏链接: YOLOv11改进专栏

介绍

image-20240527212823405

摘要

配备大卷积核注意力(LKA)模块的视觉注意力网络(VAN)在多种视觉任务中展现出卓越性能,超越了视觉Transformer(ViTs)的表现。然而,LKA模块中的深度卷积层随着卷积核尺寸的增大,会导致计算复杂度与内存占用的二次增长。为解决此问题并实现在VAN注意力模块中使用超大卷积核的目标,本研究提出了一个名为LSKA的大可分卷积核注意力模块家族。LSKA通过将深度卷积层的二维卷积核分解为串联的水平与垂直一维卷积核,实现了对标准LKA设计的改进。这种分解策略使得无需额外模块即可在注意力模块中直接使用配备大卷积核的深度卷积层。实验验证表明,在VAN中部署的LSKA模块能够在显著降低计算复杂度与内存占用的同时,达到与标准LKA模块相当的性能水平。研究还发现,随着卷积核尺寸的增加,所提出的LSKA设计使VAN更加关注物体形状特征而非纹理信息。此外,我们在五种受损版本的ImageNet数据集上对VAN、ViTs以及最新ConvNeXt架构中的LKA和LSKA模块进行了系统性稳健性基准测试,这些数据集在先前研究中较少被探索。大量实验结果表明,随着卷积核尺寸的增大,所提出的VAN中LSKA模块显著降低了计算复杂度与内存占用,同时在目标识别、目标检测、语义分割及稳健性测试中表现优于ViTs和ConvNeXt,并与VAN中LKA模块保持相当性能。相关代码已公开于https://github.com/S

您可能感兴趣的与本文相关的镜像

Yolo-v8.3

Yolo-v8.3

Yolo

YOLO(You Only Look Once)是一种流行的物体检测和图像分割模型,由华盛顿大学的Joseph Redmon 和Ali Farhadi 开发。 YOLO 于2015 年推出,因其高速和高精度而广受欢迎

### YOLOv11中的注意力机制改进 YOLO系列的目标检测算法一直在不断演进,引入了多种先进的技术来提升性能。对于YOLOv11而言,在原有基础上加入了局部-全局空间注意机制(Locally-aware Spatial Keypoint Attention, LSKA),这一改进显著增强了模型对目标特征的理解能力。 #### 局部-全局空间注意机制(LSKA) LSKA旨在解决传统卷积神经网络难以捕捉复杂场景下物体间关系的问题。该方法通过构建局部区域内的关键点响应图,并利用这些响应图指导整个图像的空间注意力分配[^1]。具体来说: - **局部感知模块**:提取每个位置周围的局部特征表示; - **全局上下文建模**:基于局部特征计算全局依赖性矩阵; - **融合层**:将局部与全局信息相结合,形成最终的加权特征映射; 这种设计使得YOLOv11能够更精准地区分相似类别的对象以及处理遮挡情况下的多实例识别问题。 ```python import torch.nn as nn class LSKABlock(nn.Module): def __init__(self, channels): super().__init__() self.local_conv = nn.Conv2d(channels, channels//8, kernel_size=7, padding=3, groups=channels) self.global_pool = nn.AdaptiveAvgPool2d(1) self.fc = nn.Linear(channels//8, channels) def forward(self, x): b, c, h, w = x.size() # Local feature extraction local_features = self.local_conv(x).view(b, -1, h*w) # (B,C',HW) # Global context modeling global_context = self.global_pool(local_features.mean(dim=-1)).squeeze() # (B,C') weights = torch.sigmoid(self.fc(global_context)) # (B,C) # Fusion layer weighted_x = x * weights[:, :, None, None].expand_as(x) return weighted_x ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

魔改工程师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值