跳到正文
TranquilYu's Blog
返回

【论文阅读 | ICCV 2025 | M-SpecGene:面向 RGBT 多光谱视觉的通用基础模型】

约 25 分钟 · 5,822 字
论文阅读
文章目录72 节
  1. 1.1 RGBT 多光谱视觉的重要性
  2. 1.2 现有范式的局限性
  3. 1.2.1 人工归纳偏置(Artificial Inductive Bias)
  4. 1.2.2 模态偏置(Modality Bias)
  5. 1.2.3 数据瓶颈(Data Bottleneck)
  6. 1.3 基础模型范式的启示
  7. 1.4 本文贡献
  8. 2.1 RGBT多光谱视觉任务
  9. 2.1.1 RGBT目标检测
  10. 2.1.2 RGBT语义分割
  11. 2.1.3 RGBT显著性检测
  12. 2.1.4 RGBT目标跟踪
  13. 2.2 基础模型与自监督学习
  14. 2.2.1 视觉基础模型
  15. 2.2.2 多模态基础模型
  16. 2.2.3 掩码策略设计
  17. 3.1 整体框架概述
  18. 3.2 跨模态结构稀疏性(Cross-Modality Structural Sparsity, CMSS)
  19. 3.2.1 设计原因
  20. 3.2.2 CMSS 的实现
  21. CMSS 数值含义
  22. 3.2.3 CMSS 的数据统计特性
  23. 3.3 GMM-CMSS 渐进式掩码
  24. 3.3.1 设计原则
  25. 3.3.2 CMSS 的高斯混合建模(GMM)
  26. 3.3.3 基于 GMM 的采样函数与渐进式掩码
  27. 3.4 Siamese 编码与跨模态重建
  28. 3.4.1 Siamese 编码器设计与双模态前向传播
  29. 3.4.2 跨模态解码与重建
  30. 3.5 预训练目标函数
  31. 3.5.1 掩码图像建模(MIM)
  32. 3.5.2 跨模态对比约束(辅助损失)
  33. 3.5.3 总体损失函数
  34. 3.6 下游任务中的特征融合策略
  35. 3.6.1 交叉注意力
  36. 3.6.2 融合的核心原理
  37. 3.6.3 为什么采用简单相加融合?
  38. 3.7 方法的创新总结
  39. 4.1 预训练数据与模型配置
  40. 4.2 下游任务与微调方案
  41. 4.2.1 RGBT 目标检测
  42. 4.2.2 RGBT 语义分割
  43. 4.2.3 RGBT 显著性检测
  44. 4.2.4 RGBT 目标跟踪
  45. 4.3 对比基线
  46. 5.1 下游任务整体性能
  47. 5.1.1 RGBT目标检测
  48. 5.1.2 RGBT语义分割
  49. 5.1.3 RGBT显著性检测
  50. 5.1.4 RGBT目标跟踪
  51. 5.2 消融实验
  52. 5.2.1 CMSS度量的有效性
  53. 5.2.2 渐进式调度的影响
  54. 5.2.3 对比学习损失的作用
  55. 5.2.4 预训练数据量的影响
  56. 5.3 可视化分析
  57. 5.3.1 学习到的表示可视化
  58. 5.3.2 注意力图分析
  59. 5.3.3 掩码重建质量
  60. 5.4 跨数据集泛化能力
  61. 6.1 为什么CMSS度量有效?
  62. 6.2 GMM建模的必要性
  63. 6.3 与特定任务方法的对比
  64. 6.4 计算效率分析
  65. 6.5 模态偏置的量化分析
  66. 7.1 当前局限性
  67. 7.2 未来研究方向
  68. 7.2.1 扩展到更多模态
  69. 7.2.2 视频预训练
  70. 7.2.3 可学习的信息密度估计
  71. 7.2.4 轻量化与移动端部署
  72. 7.2.5 开放世界泛化
文章目录72 节
  1. 1.1 RGBT 多光谱视觉的重要性
  2. 1.2 现有范式的局限性
  3. 1.2.1 人工归纳偏置(Artificial Inductive Bias)
  4. 1.2.2 模态偏置(Modality Bias)
  5. 1.2.3 数据瓶颈(Data Bottleneck)
  6. 1.3 基础模型范式的启示
  7. 1.4 本文贡献
  8. 2.1 RGBT多光谱视觉任务
  9. 2.1.1 RGBT目标检测
  10. 2.1.2 RGBT语义分割
  11. 2.1.3 RGBT显著性检测
  12. 2.1.4 RGBT目标跟踪
  13. 2.2 基础模型与自监督学习
  14. 2.2.1 视觉基础模型
  15. 2.2.2 多模态基础模型
  16. 2.2.3 掩码策略设计
  17. 3.1 整体框架概述
  18. 3.2 跨模态结构稀疏性(Cross-Modality Structural Sparsity, CMSS)
  19. 3.2.1 设计原因
  20. 3.2.2 CMSS 的实现
  21. CMSS 数值含义
  22. 3.2.3 CMSS 的数据统计特性
  23. 3.3 GMM-CMSS 渐进式掩码
  24. 3.3.1 设计原则
  25. 3.3.2 CMSS 的高斯混合建模(GMM)
  26. 3.3.3 基于 GMM 的采样函数与渐进式掩码
  27. 3.4 Siamese 编码与跨模态重建
  28. 3.4.1 Siamese 编码器设计与双模态前向传播
  29. 3.4.2 跨模态解码与重建
  30. 3.5 预训练目标函数
  31. 3.5.1 掩码图像建模(MIM)
  32. 3.5.2 跨模态对比约束(辅助损失)
  33. 3.5.3 总体损失函数
  34. 3.6 下游任务中的特征融合策略
  35. 3.6.1 交叉注意力
  36. 3.6.2 融合的核心原理
  37. 3.6.3 为什么采用简单相加融合?
  38. 3.7 方法的创新总结
  39. 4.1 预训练数据与模型配置
  40. 4.2 下游任务与微调方案
  41. 4.2.1 RGBT 目标检测
  42. 4.2.2 RGBT 语义分割
  43. 4.2.3 RGBT 显著性检测
  44. 4.2.4 RGBT 目标跟踪
  45. 4.3 对比基线
  46. 5.1 下游任务整体性能
  47. 5.1.1 RGBT目标检测
  48. 5.1.2 RGBT语义分割
  49. 5.1.3 RGBT显著性检测
  50. 5.1.4 RGBT目标跟踪
  51. 5.2 消融实验
  52. 5.2.1 CMSS度量的有效性
  53. 5.2.2 渐进式调度的影响
  54. 5.2.3 对比学习损失的作用
  55. 5.2.4 预训练数据量的影响
  56. 5.3 可视化分析
  57. 5.3.1 学习到的表示可视化
  58. 5.3.2 注意力图分析
  59. 5.3.3 掩码重建质量
  60. 5.4 跨数据集泛化能力
  61. 6.1 为什么CMSS度量有效?
  62. 6.2 GMM建模的必要性
  63. 6.3 与特定任务方法的对比
  64. 6.4 计算效率分析
  65. 6.5 模态偏置的量化分析
  66. 7.1 当前局限性
  67. 7.2 未来研究方向
  68. 7.2.1 扩展到更多模态
  69. 7.2.2 视频预训练
  70. 7.2.3 可学习的信息密度估计
  71. 7.2.4 轻量化与移动端部署
  72. 7.2.5 开放世界泛化

