模块来源

模块整体简介

LFEM(Local Feature Enhancement Module)是 FreDFT 中用于双模态局部特征增强的前置模块,面向 RGB/IR 特征图分别建模。论文将其放在 CGMM 和 FDFAM 之前,目的在于通过不同卷积感受野提取多区域局部信息,并借助 channel shuffle 促进通道交互,最终增强细粒度纹理、边缘和局部目标响应,为后续跨模态全局建模与频域融合提供更强表征。

模块结构展示

  • 论文位置:III.B Local feature enhancement module
  • 结构图:Fig. 3(LFEM结构)
  • 论文原生结构梳理
    1. 输入特征 F_RGB / F_IR
    2. 先经 1×1 Conv + BN + SiLU 做通道映射与非线性增强
    3. 并行使用四种卷积提取局部信息:
      • 3×3 Conv
      • 3×3 Dilated Conv
      • 3×3 Deformable Conv
      • 3×3 Depth-wise Conv
    4. 将四路结果拼接
    5. 通过 channel shuffle 增强通道间信息交换
    6. 再经 1×1 Conv 压缩通道
    7. 与初始输入残差相加,得到增强后的 RGB/IR 特征

设计出发点

  • 现有方法缺陷:论文指出,许多 RGB-IR 方法主要依赖单一路径或简单融合,局部信息利用不足;同时,模态差异会削弱局部细节互补。
  • 模块解决问题:LFEM专门增强多模态局部表征,提升不同区域、不同尺度下的纹理/边缘/目标轮廓建模能力。
  • 核心创新思路:用多种卷积形式覆盖不同局部感受野,再通过通道洗牌促进特征重组,避免单一卷积对局部结构刻画不足。

适用场景与效果

  • 适用场景:RGB-IR/Visible-Infrared 目标检测,多光谱行人检测,低照度、雾天、雨天、遮挡等复杂场景。
  • 性能表现:在 FLIR 上,完整 FreDFT 达到 mAP50 83.5%mAP 42.6%;消融中,仅加入 FDFAM 为 81.7/42.3,加入 LFEM 后提升到 82.8/42.4,说明 LFEM 有稳定增益。
  • 局限性:论文讨论部分指出,面对严重遮挡、非站立姿态、小目标和模糊区域时仍会失败;LFEM本身偏局部增强,不能单独解决所有跨模态冲突问题。

代码实现与模块对应解析

1. 核心代码片段

class LFEM(nn.Module):
    def __init__(self, in_channels):
        super(LFEM, self).__init__()
        self.CBSk1 = Conv(in_channels, in_channels, 1, 1)
        self.CBSk3 = Conv(in_channels, in_channels, 3, 1)

        self.dconv = nn.Sequential(
            nn.Conv2d(in_channels, in_channels, kernel_size=3, stride=1, padding=3, dilation=3, bias=False),
            nn.BatchNorm2d(in_channels),
            nn.SiLU()
        )

        self.dfconv = DeformConv2d(in_channels, in_channels, kernel_size=3, padding=1, bias=False, modulation=True)
        self.bn = nn.BatchNorm2d(in_channels)
        self.silu = nn.SiLU()

        self.dwconv = nn.Sequential(
            nn.Conv2d(in_channels, in_channels, kernel_size=3, stride=1, padding=1, groups=in_channels, bias=False),
            nn.BatchNorm2d(in_channels),
            nn.SiLU()
        )

        self.CBS4C = Conv(4 * in_channels, in_channels, 1, 1)

    def forward(self, x):
        rgb_fea = x[0]
        ir_fea = x[1]

        rgb_fea0 = self.CBSk1(rgb_fea)
        rgb_fea1 = self.CBSk3(rgb_fea0)
        rgb_fea2 = self.dconv(rgb_fea0)
        rgb_fea3 = self.silu(self.bn(self.dfconv(rgb_fea0)))
        rgb_fea4 = self.dwconv(rgb_fea0)

        rgb_fea_cat = torch.cat([rgb_fea1, rgb_fea2, rgb_fea3, rgb_fea4], dim=1)
        rgb_fea_cat = channel_shuffle(rgb_fea_cat, 32)
        new_rgb_fea = self.CBS4C(rgb_fea_cat)
        new_rgb = new_rgb_fea + rgb_fea

        ir_fea0 = self.CBSk1(ir_fea)
        ir_fea1 = self.CBSk3(ir_fea0)
        ir_fea2 = self.dconv(ir_fea0)
        ir_fea3 = self.silu(self.bn(self.dfconv(ir_fea0)))
        ir_fea4 = self.dwconv(ir_fea0)

        ir_fea_cat = torch.cat([ir_fea1, ir_fea2, ir_fea3, ir_fea4], dim=1)
        ir_fea_cat = channel_shuffle(ir_fea_cat, 32)
        new_ir_fea = self.CBS4C(ir_fea_cat)
        new_ir = new_ir_fea + ir_fea

        return [new_rgb, new_ir]

2. 参数说明、使用实例、运行流程

  • 输入x = [rgb_fea, ir_fea],两路特征张量,形状通常为 [B, C, H, W]
  • 参数in_channels 表示输入/输出通道数,模块内部保持通道数不变
  • 输出[new_rgb, new_ir],增强后的双模态特征,形状仍为 [B, C, H, W]

使用方式

  • 常见于双分支骨干网络的中后层特征融合前
  • 直接以 RGB/IR 特征对作为输入,分别输出增强特征
  • 其输出再送入 CGMM 或 FDFAM

整体流程

  1. 双模态特征分别输入
  2. 统一用 1×1 Conv 做预处理
  3. 四分支卷积提取局部模式
  4. 拼接 + 通道洗牌实现重组
  5. 1×1 Conv 压缩回原通道
  6. 残差连接保留原始信息

3. 代码-论文原理对应说明

  • self.CBSk1 = Conv(..., 1, 1):对应论文中“先采用 1×1 convolution + BN + SiLU 增加非线性且不改变特征图尺寸”。
  • self.CBSk3 = Conv(..., 3, 1):对应标准 3×3 Conv 分支,用于捕获局部邻域信息。
  • self.dconv = nn.Conv2d(..., dilation=3):对应论文中的 D-Conv,通过空洞卷积扩大感受野,关注更大局部区域。
  • self.dfconv = DeformConv2d(...):对应论文中的 Df-Conv,用于自适应采样,增强对形变目标/复杂局部结构的建模。
  • self.dwconv = ... groups=in_channels:对应 Dw-Conv,强调逐通道局部提取,降低参数并保持局部敏感性。
  • torch.cat([...], dim=1):对应论文中的多分支特征拼接。
  • channel_shuffle(rgb_fea_cat, 32):对应论文里的 channel shuffle,用于促进通道间交互与重组。
  • self.CBS4C = Conv(4 * in_channels, in_channels, 1, 1):对应“1×1 convolution 用于特征维度压缩”。
  • new_rgb_fea + rgb_feanew_ir + ir_fea:对应论文中的残差相加,保留初始信息并增强局部特征。
Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