

























本文介绍了轻量级骨干网LWGANet及其核心模块LWGA在YOLO26中的结合。现有用于遥感(RS)视觉质量分析的轻量级神经网络存在空间初始冗余和通道冗余问题,无法应对RS场景挑战。LWGA采用异构分组策略,将通道划分为4个不重叠子集,每个子集对应特定特征尺度,通过专用子模块处理并融合多尺度特征。我们将相关代码加入指定目录,在ultralytics/nn/tasks.py中注册,配置YOLO26 - C3k2_LWGA.yaml文件,最后通过实验脚本和结果验证了方法的有效性。
文章目录: YOLO26改进大全:卷积层、轻量化、注意力机制、损失函数、Backbone、SPPF、Neck、检测头全方位优化汇总
专栏链接: YOLO26改进专栏

用于遥感(RS) vi质量分析的轻量级神经网络必须克服两个固有的冗余:spa来自巨大、同质背景的初始冗余和通道冗余,其中极端的尺度变化使单个特征空间效率低下。现有的模型(通常为自然图像签名)无法解决RS场景中的这一双重挑战。为了弥补这一差距,我们提出了LWGANet,这是一种轻量级骨干网,专为rs特定的适当连接而设计。LWGANet引入了两个核心创新:一个是Top-KGlobal Feature Interaction (TGFI)模块,通过将计算集中在显著区域来减轻spa初始冗余,另一个是轻量级分组注意(LWGA)模块,通过将通道划分为专门的、特定于规模的路径来解决通道冗余。通过协同重新解决这些核心的低效率,LWGANet在特征表示质量和计算成本之间实现了一个超级的权衡。在四个主要RS任务(场景分类、ori对象检测、语义分割和变化检测)中的12个不同数据集上进行的广泛实验表明,LWGANet在准确性和效率方面始终优于,形成了最先进的轻量级主干。我们的工作建立了一个新的,健壮的基线线,用于有效的RS图像视觉分析。
论文地址:论文地址
代码地址:代码地址
LWGA(Light-Weight Grouped Attention)是LWGANet的核心模块,核心作用是通过异构分组策略拆分通道特征,用专用子模块适配遥感影像多尺度特性,从而解决通道冗余问题。
传统轻量模型采用同质分组(如分组卷积、多头注意力),所有通道组执行相同操作,无法适配遥感影像中极端尺度差异(如小车辆与长跑道共存)。LWGA则采用异构分组:
每个子模块聚焦特定尺度特征,兼顾效率与表达能力:
class LWGA_Block(nn.Module):
def __init__(self,
dim,
stage,
att_kernel,
mlp_ratio,
drop_path,
act_layer,
norm_layer
):
super().__init__()
self.stage = stage
self.dim_split = dim // 4
self.drop_path = DropPath(drop_path) if drop_path > 0. else nn.Identity()
mlp_hidden_dim = int(dim * mlp_ratio)
mlp_layer: List[nn.Module] = [
nn.Conv2d(dim, mlp_hidden_dim, 1, bias=False),
norm_layer(mlp_hidden_dim),
act_layer(),
nn.Conv2d(mlp_hidden_dim, dim, 1, bias=False)
]
self.mlp = nn.Sequential(*mlp_layer)
self.PA = PA(self.dim_split, norm_layer, act_layer) # PA is point attention
self.LA = LA(self.dim_split, norm_layer, act_layer) # LA is local attention
self.MRA = MRA(self.dim_split, att_kernel, norm_layer) # MRA is medium-range attention
if stage == 2:
self.GA3 = D_GA(self.dim_split, norm_layer) # GA3 is global attention (stage of 3)
elif stage == 3:
self.GA4 = GA(self.dim_split) # GA4 is global attention (stage of 4)
self.norm = norm_layer(self.dim_split)
else:
self.GA12 = GA12(self.dim_split, act_layer) # GA12 is global attention (stages of 1 and 2)
self.norm = norm_layer(self.dim_split)
self.norm1 = norm_layer(dim)
self.drop_path = DropPath(drop_path)
def forward(self, x: Tensor) -> Tensor:
# for training/inference
shortcut = x.clone()
x1, x2, x3, x4 = torch.split(x, [self.dim_split, self.dim_split, self.dim_split, self.dim_split], dim=1)
x1 = x1 + self.PA(x1)
x2 = self.LA(x2)
x3 = self.MRA(x3)
if self.stage == 2:
x4 = x4 + self.GA3(x4)
elif self.stage == 3:
x4 = self.norm(x4 + self.GA4(x4))
else:
x4 = self.norm(x4 + self.GA12(x4))
x_att = torch.cat((x1, x2, x3, x4), 1)
x = shortcut + self.norm1(self.drop_path(self.mlp(x_att)))
return x
import warnings
warnings.filterwarnings('ignore')
from ultralytics import YOLO
if __name__ == '__main__':
# 修改为自己的配置文件地址
model = YOLO('./ultralytics/cfg/models/26/yolo26-C3k2_LWGA.yaml')
# 修改为自己的数据集地址
model.train(data='./ultralytics/cfg/datasets/coco8.yaml',
cache=False,
imgsz=640,
epochs=10,
single_cls=False, # 是否是单类别检测
batch=8,
close_mosaic=10,
workers=0,
optimizer='MuSGD',
# optimizer='SGD',
amp=False,
project='runs/train',
name='yolo26-C3k2_LWGA',
)

此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。