(即插即用模块-特征处理部分) 四十五、(2024 TGRS) SFF 浅层特征融合模块
文章目录
- 1、Shallow-level Feature Fusion
- 2、代码实现
paper:A Multilevel Multimodal Fusion Transformer for Remote Sensing Semantic Segmentation
Code:https://github.com/sstary/SSRS
1、Shallow-level Feature Fusion
弥补传统融合方法的不足:现有的多模态融合方法通常只关注深层特征融合,忽略了浅层特征中包含的丰富细节信息。解决不同模态数据的异质性:不同模态数据之间存在统计特性和噪声水平的差异,直接融合可能会导致信息丢失或混淆。降低对 DSM 数据的依赖:DSM 数据虽然可以提供重要的高度信息,但其获取成本较高。SFF 模块可以降低对 DSM 数据的依赖,即使在缺少 DSM 数据的情况下,也能取得较好的分割效果。而这篇论文提出一种 浅层特征融合模块(Shallow-level Feature Fusion Module),SFF 模块通过融合浅层特征,可以更好地保留物体细节,例如形状、边界、颜色和纹理等,从而提高分割精度。
SFF 模块的核心思想是利用卷积神经网络 (CNN) 的局部感知能力,分别提取不同模态数据的浅层特征,并进行融合。具体来说,SFF 模块包含两个分支,分别处理可见光图像 (VIS) 和 DSM 数据:
SFF 模块的实现过程如下:
- 特征提取:使用 CNN 分别提取 VIS 和 DSM 数据的浅层特征。
- Squeeze-and-Excitation (SE) 模块:使用 SE 模块对聚合后的特征进行通道注意力建模,增强重要特征并抑制不相关特征。
- 特征融合:将两个分支的特征进行加权求和,得到最终的浅层特征表示。
Shallow-level Feature Fusion 结构图:
2、代码实现
import torch
import torch.nn as nn""" 官方github里没找到代码,但结构不复杂,复现了一下 """
class SELayer(nn.Module):def __init__(self, channel, reduction=16):super(SELayer, self).__init__()self.avg_pool = nn.AdaptiveAvgPool2d(1)self.fc = nn.Sequential(nn.Linear(channel, channel // reduction, bias=False),nn.ReLU(inplace=True),nn.Linear(channel // reduction, channel, bias=False),nn.Sigmoid())def forward(self, x):b, c, _, _ = x.size()y = self.avg_pool(x).view(b, c)y = self.fc(y).view(b, c, 1, 1)return x * y.expand_as(x)class SFF(nn.Module):def __init__(self, in_channels):super(SFF, self).__init__()self.se = SELayer(in_channels)def forward(self, dms, vis):dms = self.se(dms)vis = self.se(vis)return dms + visif __name__ == '__main__':x = torch.randn(4, 16, 128, 128).cuda()y = torch.randn(4, 16, 128, 128).cuda()model = SFF(16).cuda()out = model(x,y)print(out.shape)