【每天一篇深度学习论文】基于CNN和Transformer的局部和全局特征提取模块

论文介绍

题目:

LEFormer: A Hybrid CNN-Transformer Architecture for Accurate Lake Extraction from Remote Sensing Imagery

论文地址:

https://arxiv.org/pdf/2308.04397

创新点

这篇文章介绍了一种名为LEFormer的混合CNN-Transformer架构,用于从遥感图像中准确提取湖泊。文章的创新点主要包括:

  • 混合架构:LEFormer结合了卷积神经网络(CNN)和Transformer架构,以捕获局部和全局特征,并使用交叉编码器融合模块来提高掩码预测的准确性。

  • CNN编码器:提出了一个具有多尺度空间通道注意力(MSCA)的CNN编码器,以提取精确和详细的局部空间信息。

  • 轻量级Transformer编码器:开发了一个轻量级Transformer编码器,减少了模型的计算和参数需求,同时保持高性能。

  • 交叉编码器融合(CEF)模块:提出了一个轻量级层,用于结合来自CNN层的局部特征和来自Transformer层的全局特征,以恢复局部空间信息并增强细节。

方法

整体结构

LEFormer是我们提出的一个新颖的混合CNN-Transformer架构,专门用于从遥感图像中准确提取湖泊。整体架构包含三个主要模块:CNN编码器(CE)、Transformer编码器(TE)以及轻量级的交叉编码器融合(CEF)模块。CNN编码器负责精确提取局部空间信息,它基于一个由多个堆叠的CE层组成的层次结构,每个CE层包括一个深度可分离(DW)层和一个多尺度空间通道注意力(MSCA),以改善多尺度特征提取。我们使用DW层作为下采样阶段,将输入图像的尺寸减小到H/4×W/4、H/8×W/8、H/16×W/16和H/32×W/32,其中H和W分别表示输入图像的高度和宽度。每个下采样阶段都包含一个带有卷积层的下采样块和GELU激活函数。此外,文章集成了一个MSCA,它结合了扩张卷积和CBAM的优势,以增强多尺度特征提取。
在这里插入图片描述

MSCA(多尺度空间通道注意力)的结构布局是一个关键组件,它结合了扩张卷积和CBAM(Convolutional Block Attention Module)的优势,以增强多尺度特征提取。MSCA的结构布局首先使用不同扩张率的扩张卷积来生成多尺度特征图,具体来说,使用了1、2、3和4的扩张率。这些扩张卷积能够改善不同尺度物体或特征的分割,通过调整核扩张率来实现。接下来,应用CBAM层来计算提取的多尺度特征图的注意力权重,并将这个注意力权重与输入的多尺度特征图相乘,以获得最终的特征。
在这里插入图片描述

实验结果

在这里插入图片描述

  • 文章中的实验结果显示LEFormer在湖泊提取任务上取得了显著的性能。具体来说,在两个公开的卫星遥感数据集——Surface Water数据集(SW数据集)和青藏高原湖泊数据集(QTPL数据集)上,LEFormer均展现出了优异的性能和泛化能力。这两个数据集包含了来自可见光遥感图像的标注湖体,图像大小为256×256。
  • 在SW数据集上,LEFormer实现了90.86%的mIoU(平均交并比),而在QTPL数据集上,LEFormer达到了97.42%的mIoU。这些结果表明,LEFormer在参数数量(3.61M)和计算量(1.27G flops)相对较低的情况下,相较于其他先进的湖泊提取模型,如MSNANet,LEFormer在参数量上少了20倍,计算量少了48倍,同时在mIoU上还提高了2.20%。此外,与其他模型相比,LEFormer在参数数量和浮点运算次数上都显著减少,而在整体准确率(OA)、F1分数和mIoU等评估指标上均实现了最佳或接近最佳的表现。

即插即用模块代码

https://github.com/BastianChen/LEFormer/blob/master/tools/train.py

### 使用Transformer模型进行局部特征提取 为了有效利用Transformer模型进行局部特征提取,可以借鉴混合架构的设计思路。具体来说,结合卷积神经网络(CNN)的优势,可以在Transformer的基础上增强其捕捉局部特征的能力。 #### CNNTransformer的结合方式 一种有效的方案是采用类似于LEFormer的方式[^3],该结构不仅保留了Transformer强大的全局建模能力,还引入了CNN擅长处理的空间邻近关系特性。通过这种方式,能够在保持高效的同时提升对于输入数据中短距离依赖性的感知力。 #### 实现细节 以下是基于上述理念构建的一个简化版框架: ```python import torch.nn as nn class LocalFeatureExtractor(nn.Module): def __init__(self, d_model=512, nhead=8, num_encoder_layers=6, dim_feedforward=2048, dropout=0.1): super(LocalFeatureExtractor, self).__init__() # 卷积层用于提取局部特征 self.conv_layer = nn.Conv1d(in_channels=d_model, out_channels=d_model, kernel_size=3, padding='same') # Transformer编码器部分 encoder_layer = nn.TransformerEncoderLayer(d_model=d_model, nhead=nhead, dim_feedforward=dim_feedforward, dropout=dropout) self.transformer_encoder = nn.TransformerEncoder(encoder_layer, num_layers=num_encoder_layers) def forward(self, src): """ Args: src (Tensor): 输入张量形状为 [sequence_length, batch_size, feature_dim] Returns: output Tensor of shape [sequence_length, batch_size, feature_dim] """ conv_output = self.conv_layer(src.permute(1, 2, 0)) # 调整维度顺序以适应Conv1D的要求 trans_input = conv_output.permute(2, 0, 1) # 将输出重新排列回原始格式 return self.transformer_encoder(trans_input) model = LocalFeatureExtractor() print(model) ``` 此代码片段定义了一个名为`LocalFeatureExtractor`的新类,它先使用一维卷积操作对输入序列执行初步过滤,从而获取更精细的位置信息;之后再送入标准的Transformer编码器堆栈进一步加工这些经过预处理的数据流。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值