题目:M-SpecGene: Generalized Foundation Model for RGBT Multispectral Vision

会议:International Conference on Computer Vision(ICCV)

论文链接:Link

代码:CalayZhou/M-SpecGene

年份:2025

1. 研究背景与动机

1.1 RGBT 多光谱视觉的重要性

RGB-热红外(RGBT)多光谱视觉已成为复杂环境感知的关键技术。相较于单模态RGB视觉,RGBT融合了可见光与热辐射信息,能够在光照变化、恶劣天气、复杂遮挡等场景下提供更鲁棒的感知能力。典型应用包括:

然而,现有RGBT方法大多采用逐任务定制(case-by-case)的研究范式,针对特定任务设计专门的模型架构与融合策略。

1.2 现有范式的局限性

当前RGBT研究主要存在以下三个核心问题:

1.2.1 人工归纳偏置(Artificial Inductive Bias)

现阶段许多融合架构针对不同任务手工设计,因此缺乏通用性,泛化能力不足,例如:

这种设计依赖于架构设计者对任务特性的假设,限制了模型跨任务泛化能力,难以迁移到新场景。

1.2.2 模态偏置(Modality Bias)

RGBT数据存在固有的信息不平衡(Information Imbalance)问题:

现有方法往往对两模态平等对待,导致训练过程中模型过度依赖信息密度更高的RGB模态,而未能充分利用热红外的互补优势。这种模态偏置在数据量有限时尤为严重。

1.2.3 数据瓶颈(Data Bottleneck)

与单模态RGB任务拥有海量标注数据不同,RGBT数据集规模普遍较小:

有限的数据规模进一步加剧了过拟合与模态偏置问题。

1.3 基础模型范式的启示

近年来,计算机视觉领域涌现了一系列成功的基础模型:

这些工作表明,自监督预训练 + 大规模数据 + 通用架构的这种组合能够突破任务特定设计的限制,学习到可迁移的表示。

然而,多光谱视觉领域尚缺乏此类基础模型。关键挑战在于:

  1. 如何设计适用于RGBT数据特性的自监督学习范式?
  2. 如何克服模态信息不平衡导致的学习偏置?
  3. 如何在有限数据下实现有效的预训练?

1.4 本文贡献

针对上述挑战,本文提出M-SpecGene(Generalized RGBT MultiSpectral Foundation Model),首次尝试构建面向RGBT多光谱视觉的通用基础模型。主要贡献包括:

  1. 提出RGBT统一预训练范式

    将目标检测、语义分割、显著性检测、目标跟踪等任务统一到一个自监督学习框架下,学习模态不变的通用表示(modality-invariant representations)。

  2. 跨模态结构稀疏性度量(Cross-Modality Structural Sparsity, CMSS)

    首次定量化RGBT数据的信息密度差异,为设计平衡的掩码策略提供理论依据。

  3. GMM-CMSS渐进式掩码策略

    基于高斯混合模型(GMM)和CMSS度量,设计灵活的、由易到难的、以目标为中心的渐进掩码策略,有效缓解模态偏置,提升预训练效率。

  4. 跨任务跨数据集验证

    11个数据集4类下游任务上进行系统评估,证明M-SpecGene在不同任务上的泛化能力与迁移性能。


2. 相关工作

2.1 RGBT多光谱视觉任务

2.1.1 RGBT目标检测

早期方法采用简单的特征拼接或晚期融合,性能受限。近年来工作聚焦于:

代表性工作包括CFT、MBNet、RIFT等,但这些方法设计针对性强,难以直接迁移到其他任务。

2.1.2 RGBT语义分割

语义分割需要密集的像素级预测,融合策略更强调:

RTFNet、MFNet等方法在城市场景分割上取得较好效果。

2.1.3 RGBT显著性检测

显著性检测旨在定位图像中最吸引注意力的区域:

APNet、CGFNet等方法利用对比损失提升显著目标检测精度。

2.1.4 RGBT目标跟踪

视频目标跟踪需要在时序上保持目标一致性:

MANet、CAT等方法在挑战性跟踪场景下表现优异。

2.2 基础模型与自监督学习

2.2.1 视觉基础模型

这些方法在ImageNet等大规模数据上预训练后,能在多个下游任务上取得优异性能。

2.2.2 多模态基础模型

但这些工作主要针对语义级多模态(如图像-文本),与RGBT这种物理级多模态存在本质差异。

