【论文阅读】Swin Transformer Embedding UNet用于遥感图像语义分割

文章提出了一种名为ST-UNet的新框架,将SwinTransformer融入传统的CNN-basedUNet,以增强全局建模能力,特别是对于遥感图像的语义分割任务。ST-UNet采用双编码器结构,利用SwinTransformer和CNN的互补优势,同时通过空间交互模块(SIM)和特征压缩模块(FCM)提高分割精度,解决了小尺度目标分割的挑战。实验在Vaihingen和Potsdam数据集上进行,展示了方法的有效性。

【论文阅读】Swin Transformer Embedding UNet用于遥感图像语义分割


Swin Transformer Embedding UNet for Remote Sensing Image Semantic Segmentation

全局上下文信息是遥感图像语义分割的关键

具有强大全局建模能力的Swin transformer

提出了一种新的RS图像语义分割框架ST-UNet型网络(UNet)

解决方案:将Swin transformer嵌入到经典的基于cnn的UNet中

ST-UNet由Swin变压器和CNN并联构成了一种新型的双编码器结构

相应结构:

  • 建立像素级相关性来编码Swin变压器块中的空间信息
  • 构造了特征压缩模块(FCM)
  • 作为双编码器之间的桥梁,设计了一个关系聚合模块(RAM)

数据集的使用:

  • Vaihingen
  • Potsdam

  
  

一、相应介绍

具体作用:

  • 编码器用于提取特征
  • 解码器在融合高级语义和低级空间信息的同时,尽可能精细地恢复图像分辨率

u型网络(UNet)[14]利用解码器通过跳过连接来学习相应编码阶段的空间相关性

利用变压器的编码器-解码器结构来模拟序列中元素之间的相互作用。

本文针对CNN在全局建模方面的不足,提出了一种新的RS图像语义分割网络框架ST-UNet

相应结构层次:

  • 以UNet中的编码器为主编码器,Swin变压器为辅助编码器,形成一个并行的双编码器结构
  • 设计良好的关系聚合模块(RAM)构建了从辅助编码器到主编码器的单向信息流
  • RAM是ST-UNet的关键组件
  • 将SIM卡附加到Swin变压器上,以探索全局特征的空间相关性
  • 使用FCM提高小尺度目标的分割精度

相应贡献:

  • 构建了空间交互模块(SIM),重点关注空间维度上的像素级特征相关性,SIM还弥补了Swin变压器窗口机制所限制的全局建模能力
  • 提出了特征压缩模块(FCM),以缓解patch token下采样过程中小尺度特征的遗漏
  • 设计了一个随机存储器,从辅助编码器中提取与chanel相关的信息作为全局线索来指导主编码器

  
  

二、相关工作

2.1 基于CNN的遥感图像语义分割

存在数据集:

  • IEEE地球科学与遥感学会(IGARSS)数据融合大赛
  • SpaceNet比赛
  • DeepGlobe比赛

在检测方面的发展过程

(1)在最开始的发展中,多分支并行卷积结构生成多尺度特征图,并设计自适应空间池化模块聚合更多局部上下文

(2)引入了多层感知器(MLP),以产生更好的分割结果,最早是在自然语言中使用的。

(3)关注了小尺度特征的特征提取

(4)结合了基于patch的像素分类和像素到像素分割,引入了不确定映射,以实现对小尺度物体的高性能

(5) 通过密集融合策略实现小尺度特征的聚合

(6)明确引入边缘检测模块[43]来监督边界特征学习

(7)提出了两个简单的边缘损失增强模块来增强物体边界的保存

  

2.2 Self-Attention机制

最早的注意力在计算机视觉领域

(1)Zhao et al[45]和Li et al[46]分别给出了视频字幕的区域级注意和帧级注意

(2)SENet[48]通过全局平均池化层表示通道之间的关系,自动了解不同通道的重要性

(3)CBAM[49]将通道级注意和空间级注意应用于自适应特征细化

(4)Ding等[19]提出了patch attention module来突出feature map的重点区域

(5)在GCN[51]框架的每个阶段引入通道注意块,对特征图进行分层优化

(6)[52] 关注小批量图像中的相似对象,并通过自注意机制对它们之间的交互信息进行编码

