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

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

前言

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

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

专栏链接: YOLOv11改进专栏

@

目录
  • 前言
  • 介绍
    • 摘要
  • 文章链接
  • 基本原理
    • 概述
    • 与LKA-trivial、LSKA-trivial和LKA的比较:
  • 核心代码
  • 实验
    • 脚本
    • 结果

介绍

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/StevenLauHKHK/Large-Separable-Kernel-Attention。

文章链接

论文地址:论文地址

代码地址:代码地址

基本原理

Large Separable Kernel Attention (LSKA)是一种新颖的注意力模块设计,旨在解决Visual Attention Networks (VAN)中使用大内核卷积时所面临的计算效率问题。LSKA通过将2D深度卷积层的卷积核分解为级联的水平和垂直1-D卷积核,从而实现了对大内核的直接使用,无需额外的模块。

概述

  1. 基本设计

    • LSKA将2D深度卷积层的卷积核分解为级联的水平和垂直1-D卷积核。
    • 这种分解设计使得LSKA可以直接使用深度卷积层的大内核,无需额外的模块或计算。
  2. 计算效率

    • LSKA的设计降低了参数数量的增长,从而降低了计算复杂度和内存占用。
    • 通过级联1-D卷积核的方式,LSKA在处理大内核时能够保持高效性能。
  3. 形状和纹理偏好

    • LSKA设计使得模块更加偏向于对象的形状而非纹理。
    • 这种偏好有助于提高模型对对象形状的学习能力,从而提高模型的鲁棒性和泛化能力。

总的来说,LSKA通过巧妙的卷积核分解设计,实现了对大内核的高效利用,同时保持了模型的性能和鲁棒性。其技术原理使得LSKA成为一种有潜力的注意力模块设计,可以在VAN等视觉任务中发挥重要作用。

与LKA-trivial、LSKA-trivial和LKA的比较:

image-20240527213758579

  • LKA-trivial是一种简单的注意力模块设计,使用深度卷积和大内核,但会导致参数数量的二次增长。
  • LSKA-trivial是对LKA-trivial的改进,通过可分离卷积核的级联降低了参数数量的增长,提高了计算效率。
  • LKA是原始的Large Kernel Attention设计,包括标准深度卷积、扩张深度卷积和1x1卷积,但在处理大内核时会带来计算和内存开销。
  • LSKA通过级联1D卷积核的设计,有效地解决了LKA中大内核带来的问题,在保持性能的同时降低了计算复杂度和内存占用。

核心代码


import torch
import torch.nn as nn# 定义一个名为LSKA的神经网络模块类,继承自nn.Module
class LSKA(nn.Module):def __init__(self, dim, k_size):# 初始化LSKA类,dim为通道数,k_size为卷积核大小super().__init__()self.k_size = k_size  # 保存卷积核大小# 根据k_size的不同值,初始化不同的卷积层if k_size == 7:# 水平和垂直方向上的第一层卷积self.conv0h = nn.Conv2d(dim, dim, kernel_size=(1, 3), stride=(1,1), padding=(0,(3-1)//2), groups=dim)self.conv0v = nn.Conv2d(dim, dim, kernel_size=(3, 1), stride=(1,1), padding=((3-1)//2,0), groups=dim)# 空间卷积层,带有膨胀参数self.conv_spatial_h = nn.Conv2d(dim, dim, kernel_size=(1, 3), stride=(1,1), padding=(0,2), groups=dim, dilation=2)self.conv_spatial_v = nn.Conv2d(dim, dim, kernel_size=(3, 1), stride=(1,1), padding=(2,0), groups=dim, dilation=2)elif k_size == 11:self.conv0h = nn.Conv2d(dim, dim, kernel_size=(1, 3), stride=(1,1), padding=(0,(3-1)//2), groups=dim)self.conv0v = nn.Conv2d(dim, dim, kernel_size=(3, 1), stride=(1,1), padding=((3-1)//2,0), groups=dim)self.conv_spatial_h = nn.Conv2d(dim, dim, kernel_size=(1, 5), stride=(1,1), padding=(0,4), groups=dim, dilation=2)self.conv_spatial_v = nn.Conv2d(dim, dim, kernel_size=(5, 1), stride=(1,1), padding=(4,0), groups=dim, dilation=2)elif k_size == 23:self.conv0h = nn.Conv2d(dim, dim, kernel_size=(1, 5), stride=(1,1), padding=(0,(5-1)//2), groups=dim)self.conv0v = nn.Conv2d(dim, dim, kernel_size=(5, 1), stride=(1,1), padding=((5-1)//2,0), groups=dim)self.conv_spatial_h = nn.Conv2d(dim, dim, kernel_size=(1, 7), stride=(1,1), padding=(0,9), groups=dim, dilation=3)self.conv_spatial_v = nn.Conv2d(dim, dim, kernel_size=(7, 1), stride=(1,1), padding=(9,0), groups=dim, dilation=3)elif k_size == 35:self.conv0h = nn.Conv2d(dim, dim, kernel_size=(1, 5), stride=(1,1), padding=(0,(5-1)//2), groups=dim)self.conv0v = nn.Conv2d(dim, dim, kernel_size=(5, 1), stride=(1,1), padding=((5-1)//2,0), groups=dim)self.conv_spatial_h = nn.Conv2d(dim, dim, kernel_size=(1, 11), stride=(1,1), padding=(0,15), groups=dim, dilation=3)self.conv_spatial_v = nn.Conv2d(dim, dim, kernel_size=(11, 1), stride=(1,1), padding=(15,0), groups=dim, dilation=3)elif k_size == 41:self.conv0h = nn.Conv2d(dim, dim, kernel_size=(1, 5), stride=(1,1), padding=(0,(5-1)//2), groups=dim)self.conv0v = nn.Conv2d(dim, dim, kernel_size=(5, 1), stride=(1,1), padding=((5-1)//2,0), groups=dim)self.conv_spatial_h = nn.Conv2d(dim, dim, kernel_size=(1, 13), stride=(1,1), padding=(0,18), groups=dim, dilation=3)self.conv_spatial_v = nn.Conv2d(dim, dim, kernel_size=(13, 1), stride=(1,1), padding=(18,0), groups=dim, dilation=3)elif k_size == 53:self.conv0h = nn.Conv2d(dim, dim, kernel_size=(1, 5), stride=(1,1), padding=(0,(5-1)//2), groups=dim)self.conv0v = nn.Conv2d(dim, dim, kernel_size=(5, 1), stride=(1,1), padding=((5-1)//2,0), groups=dim)self.conv_spatial_h = nn.Conv2d(dim, dim, kernel_size=(1, 17), stride=(1,1), padding=(0,24), groups=dim, dilation=3)self.conv_spatial_v = nn.Conv2d(dim, dim, kernel_size=(17, 1), stride=(1,1), padding=(24,0), groups=dim, dilation=3)# 通道间卷积,用于融合信息self.conv1 = nn.Conv2d(dim, dim, 1)# 定义前向传播函数def forward(self, x):u = x.clone()  # 克隆输入张量attn = self.conv0h(x)  # 通过第一个水平卷积层attn = self.conv0v(attn)  # 通过第一个垂直卷积层attn = self.conv_spatial_h(attn)  # 通过第二个水平卷积层attn = self.conv_spatial_v(attn)  # 通过第二个垂直卷积层attn = self.conv1(attn)  # 通过1x1卷积层融合信息return u * attn  # 输入与注意力权重相乘后返回

