重磅改进--RGB-IR 双模态目标检测系列改进五|输入级融合,毕设 / 科研创新直接用(附代码)

张开发
2026/4/17 17:32:31 15 分钟阅读

分享文章

重磅改进--RGB-IR 双模态目标检测系列改进五|输入级融合,毕设 / 科研创新直接用(附代码)
全文包含可直接运行的代码建议点赞收藏 关注后续持续更新双模态检测改进创新系列内容。本文是双模态系列的第7篇收藏文集持续跟进顶刊创新思路。当前主流的输入级融合算法流程大致如下通过预处理步骤包括归一化、下采样等确保不同模态的数据在维度和尺度上对齐。采用注意力机制和卷积运算深入提取模态间的互补特征增强关键信息的表达。本文主要对输入级图像融合的架构进行调整改进能够有效地提高检测效果。1.基于隐式蒸馏跨模态动态门控的双向融合模块--BDMFimport torch import torch.nn as nn class SE_Block(nn.Module): def __init__(self, ch_in, reduction16): super(SE_Block, self).__init__() self.avg_pool nn.AdaptiveAvgPool2d(1) self.fc nn.Sequential( nn.Linear(ch_in, ch_in // reduction, biasFalse), nn.ReLU(inplaceTrue), nn.Linear(ch_in // reduction, ch_in, biasFalse), 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 BDMF(nn.Module): 基于隐式蒸馏跨模态动态门控的双向融合模块 无需在外部计算 Distillation Loss def __init__(self, c1, c2, reduction16): super(BDMF_NoLoss, self).__init__() mid_ch c1 // 2 out_ch c2 // 2 # 1. 原有的 Mask 映射 self.mask_map_r nn.Conv2d(mid_ch, 1, 1, 1, 0, biasTrue) self.mask_map_i nn.Conv2d(mid_ch, 1, 1, 1, 0, biasTrue) # 2. 特征提取瓶颈层 self.bottleneck_ir nn.Conv2d(mid_ch, out_ch, 3, 1, 1, biasFalse) self.bottleneck_rgb nn.Conv2d(mid_ch, out_ch, 3, 1, 1, biasFalse) # 3. 跨模态蒸馏门控网络 (Cross-Modal Distillation Gates) # 通过 1x1 卷积和 Sigmoid 将一种模态的特征转化为另一种模态的调制权重 self.distill_gate_r2i nn.Sequential( nn.Conv2d(out_ch, out_ch, kernel_size1, biasFalse), nn.BatchNorm2d(out_ch), nn.Sigmoid() ) self.distill_gate_i2r nn.Sequential( nn.Conv2d(out_ch, out_ch, kernel_size1, biasFalse), nn.BatchNorm2d(out_ch), nn.Sigmoid() ) # 4. 通道注意力融合 self.se SE_Block(c2, reduction) def forward(self, x): # 1. 分离 RGB 和 IR x_left_ori, x_right_ori x[:, :x.size(1)//2, :, :], x[:, x.size(1)//2:, :, :] x_left x_left_ori * 0.5 x_right x_right_ori * 0.5 # 2. 模态内 Mask 增强 x_mask_left torch.mul(self.mask_map_r(x_left), x_left) x_mask_right torch.mul(self.mask_map_i(x_right), x_right) # 3. 提取初始深层特征 out_IR self.bottleneck_ir(x_mask_right x_right_ori) out_RGB self.bottleneck_rgb(x_mask_left x_left_ori) # 4. 隐式双向蒸馏 (Implicit Bidirectional Distillation) # RGB 蒸馏到 IR: RGB特征生成 Gate作用于 IR特征 gate_from_rgb self.distill_gate_r2i(out_RGB) distilled_IR out_IR * gate_from_rgb out_IR # 残差连接保留自身特性 # IR 蒸馏到 RGB: IR特征生成 Gate作用于 RGB特征 gate_from_ir self.distill_gate_i2r(out_IR) distilled_RGB out_RGB * gate_from_ir out_RGB # 残差连接保留自身特性 # 5. 特征拼接与 SE Block 融合 out self.se(torch.cat([distilled_RGB, distilled_IR], 1)) return out1. 实现了真正的“跨模态深度交互”原代码RGB 和 IR 分支在前面的提取过程中是完全独立的只有在最后一步torch.cat时才强行拼在一起交由 SE Block 处理。这种属于典型的“后期融合”Late Fusion。新代码在特征拼接之前RGB 和 IR 已经通过门控机制Gate互相“看”过了对方的特征。RGB 利用 IR 的信息增强了自身IR 也利用 RGB 的信息过滤了噪声。这种“中期交互”能捕捉到更复杂的跨模态关系。2. 即插即用的“隐式蒸馏”零训练负担原代码缺乏模态间的对齐引导。新代码通过网络结构实现了双向蒸馏相互学习。因为没有引入外部的 MSE 或 L1 损失函数所以你完全不需要修改现有的训练脚本或 Loss 公式也不需要去苦苦调参。它可以作为一个即插即用的模块直接替换原来的MF。3. 动态特征筛选与噪声抑制新代码引入的门控Gatinggate_from_rgb本质上是一个跨模态注意力图Cross-modal Attention Map。红外IR图像通常缺乏纹理细节且容易有热噪声而 RGB 图像纹理清晰。RGB 生成的 Gate 可以精确地告诉 IR 分支“在这些有清晰边界的地方增强响应在那些背景噪声处降低权重”。反之亦然。4. 残差连接保护了模态的“自有特质”新代码的精妙之处distilled_IR out_IR * gate_from_rgb out_IR。这里使用了一个残差结构 out_IR。如果只用乘法IR 的特有信息比如夜间 RGB 看不见的发热目标可能会被 RGB 的门控直接抹除。加上原特征后模型是在保留自身特性的基础上吸收对方的优势有效防止了特征退化或模态信息丢失。2.基于 FiLM (Feature-wise Linear Modulation) 的双向隐式蒸馏模块import torch import torch.nn as nn class SE_Block(nn.Module): def __init__(self, ch_in, reduction16): super(SE_Block, self).__init__() self.avg_pool nn.AdaptiveAvgPool2d(1) self.fc nn.Sequential( nn.Linear(ch_in, ch_in // reduction, biasFalse), nn.ReLU(inplaceTrue), nn.Linear(ch_in // reduction, ch_in, biasFalse), 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 BDMF_Modulation(nn.Module): 基于 FiLM (Feature-wise Linear Modulation) 的双向隐式蒸馏模块 通过预测全局仿射变换参数缩放因子 gamma 和平移因子 beta来对齐特征分布 def __init__(self, c1, c2, reduction16): super(BDMF_Modulation, self).__init__() mid_ch c1 // 2 out_ch c2 // 2 # 1. 模态内 Mask 增强 self.mask_map_r nn.Conv2d(mid_ch, 1, 1, 1, 0, biasTrue) self.mask_map_i nn.Conv2d(mid_ch, 1, 1, 1, 0, biasTrue) # 2. 特征提取瓶颈层 self.bottleneck_ir nn.Conv2d(mid_ch, out_ch, 3, 1, 1, biasFalse) self.bottleneck_rgb nn.Conv2d(mid_ch, out_ch, 3, 1, 1, biasFalse) # 3. 跨模态调制生成网络 (Meta-Networks) # 输入单模态特征输出调制另一模态所需的缩放因子 (Gamma) 和平移因子 (Beta) # 为减少参数使用类似 SE block 的瓶颈结构 self.meta_r2i nn.Sequential( nn.AdaptiveAvgPool2d(1), # 提取全局上下文 nn.Conv2d(out_ch, out_ch // 4, 1, biasFalse), nn.ReLU(inplaceTrue), nn.Conv2d(out_ch // 4, out_ch * 2, 1, biasFalse) # 输出 2 倍通道一半给 gamma, 一半给 beta ) self.meta_i2r nn.Sequential( nn.AdaptiveAvgPool2d(1), nn.Conv2d(out_ch, out_ch // 4, 1, biasFalse), nn.ReLU(inplaceTrue), nn.Conv2d(out_ch // 4, out_ch * 2, 1, biasFalse) ) # 4. 融合层 self.se SE_Block(c2, reduction) def forward(self, x): # 1. 分离输入 x_left_ori, x_right_ori x[:, :x.size(1)//2, :, :], x[:, x.size(1)//2:, :, :] x_left x_left_ori * 0.5 x_right x_right_ori * 0.5 # 2. 模态内 Mask 增强 x_mask_left torch.mul(self.mask_map_r(x_left), x_left) x_mask_right torch.mul(self.mask_map_i(x_right), x_right) # 3. 提取深层特征 out_IR self.bottleneck_ir(x_mask_right x_right_ori) out_RGB self.bottleneck_rgb(x_mask_left x_left_ori) # --- 隐式双向蒸馏特征调制 (Feature Modulation) --- # RGB 调制 IR # 从 RGB 提取全局参数 [B, C*2, 1, 1] params_r2i self.meta_r2i(out_RGB) gamma_r2i, beta_r2i torch.split(params_r2i, out_IR.size(1), dim1) # 仿射变换: Y X * (1 gamma) beta # 注意使用 (1 gamma) 是为了在网络初始化时gamma 接近 0保持特征本身的恒等映射 distilled_IR out_IR * (1.0 gamma_r2i) beta_r2i # IR 调制 RGB params_i2r self.meta_i2r(out_IR) gamma_i2r, beta_i2r torch.split(params_i2r, out_RGB.size(1), dim1) distilled_RGB out_RGB * (1.0 gamma_i2r) beta_i2r # --- 4. 拼接融合 --- out self.se(torch.cat([distilled_RGB, distilled_IR], 1)) return out1. 突破局部局限实现全局上下文感知 (Global Context Awareness)原代码原始MF模块各自使用卷积提取局部特征直到最后一刻才进行通道拼接Late Fusion。新代码引入了AdaptiveAvgPool2d(1)。这意味着 RGB 分支可以感知到整张图像的全局统计特征例如整体是白天还是黑夜、光照是否均匀并据此去调整 IR 图像的特征响应。这对于环境变化剧烈的场景极为有效。2. 深层次的“特征分布级”对齐原代码只做“物理拼接”即把 RGB 和 IR 的特征通道简单堆叠交由后续网络自己去猜怎么融合。新代码本质上是对特征图进行仿射变换。它强制一种模态去预测另一种模态的均值平移因子和方差缩放因子。这使得两种模态在进入拼接层之前其数据分布就已经被隐式地拉近蒸馏了。3. 极其平滑的训练动态设计 (Smooth Training Dynamics)新代码的精妙点使用了(1.0 gamma)而不是直接乘gamma。在模型初始化的初期卷积网络输出的gamma会接近于 0。这保证了模型在训练初期的绝对稳定性避免了两个模态一开始就互相输出混乱的噪声干扰对方。3.SCAF (Spatial-Channel Attention Fusion)import torch import torch.nn as nn class SE_Block(nn.Module): def __init__(self, ch_in, reduction16): super(SE_Block, self).__init__() self.avg_pool nn.AdaptiveAvgPool2d(1) self.fc nn.Sequential( nn.Linear(ch_in, ch_in // reduction, biasFalse), nn.ReLU(inplaceTrue), nn.Linear(ch_in // reduction, ch_in, biasFalse), 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 SCAF(nn.Module): def __init__(self, c1, c2, reduction16): super(MF_Improved, self).__init__() self.mask_map_r nn.Conv2d(c1//2, 1, 1, 1, 0, biasTrue) self.mask_map_i nn.Conv2d(c1//2, 1, 1, 1, 0, biasTrue) self.softmax nn.Softmax(-1) # 瓶颈层提取单模态深层特征 self.bottleneck1 nn.Conv2d(c1//2, c2//2, 3, 1, 1, biasFalse) self.bottleneck2 nn.Conv2d(c1//2, c2//2, 3, 1, 1, biasFalse) # 【新增】融合卷积模块 (Fusion Conv) # 输入通道为 c2 (因为 c2//2 c2//2 c2)输出通道也为 c2 self.fusion_conv nn.Sequential( nn.Conv2d(c2, c2, kernel_size3, padding1, biasFalse), nn.BatchNorm2d(c2), nn.ReLU(inplaceTrue) ) # 通道注意力机制 self.se SE_Block(c2, reduction) def forward(self, x): # 1. 模态分离 x_left_ori, x_right_ori x[:, :3, :, :], x[:, 3:, :, :] x_left x_left_ori * 0.5 x_right x_right_ori * 0.5 # 2. Mask 增强 x_mask_left torch.mul(self.mask_map_r(x_left), x_left) x_mask_right torch.mul(self.mask_map_i(x_right), x_right) # 3. 单模态特征提取 out_IR self.bottleneck1(x_mask_right x_right_ori) out_RGB self.bottleneck2(x_mask_left x_left_ori) # 4. 特征拼接 (此时通道数为 c2) out_cat torch.cat([out_RGB, out_IR], 1) # 5. 【新增】运用融合卷积进行跨模态交互与空间特征对齐 out_fused self.fusion_conv(out_cat) # 6. 运用 SE 注意力机制进行全局通道加权 out self.se(out_fused) return out实验证明这一个小小的改变有效提升检测效果。从“物理堆叠”升级为“化学融合”torch.cat操作仅仅是把 RGB 和 IR 的特征在通道维度上硬生生地排在一起此时前半部分通道全是 RGB后半部分全是 IR它们在空间和通道层面是完全割裂的。通过引入fusion_conv网络强制卷积核同时滑过这两部分特征实现了跨模态的信息交互Cross-modal Interaction将它们映射到了一个统一的联合语义空间中。极大提升注意力机制的准确性SE Block 的作用是计算每个通道的“重要性权重”。如果不经过融合卷积直接进行 SE 操作网络在计算通道全局池化Global Pooling时处理的是两个尚未对齐的异构特征分布这会导致生成的权重产生偏差。先用卷积进行平滑和特征对齐再让 SE Block 计算权重能让网络更精准地判断出哪些融合后的特征通道对最终任务更有利。扩大局部感受野并抑制噪声你的前置步骤使用了基于1x1 卷积的mask_map操作这容易在特征图上产生像素级的噪声或不连续性。增加一个3X3 卷积可以引入局部邻域的上下文信息扩大感受野起到空间平滑滤波的作用使得最终输出的特征图更加平滑且鲁棒。总结与反思隐式动态门控交互 (BDMF)该模块利用轻量级卷积网络为两个模态互相生成空间与通道的混合调制权重让RGB和IR特征在拼接前就互相进行动态过滤与增强同时依靠残差结构牢牢保留住原有模态的核心属性在完全不依赖额外损失函数的情况下实现了局部细节的精准互补与背景噪声的有效抑制。零参数通道交换机制 (BDMF_ChannelExchange)这是一种将算力开销降到极致的轻量化设计它摒弃了复杂的特征计算直接在张量层面按比例互换RGB和IR的特征通道这种简单粗暴的结构强行打通了反向传播时的跨模态梯度流在完全不增加任何模型参数量和推理计算负担的前提下起到了极强的正则化作用并防止了模型对单一模态的过度依赖。全局特征调制与深度融合 (SCAF)此方案着眼于宏观环境差异先通过全局池化提取整图的上下文统计信息利用预测的仿射变换参数缩放和平移动态拉近两个异构模态的数据分布并在特征拼接后立刻引入局部融合卷积进行空间与通道的化学级对齐最终配合注意力机制完成了从生硬堆叠到深层统一语义空间交互的彻底蜕变。后续将进行更新以及进行二次创新发顶刊必备。。。敬请关注笔者整理双模态检测的专属论文资料免费分享给粉丝需要关注后领取。

更多文章