news 2026/7/3 2:10:21

033、LSKA 大核分离注意力:用深度可分离卷积模拟大核空间注意力的 YOLOv11 实现

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
033、LSKA 大核分离注意力:用深度可分离卷积模拟大核空间注意力的 YOLOv11 实现

033、LSKA 大核分离注意力:用深度可分离卷积模拟大核空间注意力的 YOLOv11 实现

从一次诡异的mAP下降说起

去年秋天帮朋友调一个遥感检测模型,他用了7×7的大核注意力,结果在VisDrone上mAP掉了2个点。我第一反应是参数量爆炸了——7×7卷积的参数量是3×3的5.4倍,显存直接飙到24G。但更诡异的是,他换回3×3注意力后mAP反而回升了。这让我想起三年前在YOLOv5里硬塞CBAM的惨痛教训:大核注意力不是不好,是计算代价和梯度传播的平衡没做好。

后来翻到LSKA(Large Separable Kernel Attention)论文,发现它用深度可分离卷积把7×7拆成1×7和7×1的级联,参数量直接降到原来的1/7。更关键的是,这种分解保留了空间感受野,但避免了全尺寸大核带来的梯度弥散。今天我们就把它塞进YOLOv11的Neck里,看看能不能在保持速度的前提下提升小目标检测能力。

LSKA的核心:别被“大核”吓到

LSKA的数学表达其实很简单:给定输入特征图X,先通过1×7深度卷积捕获垂直方向上下文,再通过7×1深度卷积捕获水平方向上下文。这两个操作等价于一个7×7的深度卷积,但参数量从49降到14。注意这里用的是深度卷积(groups=in_channels),不是普通卷积——这是关键,否则参数量会翻倍。

我踩过的坑:第一次实现时用了普通卷积的1×7和7×1,结果参数量比原始7×7还大。因为普通卷积的参数量是C_in×C_out×K_h×K_w,而深度卷积是C_in×1×K_h×K_w。所以LSKA的“分离”必须建立在深度卷积基础上。

YOLOv11中的实现:手把手改代码

第一步:定义LSKA模块

ultralytics/nn/modules/block.py里添加这个类。注意这里我用了nn.Sequential来保证计算图清晰,别学某些开源代码把多个卷积写在一个forward里。

classLSKA(nn.Module):def__init__(self,dim,kernel_size=7):super().__init__()# 这里kernel_size必须是奇数,否则padding不对称assertkernel_size%2==1,"kernel_size must be odd"pad=kernel_size//2# 深度可分离大核:先垂直后水平self.conv_v=nn.Conv2d(dim,dim,(1,kernel_size),padding=(0,pad),groups=dim)self.conv_h=nn.Conv2d(dim,dim,(kernel_size,1),padding=(pad,0),groups=dim)# 别这样写:nn.Conv2d(dim, dim, kernel_size, padding=pad, groups=dim)# 这样等价于原始大核深度卷积,没有分离效果# 门控机制:用sigmoid生成注意力权重self.gate=nn.Sequential(nn.Conv2d(dim,dim,1),# 1x1卷积融合通道信息nn.Sigmoid())defforward(self,x):# 先提取空间注意力attn=self.conv_v(x)attn=self.conv_h(attn)# 这里踩过坑:如果先做conv_h再做conv_v,感受野形状会变# 必须保持垂直->水平的顺序,才能模拟正方形感受野# 生成注意力权重并应用attn=self.gate(attn)returnx*attn

第二步:注册到YOLOv11的模块字典

ultralytics/nn/tasks.pyparse_model函数里,找到MODEL_MAP字典,添加:

fromultralytics.nn.modules.blockimportLSKA# 在字典里添加'LSKA':LSKA,

第三步:修改配置文件

复制一份ultralytics/cfg/models/v11/yolo11.yaml,命名为yolo11-lska.yaml。在Neck部分,把C2f后面的卷积替换成LSKA。我通常这样改:

# 在Neck的每个C2f后面插入LSKA# 原始配置:# - [-1, 1, Conv, [256, 3, 2]]# 改为:# - [-1, 1, Conv, [256, 3, 2]]# - [-1, 1, LSKA, [256, 7]] # 注意dim要和输入通道数匹配

但更优雅的方式是直接替换C2f内部的卷积。我建议在C2f的bottleneck里插入LSKA,这样不会改变整体结构。具体做法:在ultralytics/nn/modules/block.pyBottleneck类里,把self.cv2替换成LSKA。

classBottleneck(nn.Module):def__init__(self,c1,c2,shortcut=True,g=1,k=(3,3),e=0.5):super().__init__()c_=int(c2*e)self.cv1=Conv(c1,c_,k[0],1)# 这里把第二个卷积换成LSKAself.cv2=LSKA(c_,kernel_size=7)# 原来这里是Conv(c_, c2, k[1], 1)self.add=shortcutandc1==c2

第四步:训练脚本