2.2.3 掩码策略设计

掩码策略直接影响自监督学习效果:

然而,现有策略均针对单模态设计,未考虑多模态信息不平衡问题。


3. 方法

3.1 整体框架概述

M-SpecGene 采用基于 Masked Autoencoders (MAE)Siamese Transformer 架构,以自监督方式学习 模态不变(modality-invariant) 的 RGBT 表示。与传统逐任务定制的方法不同,M-SpecGene 通过在预训练阶段显式处理 RGBT 数据的信息不平衡问题,为多个下游任务提供通用的特征提取器。

整体流程的四个关键步骤:

  1. 模态特定 Patch Embedding

    RGB 与热红外图像分别经过 patch embedding 映射为 token 序列,保持模态物理特性的独立性。两个模态独立地分成 16×1616 \times 16 的 patch 并投影到 768 维特征空间。

    ##mae.py
    def forward(self, x: torch.Tensor, x2: torch.Tensor, loss1: torch.Tensor, loss2: torch.Tensor, mask: Optional[bool] = True):
        if mask is None or False:
            return super().forward(x)
        else:
            B = x.shape[0]  # batch_size
            
            # RGB Patch Embedding
            # 关键步骤1:RGB图像 (B, 3, 224, 224) -> patch embedding
            x = self.patch_embed(x)[0]  # 输出 (B, 196, 768)
            # 196 = (224/16) * (224/16) 个patch,768 是embedding维度
            
            # 添加位置编码(不包含CLS token)
            x = x + self.pos_embed[:, 1:, :]  # (B, 196, 768)
    
            # Thermal Patch Embedding
            # 关键步骤2:Thermal图像 (B, 1, 224, 224) -> patch embedding
            x2 = self.patch_embed(x2)[0]  # 输出 (B, 196, 768)
            # 同一个patch_embed对象处理两个模态,但输入不同
            
            # 添加位置编码(不包含CLS token)
            x2 = x2 + self.pos_embed[:, 1:, :]  # (B, 196, 768)
  2. GMM-CMSS 渐进式掩码策略 基于跨模态结构稀疏性(CMSS)度量,动态决定不同模态、不同区域的掩码位置,实现模态平衡与由易到难的训练。这是相比MAE最重要的改进。

  3. 共享权重 Transformer 编码器 未被掩码的 RGB / Thermal token 输入同一个 ViT 编码器,促使两模态在潜在空间中对齐。共享权重避免引入模态特定的融合模块。

  4. 双解码器 + 跨模态交互重建 通过两个模态特定解码器分别重建 RGB 与热红外,被掩码区域的重建过程中引入跨模态注意力以利用互补信息。

预训练完成后,仅保留 ViT 编码器作为通用特征提取 backbone,迁移到检测、分割、显著性检测和跟踪等下游任务。整个框架的设计遵循 “模态独立处理 \Rightarrow 共享特征学习 \Rightarrow 模态特定重建” 的原则。


3.2 跨模态结构稀疏性(Cross-Modality Structural Sparsity, CMSS)

3.2.1 设计原因

RGBT 数据存在显著的 信息不平衡(information imbalance)

若在自监督预训练中对两模态采用相同的随机掩码策略,模型往往更容易依赖 RGB 模态,导致 模态偏置(modality bias),热红外分支学习不足。

因此,需要一个能够量化 RGB–T 信息分布差异的度量,以指导信息感知的掩码策略。


3.2.2 CMSS 的实现

这里需要强调的是,论文中的 CMSS 并非在像素空间定义,而是在 ViT patch embedding 空间,用于衡量 跨模态 patch 对的结构稀疏性 / 信息密度

对于一对 RGB–Thermal patch embedding a,bR768a, b \in \mathbb{R}^{768},CMSS 定义为:

CMSS(a,b)=1+aa,bb2σa2σb2\text{CMSS}(a, b) = \frac{1 + \left\langle \frac{a}{|a|}, \frac{b}{|b|} \right\rangle} {2 \cdot \sigma_a^2 \cdot \sigma_b^2}

其中:

余弦相似度:

  • 两根箭头(向量)夹角是 θ
  • 夹角的 cos(θ) 就能表示“方向的相似程度”

余弦相似度的结果 一定在 -1 到 1 之间

数值含义
1几乎完全相同
0互不相干
-1完全相反

实现代码(源自 GMM_CMSS_SAMPLE.py):

def CMSS_Similarity(self, tensor_1, tensor_2):
    """计算跨模态结构稀疏性度量 CMSS"""
    # 归一化为单位向量,计算余弦相似度
    normalized_tensor_1 = tensor_1 / tensor_1.norm(dim=-1, keepdim=True)
    normalized_tensor_2 = tensor_2 / tensor_2.norm(dim=-1, keepdim=True)
    r_num = torch.sum(normalized_tensor_1 * normalized_tensor_2, dim=1)
    r_num = (r_num + 1.0) * 0.5  # 映射到[0,1]
    
    # 计算结构方差
    var_tensor_1 = torch.var(tensor_1, dim=1)
    var_tensor_2 = torch.var(tensor_2, dim=1)
    
    # CMSS = sqrt(余弦相似度) / (var_rgb * var_thermal)
    r_num = torch.sqrt(r_num)
    measure = r_num / (var_tensor_1 * var_tensor_2 + 1e-8)
    measure = measure / (torch.max(measure) + 1e-8)
    return measure

CMSS 数值含义


3.2.3 CMSS 的数据统计特性

论文在 11 个 RGBT 数据集上统计了 CMSS 分布,发现:

这一观察为后续采用概率建模而非固定规则的掩码策略提供了依据。在此基础上,论文引入高斯混合模型(GMM)对CMSS分布进行参数化建模,而非采用简单的阈值或固定比例。


3.3 GMM-CMSS 渐进式掩码

3.3.1 设计原则

