Unet改进38:添加GLSA(2024最新改进方法)具有聚合和表示全局和局部空间特征的能力,这有利于分别定位大目标和小目标

本文内容:在不同位置添加GLSA注意力机制

目录

论文简介

1.步骤一

2.步骤二

3.步骤三

4.步骤四


论文简介

基于变压器的模型已经被广泛证明是成功的计算机视觉任务,通过建模远程依赖关系和捕获全局表示。然而,它们往往被大模式的特征所主导,导致局部细节(例如边界和小物体)的丢失,这在医学图像分割中是至关重要的。为了缓解这一问题,我们提出了一种双聚合变压器网络,称为DuAT,其特点是两个创新的设计,即全局到局部空间聚合(GLSA)和选择性边界聚合(SBA)模块。GLSA具有聚合和表示全局和局部空间特征的能力,这有利于分别定位大目标和小目标。SBA模块用于聚合底层特征的边界特征和高层特征的语义信息,以更好地保留边界细节和定位重标定目标。在六个基准数据集上进行的大量实验表明,我们提出的模型在皮肤病变图像和结肠镜图像中的息肉分割方面优于最先进的方法。此外,我们的方法在小目标分割和模糊目标边界等各种具有挑战性的情况下比现有方法更具鲁棒性。

### BIFPN GLSA 技术详解 #### 双向特征金字塔网络 (BiFPN) 双向特征金字塔网络(BiFPN)的关键创新在于其双向信息流机制,这种设计使得不同尺度的特征能够更加全面地融合,从而显著提升对象检测性能[^1]。传统单向特征金字塔网络(FPN)仅支持自顶向下或自底向上的单一方向的信息传递路径;而BiFPN则引入了多条平行连接路径,在每一层之间形成密集连接结构。 具体实现方式如下: - **节点间加权融合**:对于每一个中间层节点,来自上方、下方以及同级其他分支输入都会经过权重调整后再相加以获得最终输出。 - **跨尺度跳跃链接**:不仅限于相邻层次间的交互操作,还存在跨越多个级别的短路连接,确保低级别细粒度纹理信息得以有效传播至高级别抽象表征中去。 ```python def bifpn_layer(features, num_channels=256): P3_in, P4_in, P5_in = features # Top-down pathway with lateral connections P5_td = ConvBNReLU(num_channels)(P5_in) P4_td = Add()([ConvBNReLU(num_channels)(P4_in), UpSampling2D()(P5_td)]) # Bottom-up pathway with additional nodes P3_out = Add()([ConvBNReLU(num_channels)(P3_in), Downsample(P4_td)]) P4_out = Add()([ConvBNReLU(num_channels)(P4_in), P4_td]) P5_out = Add()([ConvBNReLU(num_channels)(P5_in), MaxPooling2D()(P4_td)]) return [P3_out, P4_out, P5_out] ``` #### 全局局部空间聚合 (GLSA) 全局局部空间聚合(GLSA),作为UNet架构的一种重要改进措施,旨在解决基于变换器模型中存在的一个问题——即这些模型倾向于关注规模模式特征而导致忽略掉一些细微之处如边界小型物体等细节部分[^3]。为此,GLSA模块特别强调同时捕捉并处理图像内的宏观视图及其内部微观组成部分之间的关联性。 该方法的具体工作原理可以概括为两点: - **多层次感受野构建**:通过堆叠一系列卷积核小各异的操作单元来扩神经元的感受范围,进而增强对远距离上下文的理解能力; - **注意力引导的空间特征重组**:采用自注意机制计算各位置的重要性得分,并据此重新分配资源给那些更重要的区域,以此达到突出显示关键要素的目的。 ```python class GLSAModule(nn.Module): def __init__(self, channels): super().__init__() self.global_branch = nn.Sequential( nn.Conv2d(channels, channels//2, kernel_size=7, padding=3), nn.ReLU(), nn.Conv2d(channels//2, channels, kernel_size=1) ) self.local_branch = nn.Sequential( nn.Conv2d(channels, channels//2, kernel_size=3, padding=1), nn.ReLU(), nn.Conv2d(channels//2, channels, kernel_size=1) ) self.attention = SpatialAttention() def forward(self, x): gfeat = F.interpolate(x, scale_factor=0.5, mode='bilinear') lfeat = self.local_branch(x) gfeat_up = F.interpolate(gfeat, size=x.size()[2:], mode='bilinear') combined = torch.cat((gfeat_up, lfeat), dim=1) att_map = self.attention(combined) out = combined * att_map return out ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

AICurator

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

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

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

打赏作者

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

抵扣说明:

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

余额充值