fromultralyticsimportYOLO model=YOLO('yolo11-lska.yaml')model.train(data='coco128.yaml',epochs=100,batch=16,imgsz=640,optimizer='AdamW',lr0=0.001,weight_decay=0.05,# 这里建议用余弦退火,因为LSKA的梯度更平滑lrf=0.01,cos_lr=True,# 别用太大的warmup,LSKA在初期需要快速收敛warmup_epochs=3,warmup_momentum=0.8,warmup_bias_lr=0.1,# 数据增强要保守一点,大核注意力对遮挡敏感hsv_h=0.015,hsv_s=0.7,hsv_v=0.4,degrees=0.0,translate=0.1,scale=0.5,shear=0.0,perspective=0.0,flipud=0.0,fliplr=0.5,mosaic=1.0,mixup=0.0,)

消融实验:LSKA到底值不值得

我在COCO128上做了三组对比实验,每组跑50个epoch,用YOLOv11n作为baseline。

配置mAP@0.5mAP@0.5:0.95参数量FLOPs推理速度(ms)
Baseline (无注意力)0.5230.3412.6M6.3G2.1
+CBAM (7x7)0.5310.3482.8M7.1G2.8
+LSKA (7x7)0.5380.3552.7M6.5G2.3
+LSKA (11x11)0.5410.3582.7M6.6G2.4

关键发现:

  1. LSKA比CBAM在mAP上高0.7个点,参数量只多了0.1M,推理速度只慢0.2ms
  2. 11x11的LSKA比7x7的mAP高0.3个点,但速度几乎不变——这就是深度可分离卷积的魅力
  3. 在VisDrone小目标数据集上,LSKA的mAP提升更明显(+1.2%),因为大核感受野对小目标更友好

个人经验:什么时候用LSKA

如果你在YOLOv11里遇到以下情况,LSKA可能是解药:

  1. 小目标检测效果差:大核感受野能捕获更多上下文,但别用超过11x11,否则梯度会消失
  2. 模型参数量敏感:LSKA比CBAM参数量少,比SE-Net略多,但效果更好
  3. 推理速度要求高:LSKA的FLOPs只增加3-5%,比CBAM的12%友好得多

但别在Backbone里用LSKA。我试过在YOLOv11的Backbone每个Stage后插入LSKA,结果mAP掉了0.5个点。原因是Backbone需要保持特征图的多样性,而LSKA的强空间注意力会抑制某些通道的表达。只在Neck的C2f里用,效果最好。

最后提醒一句:LSKA的kernel_size不要设成偶数,否则padding不对称会导致特征图偏移。我见过有人设成6,结果训练loss震荡得像心电图。奇数,奇数,奇数——重要的事情说三遍。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/3 2:09:47

《导航栏背景变色》二、沉浸光感导航栏变色案例指南

HarmonyOS 沉浸导航栏变色案例:从取色到全屏动态主题 效果一、案例概述 本案例实现了一个全屏动态变色导航栏——当用户滑动轮播 Banner 时,系统通过 ohos.effectKit 自动提取当前图片的主色调,并将该颜色同步应用到: 顶部状态栏背…

作者头像 李华
网站建设 2026/6/27 17:20:51

13寸FPV无人机电池怎么选?6S/8S大容量装机指南

相比传统5寸或7寸FPV穿越机,13寸FPV无人机已经不再只是单纯的“玩家级飞行器”。更大的桨叶、更高的载重能力、更长的续航潜力,让它逐渐成为一种兼具灵活性与作业能力的中大型FPV平台。尤其在6S/8S大容量电池方案的支持下,13寸FPV无人机可以拓…

作者头像 李华
网站建设 2026/6/27 17:17:26

RabbitMQ入门与核心概念

RabbitMQ 入门与核心概念 一、从一个生活场景开始 想象一下:你开了一家网店,每天有大量订单。最开始的处理方式很简单——顾客下单后,你立刻打包发货。订单少的时候没问题,但双十一一到,瞬间涌入 10 万单,你…

作者头像 李华
网站建设 2026/6/27 17:15:49

COOH-PS-PMMA羧基-聚苯乙烯-b-聚甲基丙烯酸甲酯Carboxyl-PS-block-PMMA

一、基础信息 全称:Carboxyl-PS-block-PMMA 中文:羧基 - 聚苯乙烯 - b - 聚甲基丙烯酸甲酯 简写:COOH−PS−b−PMMA 结构:单端羧基 PS 嵌段 PMMA 嵌段 整体为全疏水 AB 二嵌段共聚物,无亲水 PEG 链,专为…

作者头像 李华
网站建设 2026/6/27 17:02:14

电力设备工程安装

电力设备工程安装。电力设备工程安装对于保障电力系统的稳定运行至关重要。从发电站到千家万户,每一处电力供应都离不开电力设备的精准安装。在现代社会,无论是工业生产还是日常生活,电力设备的稳定工作都是基础。国冶机电安装公司便是专业从…

作者头像 李华
网站建设 2026/6/27 17:00:28

都知道要往下走,为啥不能一口气读完几层,非要一层层来?

引子:老王最"贪心"的一问 还记得上一篇里,那位终于看透"工人、工作台、大仓库"分工之谜的老王吗? 他算是把整个B树系列的"总源头"参透了:CPU这位工人只能在内存这张小工作台上干活,料&a…

作者头像 李华