2.3 Vision Transformer

首次提出用于机器翻译任务[53],超越了以往基于复杂递归或cnn的序列转导模型

标准transformer由多头自注意(MSA)、多层感知器(MLP)和层归一化(LN)组成

通过分割和扁平化将图像数据转化为一系列tokens

密集的预测任务,ViT仍然

### 如何使用 Transformer 和 U-Net 进行图像分割 #### 方法概述 结合 Transformer 和 U-Net 的方法旨在利用两者的优势来提升医学图像分割的效果。具体来说,这种方法通过将自注意力机制融入到传统的 U-Net 结构中,从而更好地捕捉全局上下文信息和局部细节特征。 #### 关键技术要点 该框架的核心在于设计了一种新的编码器-解码器结构,其中编码器部分采用基于 Transformer 的模块来提取高层次语义特征;而解码器则继续沿用了经典的卷积操作来进行精细化的空间重建[^1]。 对于多器官分割这类需要考虑较大范围背景的任务而言,Transformer 编码器能够有效地获取远距离像素间的关联性,进而改善整体表现。而对于诸如肿瘤检测的小目标分割,则更侧重于解码阶段的应用,因为此时局部精确度变得尤为重要。 #### 实现流程 以下是构建这样一个混合模型的具体步骤: 1. **数据预处理** 对输入的三维CT扫描或其他形式的医疗影像进行标准化处理,包括但不限于尺寸调整、归一化等操作。这一步骤确保了后续计算过程的一致性和稳定性。 2. **构建编码器** 使用类似于 ViT (Vision Transformers) 的架构作为基础单元,在每一层内部加入位置嵌入(position embedding),并通过堆叠多个带有残差连接(residual connection)的标准 transformer 层形成深层网络。此过程中特别强调对空间维度的关注,即不仅要学习通道间的关系还要保持原有几何特性不变。 3. **搭建解码器** 基于标准 UNet 设计原则——逐步缩小感受野的同时增加分辨率,这里同样采取跳跃链接(skip connections)的方式将低层次的信息传递给高层,以便恢复更加细致的目标边界。值得注意的是,这里的反向传播路径并非完全由传统 CNN 组件构成,而是穿插了一些轻量化版 self-attention blocks 来辅助特征融合。 4. **损失函数的选择** 除了常规使用的交叉熵(cross entropy loss),还可以引入额外项比如 Dice Coefficient 或者 Jaccard Index,这些指标可以直接反映预测结果与真实标签之间的重合程度,有助于优化最终输出质量。 5. **训练策略** 设置合适的超参数组合(如 batch size, learning rate 等.), 并借助迁移学习(pre-trained weights on ImageNet etc.)加速收敛速度; 同时定期保存 checkpoint 文件方便随时中断再续训. ```python import torch.nn as nn from monai.networks.nets import BasicUNet class TransUnet(nn.Module): def __init__(self, in_channels=1, out_channels=2, img_size=(96, 96, 96)): super().__init__() # Define the encoder part with a pre-defined backbone like Swin Transformer or ConvNeXt from timm.models.vision_transformer import VisionTransformer self.encoder = VisionTransformer( patch_size=16, embed_dim=768, depth=12, num_heads=12, mlp_ratio=4., qkv_bias=True, norm_layer=partial(nn.LayerNorm, eps=1e-6), drop_rate=0., attn_drop_rate=0., drop_path_rate=0. ) # Adjust input channel number to match decoder's expectation self.conv_proj = nn.Conv3d(in_channels=in_channels * 16**3, out_channels=out_channels*16**3//img_size[-1], kernel_size=1) # Initialize basic Unet structure for decoding stage self.decoder = BasicUNet(spatial_dims=3, in_channels=out_channels*16**3//img_size[-1], out_channels=out_channels) def forward(self, x): encoded_features = self.encoder(x.flatten(start_dim=-3)) projected_feature_maps = self.conv_proj(encoded_features.view(*encoded_features.shape[:2], *[int(i/16) for i in list(x.size())[2:]])) output = self.decoder(projected_feature_maps.unsqueeze(dim=1)) return output.squeeze() ```
评论 10
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值