实验

脚本

import warnings
warnings.filterwarnings('ignore')
from ultralytics import YOLOif __name__ == '__main__':
#     修改为自己的配置文件地址model = YOLO('/root/ultralytics-main/ultralytics/cfg/models/11/yolov11-LSKAttention.yaml')
#     修改为自己的数据集地址model.train(data='/root/ultralytics-main/ultralytics/cfg/datasets/coco8.yaml',cache=False,imgsz=640,epochs=10,single_cls=False,  # 是否是单类别检测batch=8,close_mosaic=10,workers=0,optimizer='SGD',amp=True,project='runs/train',name='LSKAttention',)

结果

image-20241018103354397

http://www.jsqmd.com/news/798590/

相关文章:

  • 超声波实时压接质量检测:从NASA技术看高可靠性连接的无损评估革命
  • 大核小核架构的演进:从DVFS到异构计算,应对先进制程挑战
  • NotebookLM Audio Overview终极指南,覆盖采样率适配、噪声抑制阈值调优、以及语音嵌入向量维度坍缩规避策略
  • 环境准备与构建“脏”数据
  • 【Sora 2视频集成终极指南】:ChatGPT原生调用、API对接、帧级控制与多模态工作流落地实录(2024官方SDK首曝)
  • 暗黑破坏神2存档修改器终极指南:5分钟打造完美游戏角色
  • 5分钟免费解锁iPhone激活锁:applera1n实用指南
  • 告别繁琐槽函数!用C++11 Lambda简化Qt信号连接(附QSlider/QPushButton实例)
  • JScope RTT模式实战:为STM32F4实现最高2MB/s的数据流监控(含代码移植避坑点)
  • Windows三指拖拽终极指南:轻松实现macOS级触控体验
  • 质谱高端访谈Gary Siuzdak
  • 从Distributed到Lumped:三种SPEF寄生模型,你的芯片时序分析该选哪一个?
  • 从学生成绩表到销售报表:手把手教你用ag-grid列组/行组构建复杂业务表格
  • 2026微型变送器十大品牌有哪些,广东犸力小型变送高端优选 - 品牌速递
  • 从PX4的FRD到Mavros的FLU:一文讲透无人机ROS开发中的坐标系‘翻译’逻辑
  • 20254218 2025-2026-2 《Python程序设计》实验3报告
  • Ice:macOS菜单栏终极管理方案,让你的桌面瞬间清爽高效
  • FanControl完整指南:3步掌握Windows风扇控制,告别噪音烦恼
  • 如何快速掌握HunterPie:5步实现《怪物猎人世界》智能狩猎监控
  • 2026桥式称重传感器10大排行,广东犸力口碑享誉行业 - 品牌速递
  • TMS320C6678 多核中断与IPC实战:从事件路由到核间通信的代码剖析
  • 半导体IP产业变革:从EDA历史看IP组装业务的未来
  • 2026年昆明美术集训3人团特价集训课: - 云南美术头条
  • YOLOv11 改进 - 注意力机制 LRSA局部区域自注意力( Local-Region Self-Attention) 轻量级局部上下文建模弥补长程依赖细节不足 CVPR2025
  • 2026国产称重传感器10大排行,广东犸力国货精工领跑行业 - 品牌速递
  • YOLOv11 改进 - 注意力机制 LS-YOLO MSFE 多尺度特征提取模块:并行分支结构增强多尺度感知,优化遥感与小目标检测
  • 别再只会用Excel了!用MATLAB的table处理5000行数据,效率提升不止一点点
  • MILCOM 2011技术风向:软件定义无线电、GaN与宽带测试的军用射频演进
  • 2026注液电子秤高精度称重传感器十大品牌,广东犸力实力上榜 - 品牌速递
  • 从PLY到3D视图:手把手教你用PCL Visualizer定制点云显示效果