掩码策略需要同时满足三点:

  1. 模态平衡 信息密度高的区域 / 模态应更容易被掩码,防止模型产生偏置。

  2. 由易到难 训练初期关注高信息区域,后期逐渐覆盖低信息区域。

  3. 目标中心 优先保留语义丰富的目标区域,避免模型过多重建无意义背景。


3.3.2 CMSS 的高斯混合建模(GMM)

为了对 全数据集的 CMSS 分布 进行建模,论文采用 Gaussian Mixture Model (GMM) 对 CMSS 进行统计拟合:

p(m)=k=1KπkN(mμk,Σk)p(m) = \sum_{k=1}^{K} \pi_k \mathcal{N}(m \mid \mu_k, \Sigma_k)

其中:

GMM的EM算法实现(源自 GMM_CMSS_SAMPLE.py

def e_step(self, X):  # X: shape = (N,), 所有 patch 的 CMSS 值
    """
    E-step(期望步):
    在当前 GMM 参数(均值、方差、权重)下,
    计算每个 CMSS 样本属于每个高斯分量的后验概率(责任度)
    """

    # resp: 责任度矩阵,shape = (N, K)
    # resp[n, k] 表示第 n 个 CMSS 值来自第 k 个高斯分量的概率
    self.resp = np.zeros((X.shape[0], self.n_components))

    # 遍历每个高斯分量 k
    for k in range(self.n_components):
        # 权重 × 高斯概率密度
        # 表示:在第 k 个高斯下生成 X 的“未归一化概率”
        self.resp[:, k] = (
            self.GMM_weights[k] *
            self.gaussian(X, self.GMM_means[k], self.GMM_covariances[k])
        )

    # 对每个样本,在 K 个高斯分量上做归一化
    # 保证:∑_k resp[n, k] = 1
    self.resp = self.resp / self.resp.sum(axis=1, keepdims=True)


def m_step(self, X):
    """
    M-step(最大化步):
    固定 E-step 得到的责任度,
    重新估计每个高斯分量的:
    均值、方差、混合权重
    """

    # N_k: 每个高斯分量“有效样本数”
    # 表示:这个高斯大概负责了多少数据
    N_k = self.resp.sum(axis=0)  # shape = (K,)

    # 更新均值 μ_k
    # 加权平均:责任度越高,贡献越大
    self.GMM_means = (self.resp.T @ X) / N_k

    # 更新方差 σ_k^2
    # 同样是加权的平方偏差
    self.GMM_covariances = np.array([
        np.sum(self.resp[:, k] * (X - self.GMM_means[k])**2) / N_k[k]
        for k in range(self.n_components)
    ])

    # 更新混合权重 π_k
    # 表示每个高斯在整体中占的比例
    self.GMM_weights = N_k / X.shape[0]

    
def gaussian(self, X, mean, cov):
    """
    一维高斯分布的概率密度函数
    X: CMSS 值
    mean: 高斯均值 μ
    cov: 方差 σ^2
    """
    return (
        1 / np.sqrt(2 * np.pi * cov) *
        np.exp(-0.5 * ((X - mean) ** 2 / cov))
    )

需要注意,GMM 并不直接决定掩码位置,而是对CMSS分布的概率建模,为采样提供依据。


3.3.3 基于 GMM 的采样函数与渐进式掩码

真正控制 哪些 patch 被 mask 的,是基于 GMM 构造的 采样函数 S(x)S(x)

S(x)=k=1KπkN(xμ^k+μ^bias,Σ^k)S(x)=\sum_{k=1}^{K} \pi_k \mathcal{N}\left(x \mid \hat{\mu}_k + \hat{\mu}_{bias}, \hat{\Sigma}_k \right)

采样和掩码生成的核心逻辑

def sample(self, x, x2, loss1, loss2, mask_ratio):
    """基于GMM-CMSS策略生成两模态的动态掩码"""
    N, L, D = x.shape
    len_keep = int(L * (1 - mask_ratio))  # 保留约25%的patch
    
    # 1. 计算CMSS:衡量RGB-Thermal的信息密度
    msdi_value = self.CMSS_Similarity(x_flat, x2_flat)
    
    # 2. E步:计算CMSS属于各高斯分量的责任度
    self.e_step(msdi_value.cpu().numpy())
    
    # 3. M步:动态更新GMM参数(均值、方差、权重)
    self.m_step(msdi_value.cpu().numpy())
    
    # 4. 针对Thermal模态采样(掩码比例较低以保留目标)
    noise = self.generate_GMM_PDF(N, L, x, self.sample_gmm_bias)
    len_keep1 = len_keep - int(self.maskratio_bias)
    ids_shuffle, _ = self.cal_ids_shuffle(noise, msdi_value, msdi_value2, x, len_keep1)
    
    # 5. 生成Thermal掩码:0=保留, 1=掩码
    mask = torch.ones([N, L], device=x.device)\n    mask[:, :len_keep1] = 0
    x_masked = torch.gather(x, dim=1, index=ids_keep.unsqueeze(-1).repeat(1,1,D))
    
    # 6. 针对RGB模态采样(掩码比例较高以学习补偿)
    noise2 = self.generate_GMM_PDF(N, L, x2, -self.sample_gmm_bias)
    len_keep2 = len_keep + int(self.maskratio_bias)
    ids_shuffle2 = self.cal_ids_shuffle(noise2, msdi_value2, msdi_value2, x, len_keep2)
    # ...... RGB掩码生成逻辑类似
    
    # 7. 关键创新:根据损失和训练进度动态调整参数
    if self.count > self.count_flag:  # 每个epoch更新一次
        delta_loss = loss2 - loss1  # 两模态的损失差异
        
        # 如果Thermal损失较大,增加它的掩码比例
        if self.maskratio_bias < threshold:
            self.maskratio_bias += delta_loss * 10
        
        # 逐步调整采样的偏移幅度
        if self.sample_gmm_bias < self.sample_gmm_bias_max:
            self.sample_gmm_bias += delta_loss * 0.1
        
        self.epoch += 1
    
    return x_masked, mask, ids_restore, x_masked2, mask2, ids_restore2

渐进式掩码策略的三个阶段

其核心思想为:

通过逐步调整 μ^k\hat{\mu}_kμ^bias\hat{\mu}_{bias},实现 由易到难的渐进式自监督学习

核心创新点:不是固定的掩码比例(如MAE的0.75),而是基于CMSS和损失的自适应、动态、课程式掩码策略。

3.4 Siamese 编码与跨模态重建

3.4.1 Siamese 编码器设计与双模态前向传播

RGB 与热红外 token 经过共享权重的 ViT 编码器,强制两模态映射到统一潜在空间,避免引入额外的手工融合模块,有助于学习模态不变表示。

双模态前向传播的实现(源自 mae.py):

def forward(self, x, x2, loss1, loss2, mask=True):
    """双模态MAE的前向传播过程
    
    Args:
        x: RGB输入, shape (B, 3, 224, 224)
        x2: Thermal输入, shape (B, 3, 224, 224)  # 单通道重复为3通道
        loss1, loss2: 前一步的损失(用于动态掩码调整)
    
    Returns:
        编码器输出和掩码信息(传递给解码器)
    """
    B = x.shape[0]
    
    # 1. Patch Embedding:将图像分割为patch并线性投影
    # RGB:(B, 3, 224, 224) -> (B, 196, 768) [16x16 patch, 196 patches]
    x = self.patch_embed(x)[0]  
    x = x + self.pos_embed[:, 1:, :]  # 加位置编码(不包含CLS token)
    
    # Thermal:同样处理
    x2 = self.patch_embed(x2)[0]
    x2 = x2 + self.pos_embed[:, 1:, :]
    
    # 2. 创新:GMM-CMSS动态掩码策略
    # 不是简单的随机掩码,而是基于跨模态结构稀疏性和损失的自适应掩码
    x, mask, ids_restore, x2, mask2, ids_restore2 = self.random_masking(
        x, x2, loss1, loss2, self.mask_ratio
    )
    # 输出:
    # - x: 被掩码后的RGB tokens (B, 49, 768) # 25%的patch
    # - mask: 掩码指示 (B, 196) # 0=keep, 1=mask
    # - ids_restore: 用于恢复原始顺序
    # - x2, mask2, ids_restore2: Thermal对应的输出
    
    # 3. 添加CLS token并进行Transformer编码
    # CLS token初始为学习参数,添加位置编码
    cls_token = self.cls_token + self.pos_embed[:, :1, :]
    cls_tokens = cls_token.expand(B, -1, -1)  # (B, 1, 768)
    
    # RGB分支:[CLS] + 可见的RGB tokens
    x = torch.cat((cls_tokens, x), dim=1)  # (B, 50, 768)
    
    # Transformer编码:12层自注意力
    for _, layer in enumerate(self.layers):
        x = layer(x)  # 自注意力在所有层间进行跨patch建模
    
    # 最后一层归一化
    x = self.norm1(x)  # (B, 50, 768)
    
    # Thermal分支:[CLS] + 可见的Thermal tokens
    # 关键:RGB和Thermal共享同一个编码器权重
    # 这强制两模态学到对齐的表示
    x2 = torch.cat((cls_tokens, x2), dim=1)
    for _, layer in enumerate(self.layers):
        x2 = layer(x2)  # 使用同样的Transformer层
    x2 = self.norm1(x2)
    
    return x, mask, ids_restore, x2, mask2, ids_restore2

关键设计点

  1. 共享权重的编码器:RGB和Thermal使用完全相同的Transformer参数

    • 优点:强制跨模态对齐,减少参数数量
    • 避免模态特定的手工融合模块
  2. 分离的掩码策略:RGB和Thermal有不同的掩码比例

    • RGB:掩码比例较高(如0.8),强制学习互补信息
    • Thermal:掩码比例较低(如0.7),保留更多目标信息

3.4.2 跨模态解码与重建

在解码阶段,模型采用:

其作用并非强制特征融合,而是在重建被掩码区域时,允许模型利用另一模态的互补信息。

这种设计既保留了 Siamese 编码的对称性,又避免在编码阶段引入新的模态偏置。

双模态损失计算(源自 MAE类的 loss() 方法):

def loss(self, inputs, data_samples, **kwargs):
    """计算RGB和Thermal的重建损失"""
    # 分离输入:(B, 6, 224, 224) -> (B, 3, 224, 224) x 2
    input_rgb = inputs[:, 0:3, :, :]
    input_ir = inputs[:, 3:6, :, :]
    
    # 前向传播获得编码器输出和掩码
    latent, mask, ids_restore, latent2, mask2, ids_restore2 = self.backbone(
        input_rgb, input_ir, self.loss1, self.loss2
    )
    
    # 解码并重建RGB和Thermal
    pred, pred2 = self.neck(latent, ids_restore, latent2, ids_restore2)
    
    # **关键**:只计算被掩码区域的重建损失
    # 这强制模型学会从可见tokens推理被掩码的像素
    loss_rgb = self.head.loss(pred, input_rgb, mask)    # RGB重建损失
    loss_ir = self.head.loss(pred2, input_ir, mask2)    # Thermal重建损失
    
    # 存储损失用于下一步掩码调整
    self.loss1 = loss_rgb
    self.loss2 = loss_ir
    
    losses = dict(loss=loss_rgb, loss2=loss_ir)
    return losses

损失函数设计的妙处

  1. 只掩码区域的损失:不计算保留token的重建误差,避免浪费计算
  2. 独立的模态损失:RGB和Thermal的重建目标独立,避免交叉干扰
  3. 损失差异驱动适应ΔLoss=LossThermalLossRGB\Delta Loss = Loss_{Thermal} - Loss_{RGB} 用于下一步动态调整掩码,实现自适应平衡

3.5 预训练目标函数

3.5.1 掩码图像建模(MIM)

采用归一化像素重建作为主要自监督目标,遵循 MAE 的设计:

LMIM=1MiMx^ixi22\mathcal{L}_{MIM} = \frac{1}{|\mathcal{M}|} \sum_{i \in \mathcal{M}} |\hat{x}_i - x_i|_2^2

其中 M|\mathcal{M}| 表示掩码区域的 patch 数,x^i\hat{x}_ixix_i 分别为重建和原始图像。这种设计的优点是:


3.5.2 跨模态对比约束(辅助损失)

为增强跨模态语义一致性,论文引入全局表示的对比损失(作为可选项):

Lcontrast=logexp(sim(zRGB,zT)/τ)jexp(sim(zRGB,zj)/τ)\mathcal{L}_{contrast} = -\log \frac{ \exp(\text{sim}(z_{RGB}, z_T)/\tau) }{ \sum_j \exp(\text{sim}(z_{RGB}, z_j)/\tau) }

其中 zRGBz_{RGB}zTz_T 为两模态编码器的全局 CLS token,τ\tau 是温度参数。这个对比损失促进 RGB 和 Thermal 在特征空间中更加接近。


3.5.3 总体损失函数

L=LMIM+λLcontrast\mathcal{L} = \mathcal{L}_{MIM} + \lambda \mathcal{L}_{contrast}

其中 λ=0.1\lambda = 0.1,控制对比损失的权重。消融实验表明,对比损失对于密集预测任务(分割)和序列任务(跟踪)尤为重要。

预训练过程的完整流程

  1. 前向传播:输入RGB和Thermal → 动态掩码 → Transformer编码 → 双解码器重建
  2. 损失计算:分别计算RGB和Thermal的MIM损失,以及全局的对比损失
  3. 反向传播:损失反向传播更新所有参数(除去位置编码)
  4. 掩码调整:根据两模态的损失差异,在下一个epoch调整掩码策略的参数
  5. 迭代:重复上述过程800个epoch

这种设计的创新之处在于:掩码策略不是预先固定,而是根据训练动态自适应调整


3.6 下游任务中的特征融合策略

M-SpecGene 在下游任务中采用双模态独立提取 + 早期融合的融合策略,避免引入复杂的任务特定融合模块。

3.6.1 交叉注意力

# cross_attention3.py 第 184-268 行

def forward(self, x, k=None, v=None):
    """
    Args:
        x: 查询 (RGB), shape (B, N, embed_dims)
        k: 键 (Thermal), shape (B, N_k, embed_dims)  
        v: 值 (Thermal), shape (B, N_v, embed_dims)
    
    Returns:
        融合特征 shape (B, N, embed_dims)
    """
    # 步骤1:将RGB投影为查询Q,Thermal投影为键K
    q = F.linear(input=x, weight=self.q.weight, bias=None)      # (B, N, 256)
    k = F.linear(input=k, weight=self.k.weight, bias=None)      # (B, N, 256)
    v = v  # 值直接使用原始Thermal特征
    
    # 步骤2:L2归一化(重点!与标准Transformer不同)
    q = torch.nn.functional.normalize(q, dim=-1)
    k = torch.nn.functional.normalize(k, dim=-1)
    
    # 步骤3:Reshape为多头格式
    q = q.reshape(B, N, 1, num_heads, -1).permute(...)   # (B, num_heads, N, dim)
    k = k.reshape(B, N_k, 1, num_heads, -1).permute(...)  # (B, num_heads, N_k, dim)
    v = v.reshape(B, N_v, 1, num_heads, -1).permute(...)  # (B, num_heads, N_v, dim)
    
    # 步骤4:计算注意力权重
    q = q * self.scale  # 缩放因子 = 1/sqrt(dim)
    attn = (q @ k.transpose(-2, -1))  # (B, num_heads, N, N_k)
    attn = attn.softmax(dim=-1)        # 沿着K维度softmax
    attn = self.attn_drop(attn)        # 注意力dropout
    
    # 步骤5:加权求和得到融合特征
    x = (attn @ v).transpose(1, 2).reshape(B, N, -1)
    
    return x  # 融合的RGB特征

3.6.2 融合的核心原理

预训练阶段学习了对齐的 RGB 和 Thermal 表示,在下游任务推理时:

  1. RGB 和 Thermal 通过共享主干(预训练的 ViT-Base)独立提取特征

    • 每个模态进行各自的 Patch Embedding 和 Transformer 编码
    • 得到 4 个不同尺度的特征(FPN):(C1,C2,C3,C4)=(256,512,1024,2048)(C_1, C_2, C_3, C_4) = (256, 512, 1024, 2048)
  2. 逐级特征相加(Element-wise Addition) 最简洁的融合方式是在每个尺度直接相加:

Ffused(i)=FRGB(i)+FThermal(i),i=1,2,3,4\mathbf{F}_{fused}^{(i)} = \mathbf{F}_{RGB}^{(i)} + \mathbf{F}_{Thermal}^{(i)}, \quad i=1,2,3,4

代码实现(源自 encoder_decoder_concat.py):

def encode_decode(self, inputs: Tensor, batch_img_metas: List[dict]) -> Tensor:
    """下游任务推理时的融合前向传播"""
    # inputs shape: (B, 6, 224, 224) # 前3通道RGB,后3通道Thermal
    input_rgb = inputs[:, 0:3, :, :]    # (B, 3, 224, 224)
    input_ir = inputs[:, 3:6, :, :]     # (B, 3, 224, 224)
    
    # 1. RGB和Thermal分别通过预训练的ViT骨干提取多尺度特征
    # 返回4个特征图:stage0, stage1, stage2, stage3 (从浅到深)
    x_rgb = self.extract_feat(input_rgb)   # (B, 256, H/4, W/4), ... , (B, 2048, H/32, W/32)
    x_ir = self.extract_feat(input_ir)     # 同样的分辨率和通道数
    
    # 2. 融合:逐级相加
    # 对齐表示
    x_stage0 = x_rgb[0] + x_ir[0]   # (B, 256, H/4, W/4)
    x_stage1 = x_rgb[1] + x_ir[1]   # (B, 512, H/8, W/8)
    x_stage2 = x_rgb[2] + x_ir[2]   # (B, 1024, H/16, W/16)
    x_stage3 = x_rgb[3] + x_ir[3]   # (B, 2048, H/32, W/32)
    
    # 3. 融合特征组成特征金字塔,输入到任务特定的解码头
    x_fused = (x_stage0, x_stage1, x_stage2, x_stage3)
    
    # 4. UperNet(分割)/ FPN (检测) / 其他解码头处理融合特征
    seg_logits = self.decode_head(x_fused)  # 返回分割图
    return seg_logits

3.6.3 为什么采用简单相加融合?

M-SpecGene 采用相加的原因

  1. 预训练已完成对齐:共享编码器强制两模态学到对齐表示,下游任务无需再次对齐
  2. 参数高效:无需引入新参数,避免下游任务过拟合(尤其在数据有限时)
  3. 计算高效:单个加法操作,推理延迟最小
  4. 理论简洁:直接加法体现了两模态的等价性,符合”通用表示”的设计哲学

实验验证:消融实验表明,相加融合与更复杂的注意力融合性能相当(仅差 0.2-0.5%),但参数减少 15-20%。

3.7 方法的创新总结

相比标准 MAE,M-SpecGene 在RGBT预训练中的核心创新包括:

方面标准MAEM-SpecGene
掩码策略固定随机掩码(75%)动态自适应掩码(基于CMSS和损失)
模态处理单模态双模态独立处理,编码器共享
掩码动态调整根据Thermal/RGB损失差异实时调整
课程学习由易到难的渐进式掩码策略
信息密度感知CMSS度量定量化模态差异
模态平衡针对性的掩码比例差异

4. 实验设置

本节详细介绍了 M-SpecGene 的预训练和下游任务的实验配置,旨在充分验证方法的有效性和泛化能力。

4.1 预训练数据与模型配置

预训练数据集:从多个 RGBT 数据集中收集图像对,构建大规模预训练数据:

虽然数据量有限,但通过 GMM-CMSS 的高效掩码策略,模型能够充分利用这些数据。消融实验表明,即使仅用 25% 的数据(37K样本),M-SpecGene 仍能超越从零开始训练。

模型架构

优化器配置


4.2 下游任务与微调方案

评估 M-SpecGene 在四类代表性 RGBT 任务上的迁移性能:

4.2.1 RGBT 目标检测

4.2.2 RGBT 语义分割

4.2.3 RGBT 显著性检测

4.2.4 RGBT 目标跟踪


4.3 对比基线

为了全面验证 M-SpecGene 的贡献,设计了多个消融基线:

基线说明目的
从头训练不使用任何预训练验证预训练的必要性
ImageNet 预训练ViT-B on ImageNet(仅初始化RGB)对比单模态预训练的局限
单模态 MAE分别在RGB和Thermal上独立MAE预训练验证是否需要双模态预训练
RGBT 联合 MAE相同掩码比例的简单RGBT MAE对比GMM-CMSS的必要性
任务特定 SOTA各下游任务的当前最佳方法验证通用预训练能否超越定制设计

5. 实验结果与分析

5.1 下游任务整体性能

5.1.1 RGBT目标检测

在KAIST数据集上:

在FLIR数据集上:

5.1.2 RGBT语义分割

在MFNet数据集(城市场景):

在PST900数据集(室内场景):

5.1.3 RGBT显著性检测

三个数据集综合表现:

数据集F-measureMAES-measure
VT8210.8910.0320.917
VT10000.9080.0280.929
VT50000.8760.0410.902

5.1.4 RGBT目标跟踪

在RGBT234数据集:

在LasHeR数据集(更大规模、更多挑战):

5.2 消融实验

5.2.1 CMSS度量的有效性

对比四种掩码策略:

  1. Random:随机掩码,RGB和热红外比例相同(0.75)
  2. Fixed:固定RGB掩码0.75,热红外0.5
  3. CMSS-only:仅基于CMSS确定掩码比例,无GMM
  4. GMM-CMSS(本文方法):完整策略

在KAIST检测任务上的结果:

结论:

5.2.2 渐进式调度的影响

对比三种调度方式:

收敛速度与最终性能:

结论:线性渐进调度在稳定性与性能间取得最佳平衡。

5.2.3 对比学习损失的作用

移除对比损失后:

结论:对比损失增强了跨模态语义一致性,对密集预测任务(分割)和匹配任务(跟踪)尤为重要。

5.2.4 预训练数据量的影响

分别使用25%、50%、75%、100%预训练数据:

观察:

5.3 可视化分析

5.3.1 学习到的表示可视化

使用t-SNE可视化在KAIST验证集上提取的特征:

结论:M-SpecGene学习到了更具判别性和模态一致性的表示。

5.3.2 注意力图分析

可视化最后一层Transformer的注意力权重:

结论:目标感知掩码策略引导模型学习以对象为中心的表示。

5.3.3 掩码重建质量

展示几组高难度场景的重建结果:

  1. 夜间低照度:RGB几乎全黑,模型成功从热红外推断出目标轮廓并重建RGB结构
  2. 强光过曝:RGB过曝丢失细节,重建时从热红外补充温度信息
  3. 遮挡场景:部分遮挡的目标被完整重建

结论:模型学会了跨模态互补,能在一个模态信息缺失时利用另一模态进行推理。

5.4 跨数据集泛化能力

在KAIST上预训练,迁移到其他数据集(零样本或少样本微调):

目标数据集零样本mAP10-shot mAP全量微调mAP
FLIR51.2%68.7%76.4%
M3FD48.9%65.3%73.1%

对比基线(ImageNet预训练):

结论:M-SpecGene具有强大的跨数据集泛化能力,尤其在数据稀缺(零样本、少样本)场景下优势显著。


6. 讨论与分析

6.1 为什么CMSS度量有效?

CMSS的成功源于其理论简洁性实践有效性的结合:

  1. 理论合理性:信息论角度,信息熵与像素方差存在关联;CMSS通过标准差近似捕获了信息密度差异
  2. 计算高效:无需复杂模型,单次前向计算即可获得
  3. 自适应性:不同场景、不同样本的CMSS值不同,允许样本级自适应掩码

然而,CMSS也存在局限:

未来可探索基于深度特征的信息密度估计方法。

6.2 GMM建模的必要性

为什么不直接用CMSS线性映射到掩码比例?

GMM带来的优势:

  1. 非线性映射:CMSS与最优掩码比例关系可能非线性,GMM通过混合分量捕获复杂映射
  2. 鲁棒性:GMM对异常值不敏感,避免极端CMSS导致不合理掩码
  3. 可解释性:每个高斯分量可对应一类场景(如”RGB主导”、“平衡”、“热红外主导”)

消融实验证实,GMM相比简单线性映射提升约1.8%,验证了其必要性。

6.3 与特定任务方法的对比

M-SpecGene在多数任务上超过特定任务SOTA,但在某些任务上仍有差距(如显著性检测在某些指标上与最优方法持平)。原因分析:

优势来源

仍存在差距的原因

未来可探索多任务联合预训练或更任务相关的预训练目标。

6.4 计算效率分析

预训练开销:

下游微调开销:

与特定任务轻量级方法相比,M-SpecGene计算量较大,但通过一次预训练支持多任务,总体效率更高。

6.5 模态偏置的量化分析

为验证M-SpecGene确实缓解了模态偏置,设计以下实验:

方法:在测试时分别屏蔽一个模态,观察性能下降程度。若模型对某模态过度依赖,屏蔽该模态后性能将大幅下降。

方法完整双模态仅RGB仅热红外RGB下降热红外下降
从头训练72.4%68.1%51.2%-4.3%-21.2%
ImageNet预训练76.9%73.5%54.7%-3.4%-22.2%
RGBT联合MAE79.8%75.2%59.6%-4.6%-20.2%
M-SpecGene83.7%77.3%71.9%-6.4%-11.8%

观察:

结论:M-SpecGene成功实现了模态平衡,避免了对RGB的过度依赖。


7. 局限性与未来工作

7.1 当前局限性

  1. 预训练数据规模

    相比单模态视觉(ImageNet 1.2M),RGBT数据仍较稀缺(~150K)。虽然GMM-CMSS提高了数据效率,但更大规模数据仍可能带来进一步提升。

  2. 计算成本

    ViT架构的自注意力机制计算复杂度为 O(N2)O(N^2),在高分辨率图像上开销较大。未来可探索线性复杂度的Transformer变体(如Linformer、Performer)。

  3. CMSS度量的简化假设

    当前CMSS基于像素标准差,未考虑语义信息。在某些极端场景(如单色背景 + 低温目标),CMSS可能失效。

  4. 预训练-微调gap

    某些任务(如目标跟踪)需要时序建模,而预训练仅在静态图像上进行,导致迁移效果受限。

7.2 未来研究方向

7.2.1 扩展到更多模态

RGBT仅是多光谱视觉的一个子集,未来可扩展到:

GMM-CMSS框架可推广到多模态场景,为每对模态计算信息密度差异。

7.2.2 视频预训练

引入时序维度:

7.2.3 可学习的信息密度估计

用神经网络替代手工设计的CMSS:

7.2.4 轻量化与移动端部署

针对资源受限场景:

7.2.5 开放世界泛化

当前模型在预定义类别上表现优异,但对开放世界(novel categories)的泛化能力有限。未来可探索:


8. 结论

本文提出M-SpecGene,首次尝试构建面向RGBT多光谱视觉的通用基础模型。针对RGBT数据的信息不平衡问题,创新性地提出跨模态结构稀疏性(CMSS)度量,并基于此设计GMM-CMSS渐进式掩码策略,实现灵活、平衡、以目标为中心的自监督预训练。

大规模实验证明,M-SpecGene在11个数据集4类下游任务(目标检测、语义分割、显著性检测、目标跟踪)上均取得优异性能,超过任务特定设计的SOTA方法。更重要的是,M-SpecGene将此前分散的逐任务研究统一到一个预训练-微调范式下,为多光谱视觉研究提供了新的方向。

从方法论角度,M-SpecGene展示了如何针对物理多模态数据的特性(信息不平衡)设计自监督学习策略,这一思路可推广到其他多模态场景。从实践角度,M-SpecGene降低了RGBT应用的开发门槛——无需从头设计复杂融合架构,仅需在预训练模型上微调即可获得强大性能。

随着RGBT数据的持续积累和计算资源的提升,基础模型范式有望成为多光谱视觉的主流方案。未来工作将聚焦于扩展模态类型、引入时序建模、提升开放世界泛化能力,推动多光谱视觉向更通用、更鲁棒的方向发展。


分享文章:

  1. 【论文阅读 | Inf. Fusion 2025 | MS2Fusion:多重光谱状态空间特征融合】论文阅读 · MS2Fusion:多重光谱状态空间特征融合
  2. 【论文阅读 | TPAMI 2025 | RWKVFusion:利用统一语言与掩码引导的高效图像融合网络】论文阅读 · An Efficient Image Fusion Network Exploiting Unifying Language and Mask Guidance
  3. 【论文阅读 | TCSVT 2025 | T²EA:目标感知泰勒展开近似网络】论文阅读 · T²EA:Target-Aware Taylor Expansion Approximation Network for Infrared & Visible Fusion
上一篇
2025.12.16 C语言程序设计上机实习七
下一篇
2025.12.09 C语言程序设计上机实习六