

















本文介绍了多尺度线性注意力机制MSLA,并将其集成进YOLOv11。现有基于CNN和Transformer的医学图像分割方法存在局限性,为解决这些问题,我们提出了MSLAU-Net架构,其中MSLA通过并行多尺度特征提取和低复杂度线性注意力计算,捕获细粒度局部细节与全局长程依赖。我们将MSLA的代码集成到YOLOv11中,创建C2PSA_MSLA模块,并在tasks文件中进行注册。实验证明,YOLOv11-C2PSA_MSLA在目标检测任务中取得了良好的效果,验证了方法的优越性、有效性和鲁棒性。
文章目录: YOLOv11改进大全:卷积层、轻量化、注意力机制、损失函数、Backbone、SPPF、Neck、检测头全方位优化汇总
专栏链接: YOLOv11改进专栏

精准的医学图像分割能够精确勾勒解剖结构和病理区域,这对于治疗规划、手术导航和疾病监测至关重要。基于 CNN(卷积神经网络)和基于 Transformer 的方法在医学图像分割任务中均取得了显著成效。然而,由于卷积运算的固有局限性,基于 CNN 的方法难以有效捕获全局上下文信息;与此同时,基于 Transformer 的方法存在局部特征建模不足的问题,且面临自注意力机制带来的高计算复杂度挑战。为解决这些局限性,我们提出了一种新颖的混合 CNN-Transformer 架构,命名为 MSLAU-Net,该架构融合了两种范式的优势。所提出的 MSLAU-Net 包含两个核心设计:其一,引入多尺度线性注意力(Multi-Scale Linear Attention, MSLA),旨在高效提取医学图像的多尺度特征,同时以低计算复杂度建模长程依赖关系;其二,采用自上而下的特征聚合机制,通过轻量化结构执行多尺度特征聚合并恢复空间分辨率。在涵盖三种成像模态的基准数据集上开展的大量实验表明,MSLAU-Net 在几乎所有评估指标上均优于其他最先进方法,验证了我们方法的优越性、有效性和鲁棒性。相关代码已开源至:https://github.com/Monsoon49/MSLAU-Net
论文地址:论文地址
代码地址:代码地址
MSLA(Multi-Scale Linear Attention)是专为医学图像分割设计的多尺度线性注意力机制,核心是通过“并行多尺度特征提取+低复杂度线性注意力计算”,同时捕获细粒度局部细节与全局长程依赖,计算复杂度仅为O(N),解决了传统注意力“单尺度局限”或“高复杂度”的痛点。
MSLA的运算流程分为两大核心阶段,整体为并行架构(如图1所示):
基于Efficient Attention实现低复杂度全局建模,步骤如下:
class MSLA(nn.Module):
def __init__(self, dim, num_heads):
super().__init__()
self.dim = dim
self.num_heads = num_heads
self.dw_conv_3x3 = DepthwiseConv(dim // 4, kernel_size=3)
self.dw_conv_5x5 = DepthwiseConv(dim // 4, kernel_size=5)
self.dw_conv_7x7 = DepthwiseConv(dim // 4, kernel_size=7)
self.dw_conv_9x9 = DepthwiseConv(dim // 4, kernel_size=9)
self.linear_attention = LinearAttention(dim = dim // 4, num_heads = num_heads)
self.final_conv = nn.Conv2d(dim, dim, 1)
self.scale_weights = nn.Parameter(torch.ones(4), requires_grad=True)
def forward(self, input_):
b, n, c = input_.shape
h = int(n ** 0.5)
w = int(n ** 0.5)
input_reshaped = input_.view(b, c, h, w)
split_size = c // 4
x_3x3 = input_reshaped[:, :split_size, :, :]
x_5x5 = input_reshaped[:, split_size:2 * split_size, :, :]
x_7x7 = input_reshaped[:, 2 * split_size:3 * split_size:, :, :]
x_9x9 = input_reshaped[:, 3 * split_size:, :, :]
x_3x3 = self.dw_conv_3x3(x_3x3)
x_5x5 = self.dw_conv_5x5(x_5x5)
x_7x7 = self.dw_conv_7x7(x_7x7)
x_9x9 = self.dw_conv_9x9(x_9x9)
att_3x3 = self.linear_attention(x_3x3)
att_5x5 = self.linear_attention(x_5x5)
att_7x7 = self.linear_attention(x_7x7)
att_9x9 = self.linear_attention(x_9x9)
processed_input = torch.cat([
att_3x3 * self.scale_weights[0],
att_5x5 * self.scale_weights[1],
att_7x7 * self.scale_weights[2],
att_9x9 * self.scale_weights[3]
], dim=1)
final_output = self.final_conv(processed_input)
output_reshaped = final_output.reshape(b, n, self.dim)
return output_reshaped
import warnings
warnings.filterwarnings('ignore')
from ultralytics import YOLO
if __name__ == '__main__':
# 修改为自己的配置文件地址
model = YOLO('/root/ultralytics-main/ultralytics/cfg/models/11/yolov11-C2PSA_MSLA.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='C2PSA_MSLA',
)

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