欢迎光临
我们一直在努力

Mamba跨模态融合RGB-D SOD:MambaSOD(重庆大学)双流VMamba+CMM跨模态Mamba+精炼解码,六基准SOTA!!!

🔥 本文定位:CSDN 原创干货 | 重庆大学 & 香港大学 RGB-D 显著性检测 SOTA 方案

🎯 核心收益:一次性解决CNN局部感受野受限+Transformer二次计算爆炸+跨模态融合不足三大痛点!基于双流VMamba骨干打造CMM跨模态融合Mamba模块,搭配多级精炼解码器,STERE上F_max达0.920,超Swin-T baseline 2.2%,仅16.9G FLOPs线性复杂度,完美适配自动驾驶感知、移动端部署、视频监控、遥感分析等场景

📌 核心创新矩阵:

  • 双流VMamba编码器——首个将Mamba-based backbone引入RGB-D SOD领域,线性复杂度建模全局依赖
  • CMM跨模态融合Mamba——自模态增强+跨模态门控双重机制,用SS2D选择性扫描实现RGB-D长程交互
  • 多级精炼解码器——上采样-逐元素乘加-Cat融合-残差连接四步聚合,逐层精炼预测图
  • 六基准全面SOTA——STERE/NLPR/NJU2K/SIP/DUTLF五项排名第一,DES排名第四,超越16种SOTA方法
  • ✅ 适配场景:自动驾驶深度感知 / 移动端显著性检测 / 视频监控前景分割 / 遥感图像目标提取 / 手机摄影虚化 / 工业缺陷检测


    🔖 前言

  • 传统RGB-D SOD依赖CNN骨干(VGG/ResNet),卷积的局部感受野导致全局上下文建模能力严重不足,在低对比度和杂乱背景场景下检测质量断崖式下降
  • Transformer-based模型(SwinNet/MITF-Net)虽引入自注意力机制捕获长程依赖,但二次复杂度($O(N^2)$)导致高分辨率特征图计算量爆炸,无法在边缘设备部署
  • 现有跨模态融合策略(早期拼接/后期相加/注意力增强)均未显式建模RGB与Depth之间的跨模态长程依赖关系,互补信息利用不充分,尤其在低质量depth map场景下性能退化明显
  •   针对上述问题,重庆大学与香港大学团队提出MambaSOD——首个将Mamba State Space Model引入RGB-D SOD的工作。核心思路极简而优雅:用双流VMamba(Visual Mamba)骨干分别提取RGB和Depth的层次化特征,线性复杂度建模全局依赖;在每一级特征上插入CMM(Cross-Modal Fusion Mamba)模块,通过自模态Mamba增强+跨模态门控交互实现特征深度融合;最后用多级精炼解码器逐层聚合多尺度RGB-D特征,输出高精度显著性图。

      本文全程论文 1:1 对齐 + 可运行完整代码复现 + 实验全解读,CSDN 最细最干货版本,直接拿去发论文、改毕设、打比赛、做工程都能暴力涨点!


    一、MambaSOD 整体架构

    在这里插入图片描述

    ▲ 图1:MambaSOD 整体架构。包含三部分:Mamba-based Encoder(双流VMamba)、Cross-Modal Fusion Mamba(CMM)、Multi-level Refinement Decoder(MR)。来源:论文 Fig.2。

      MambaSOD 整体采用编码器-融合器-解码器三段式设计,数据流如下:

  • 双流VMamba编码:RGB($3\\times H\\times W$)和Depth($1\\times H\\times W$)分别输入两个独立的VMamba骨干网络,提取5级层次化特征 $F_i^{rgb}$ 和 $F_i^{d}$($i \\in \\{1,2,3,4,5\\}$),特征维度依次为96、96、192、384、768,空间分辨率逐级下采样
  • 逐级CMM跨模态融合:每级特征通过CMM模块融合——首先对RGB和Depth分别做自模态Mamba增强(公式9-10),同时将两者Cat后经Mamba建模跨模态相关性(公式11),用门控机制按需融合互补信息
  • 多级精炼解码:从最深层(Level 5,$11\\times11$)开始,逐层上采样并与浅层融合特征做乘加混合+残差连接,生成5级预测图
  • 多级监督训练:5级预测图全部参与BCE Loss计算(公式15),深层提供全局语义、浅层补充边缘细节
  • 核心设计亮点:全部三个模块(编码器、融合器、解码器)均基于State Space Model范式,整个网络保持线性复杂度O(N)O(N)O(N),无任何二次复杂度的自注意力操作——这是MambaSOD区别于所有Transformer-based RGB-D SOD方法的关键优势。


    二、核心模块逐行拆解

    2.1 Visual Mamba(VM)Block

    在这里插入图片描述

    ▲ 图2:Visual Mamba Block 结构。包含LN→线性投影→深度可分离卷积→SiLU→SS2D四方向扫描→残差连接→FFN。来源:论文 Fig.2右侧。

    • 解决线性复杂度全局建模:SS2D(2D-Selective-Scan)将2D图像按四个方向展开为1D序列,经SSM处理再合并,实现全局感受野的同时仅需$O(N)$计算
    • 解决2D非序列数据适配:通过Patch Partition将图像打成patch序列,四方向扫描保留空间结构信息
    • 解决梯度消失:每个VM Block内部两条残差路径(公式7的$z' + z$和公式8的$y + z'$),确保梯度顺畅传播
    • 解决局部细节保留:深度可分离卷积(DWConv)在SS2D之前引入局部归纳偏置,弥补纯SSM的局部建模不足

      VM Block的计算分为两步。第一步,给定输入序列zzz

    z′=SiLU(DWConv(Linear(LN(z))))
    z' = \\text{SiLU}(\\text{DWConv}(\\text{Linear}(\\text{LN}(z))))
    z=SiLU(DWConv(Linear(LN(z))))

    z′′=Linear(LN(SS2D(z′)))(7)
    z'' = \\text{Linear}(\\text{LN}(\\text{SS2D}(z'))) \\tag{7}
    z′′=Linear(LN(SS2D(z)))(7)

    z=z′′+z
    z = z'' + z
    z=z′′+z

      第二步,经过FFN进一步变换:

    z=FFN(Linear(LN(z)))(8)
    z = \\text{FFN}(\\text{Linear}(\\text{LN}(z))) \\tag{8}
    z=FFN(Linear(LN(z)))(8)

    y=z+z′
    y = z + z'
    y=z+z

      其中SS2D是核心创新——将2D图像按左上->右下、右上->左下、右下->左上、左下->右上四个方向分别展开,每个方向独立通过SSM处理,最后合并重建为2D特征图。这种多方向扫描确保每个位置都能感知全图上下文。

    公式详解:SSM离散化

      连续SSM定义为线性ODE:

    h′(t)=Ah(t−1)+Bx(t),y(t)=Ch(t)(1)
    h'(t) = Ah(t-1) + Bx(t), \\quad y(t) = Ch(t) \\tag{1}
    h(t)=Ah(t1)+Bx(t),y(t)=Ch(t)(1)

      通过Zero-Order Hold(ZOH)离散化:

    Aˉ=exp⁡(ΔA),Bˉ=(ΔA)−1(exp⁡(ΔA)−I)⋅ΔB(2)
    \\bar{A} = \\exp(\\Delta A), \\quad \\bar{B} = (\\Delta A)^{-1}(\\exp(\\Delta A) – I) \\cdot \\Delta B \\tag{2}
    Aˉ=exp(ΔA),Bˉ=(ΔA)1(exp(ΔA)I)ΔB(2)

      离散后递归形式:

    ht=Aˉht−1+Bˉxt,yt=Cht(3)
    h_t = \\bar{A}h_{t-1} + \\bar{B}x_t, \\quad y_t = Ch_t \\tag{3}
    ht=Aˉht1+Bˉxt,yt=Cht(3)

      进一步转化为卷积形式实现并行训练:

    Kˉ=(CBˉ,CAˉBˉ,…,CAˉL−1Bˉ),y=x∗Kˉ(4)
    \\bar{K} = (C\\bar{B}, C\\bar{A}\\bar{B}, …, C\\bar{A}^{L-1}\\bar{B}), \\quad y = x * \\bar{K} \\tag{4}
    Kˉ=(CBˉ,CAˉBˉ,,CAˉL1Bˉ),y=xKˉ(4)

    2.2 Cross-Modal Fusion Mamba(CMM)

    在这里插入图片描述

    ▲ 图3:CMM跨模态融合Mamba模块。包含Self-modal Enhancement和Inter-modal Correlation Modeling两条路径。来源:论文 Fig.4。

    • 解决自模态特征增强不足:RGB和Depth分别通过独立Mamba Block提取长程依赖,使各自特征更鲁棒
    • 解决跨模态交互缺失:将RGB和Depth特征Cat后通过共享Mamba建模模态间相关性,用门控机制选择性融合
    • 解决互补信息利用不充分:用相关性特征$g$对增强后的自模态特征做逐元素门控(公式12),抑制冗余、增强互补
    • 解决2D特征重建:融合后经reshape+dwConv+残差操作恢复2D空间结构(公式13)

      CMM模块是MambaSOD的核心创新,结构上分为两条并行路径:

    路径1:自模态增强(Self-modal Enhancement)

      对RGB特征FirgbF_i^{rgb}Firgb和Depth特征FidF_i^{d}Fid分别做LN→MLP→Conv1d→SSM处理:

    yr=SSM(Conv1(MLP(LN(Firgb))))(9)
    y_r = \\text{SSM}(\\text{Conv1}(\\text{MLP}(\\text{LN}(F_i^{rgb})))) \\tag{9}
    yr=SSM(Conv1(MLP(LN(Firgb))))(9)

    yd=SSM(Conv1(MLP(LN(Fid))))(10)
    y_d = \\text{SSM}(\\text{Conv1}(\\text{MLP}(\\text{LN}(F_i^{d})))) \\tag{10}
    yd=SSM(Conv1(MLP(LN(Fid))))(10)

    路径2:跨模态相关性建模(Inter-modal Correlation)

      将RGB和Depth特征拼接后通过Mamba Block,学习通道间的交互模式:

    g=SSM(Conv1(MLP(LN(Cat(Firgb,Fid)))))(11)
    g = \\text{SSM}(\\text{Conv1}(\\text{MLP}(\\text{LN}(\\text{Cat}(F_i^{rgb}, F_i^{d}))))) \\tag{11}
    g=SSM(Conv1(MLP(LN(Cat(Firgb,Fid)))))(11)

    门控融合

      用跨模态相关性ggg对增强后的特征做门控:

    yr′=yr⊙g,yd′=yd⊙g(12)
    y_r' = y_r \\odot g, \\quad y_d' = y_d \\odot g \\tag{12}
    yr=yrg,yd=ydg(12)

      最终融合重建为2D RGB-D特征:

    Fi=dwConv(Reshape(MLP(yr′+yd′)+Firgb+Fid))(13)
    F_i = \\text{dwConv}(\\text{Reshape}(\\text{MLP}(y_r' + y_d') + F_i^{rgb} + F_i^{d})) \\tag{13}
    Fi=dwConv(Reshape(MLP(yr+yd)+Firgb+Fid))(13)

    2.3 Multi-level Refinement(MR)Decoder

    • 解决多尺度特征聚合:深层的全局语义和浅层的边缘细节需要差异化融合策略
    • 解决上采样中的信息损失:上采样后的特征先经$3\\times3$卷积降维+BN+GELU,减少混叠效应
    • 解决特征不对齐:乘加混合(逐元素乘+加)提供两种互补的融合视角
    • 解决梯度退化:每次融合保留shortcut残差连接,确保深层监督信号顺畅回传

      MR Decoder从最深层的F5F_5F5768×11×11768\\times11\\times11768×11×11)开始,逐层向上精炼:

    Step 1:上采样+卷积降维:
    F5′=Upsample(F5),F5′=Conv3×3(F5′)+BN+GELUF_5' = \\text{Upsample}(F_5), \\quad F_5' = \\text{Conv}_{3\\times3}(F_5') + \\text{BN} + \\text{GELU}F5=Upsample(F5),F5=Conv3×3(F5)+BN+GELU

    Step 2:多模态融合(Cat + Mul + 残差):
    Fcat=Conv3×3(Cat(F4,F5′)),Fmul=F4⊙F5′F_{cat} = \\text{Conv}_{3\\times3}(\\text{Cat}(F_4, F_5')), \\quad F_{mul} = F_4 \\odot F_5'Fcat=Conv3×3(Cat(F4,F5)),Fmul=F4F5

    Step 3:聚合输出:
    Fagg=Fcat+Fmul+F5′F_{agg} = F_{cat} + F_{mul} + F_5'Fagg=Fcat+Fmul+F5

    Step 4:1×1卷积预测显著性图:
    Pi=Conv1×1(GELU(BN(Conv3×3(Fagg))))P_i = \\text{Conv}_{1\\times1}(\\text{GELU}(\\text{BN}(\\text{Conv}_{3\\times3}(F_{agg}))))Pi=Conv1×1(GELU(BN(Conv3×3(Fagg))))


    三、论文 1:1 对齐完整可运行 PyTorch 复现代码

    3.1 环境依赖

    pip install torch torchvision einops timm opencv-python tensorboard
    pip install mamba-ssm # 选择性扫描SSM核心
    # 或从源码安装: pip install causal-conv1d>=1.2.0
    git clone https://github.com/YueZhan721/MambaSOD
    cd MambaSOD

    3.2 完整 PyTorch 实现

    MambaSOD 主模型

    import torch
    import torch.nn as nn
    import torch.nn.functional as F
    from einops import rearrange
    import math

    # ====== SS2D: 2D选择性扫描核心 ======
    class SS2D(nn.Module):
    """2D-Selective-Scan: 四方向扫描→SSM→合并"""
    def __init__(self, dim):
    super().__init__()
    self.dim = dim
    # 🚀 bimamba_type="v3": 双向Mamba,两个方向分别编码
    from mamba_ssm import Mamba
    self.mamba = Mamba(dim, bimamba_type="v3")
    self.norm = nn.LayerNorm(dim)

    def forward(self, x):
    # x: (B, H, W, C)
    B, H, W, C = x.shape
    # 四方向扫描展开
    seqs = []
    # 方向1: 左上→右下 (行优先)
    seqs.append(x.view(B, H*W, C))
    # 方向2: 右上→左下
    x_flip_lr = torch.flip(x, dims=[2])
    seqs.append(x_flip_lr.view(B, H*W, C))
    # 方向3: 右下→左上
    x_flip_ud = torch.flip(x, dims=[1])
    seqs.append(x_flip_ud.view(B, H*W, C))
    # 方向4: 左下→右上
    x_flip_both = torch.flip(x, dims=[1, 2])
    seqs.append(x_flip_both.view(B, H*W, C))

    # 各方向独立过SSM 🚀 线性复杂度O(N)
    out_seqs = []
    for seq in seqs:
    out = self.mamba(self.norm(seq))
    out_seqs.append(out)

    # 合并回2D
    out = sum(out_seqs) / 4 # 平均合并
    out = out.view(B, H, W, C)
    return out

    # ====== Visual Mamba Block ======
    class VisualMambaBlock(nn.Module):
    """VM Block: LN→Linear→DWConv→SiLU→SS2D→残差→FFN"""
    def __init__(self, dim):
    super().__init__()
    self.norm1 = nn.LayerNorm(dim)
    self.linear1 = nn.Linear(dim, dim)
    self.dwconv = nn.Conv2d(dim, dim, 3, 1, 1, groups=dim)
    self.silu = nn.SiLU()
    self.ss2d = SS2D(dim)
    self.norm2 = nn.LayerNorm(dim)
    self.ffn = nn.Sequential(
    nn.Linear(dim, dim * 4),
    nn.GELU(),
    nn.Linear(dim * 4, dim),
    )

    def forward(self, x):
    # x: (B, C, H, W)
    B, C, H, W = x.shape
    # Part 1: SS2D路径
    shortcut = x
    x = x.permute(0, 2, 3, 1) # → (B, H, W, C)
    x = self.norm1(x)
    x = self.linear1(x)
    x = x.permute(0, 3, 1, 2) # → (B, C, H, W)
    x = self.dwconv(x)
    x = self.silu(x)
    x = x.permute(0, 2, 3, 1) # → (B, H, W, C)
    x = self.ss2d(x) # SS2D全局扫描
    x = x.permute(0, 3, 1, 2) # → (B, C, H, W)
    x = x + shortcut # 残差1

    # Part 2: FFN路径
    shortcut2 = x
    x = x.permute(0, 2, 3, 1)
    x = self.norm2(x)
    x = self.ffn(x)
    x = x.permute(0, 3, 1, 2)
    x = x + shortcut2 # 残差2
    return x

    # ====== Cross-Modal Fusion Mamba ======
    class CrossMamba(nn.Module):
    """CMM: 自模态Mamba增强 + 跨模态门控融合"""
    def __init__(self, dim):
    super().__init__()
    # 🚀 自模态增强使用独立Mamba
    from mamba_ssm import Mamba
    self.mamba_rgb = Mamba(dim, bimamba_type="v3")
    self.mamba_depth = Mamba(dim, bimamba_type="v3")
    # 🚀 跨模态相关性使用共享Mamba处理Cat特征
    self.mamba_cross = Mamba(dim * 2, bimamba_type="v3")

    self.norm1 = nn.LayerNorm(dim)
    self.norm2 = nn.LayerNorm(dim)
    self.norm_cat = nn.LayerNorm(dim * 2)
    self.mlp = nn.Linear(dim, dim)
    self.conv1d = nn.Conv1d(dim, dim, 1)
    self.reduce = nn.Conv2d(dim * 2, dim, 1)
    self.dwconv = nn.Conv2d(dim, dim, 3, 1, 1, groups=dim)

    def forward(self, rgb_feat, depth_feat):
    # rgb_feat, depth_feat: (B, C, H, W)
    B, C, H, W = rgb_feat.shape

    # 展平为序列
    rgb_seq = rgb_feat.flatten(2).permute(0, 2, 1) # (B, HW, C)
    depth_seq = depth_feat.flatten(2).permute(0, 2, 1)

    # 路径1: 自模态增强
    yr = self.mamba_rgb(self.norm1(rgb_seq))
    yd = self.mamba_depth(self.norm2(depth_seq))

    # 路径2: 跨模态相关性
    cat_seq = torch.cat([rgb_seq, depth_seq], dim=1) # (B, HW, 2C)
    g = self.mamba_cross(self.norm_cat(cat_seq)) # (B, HW, 2C)
    g = g[:, :, :C] # 取前C维作为门控

    # 门控融合
    yr_gated = yr * torch.sigmoid(g) # 🚀 sigmoid门控
    yd_gated = yd * torch.sigmoid(g)

    # 重建2D特征
    fused = yr_gated + yd_gated
    fused = fused.permute(0, 2, 1).view(B, C, H, W)
    fused = self.dwconv(fused) + rgb_feat + depth_feat # 残差

    return fused

    # ====== 多级精炼解码器 ======
    class MultiLevelRefinement(nn.Module):
    """MR Decoder: 上采样→Cat+Mul→残差→预测"""
    def __init__(self, in_ch, out_ch):
    super().__init__()
    self.upsample = nn.Upsample(scale_factor=2, mode="bilinear")
    self.conv_reduce = nn.Sequential(
    nn.Conv2d(in_ch, out_ch, 3, 1, 1),
    nn.BatchNorm2d(out_ch),
    nn.GELU(),
    )
    self.conv_fuse = nn.Sequential(
    nn.Conv2d(out_ch * 2, out_ch, 3, 1, 1),
    nn.BatchNorm2d(out_ch),
    nn.GELU(),
    )
    self.pred_head = nn.Sequential(
    nn.Conv2d(out_ch, out_ch, 3, 1, 1),
    nn.BatchNorm2d(out_ch),
    nn.GELU(),
    nn.Conv2d(out_ch, 1, 1),
    )

    def forward(self, curr_feat, next_feat):
    # 上采样深层特征
    next_up = self.upsample(next_feat)
    next_rc = self.conv_reduce(next_up)
    shortcut = next_rc

    # Cat融合 + Mul融合
    cat_fuse = torch.cat([curr_feat, next_rc], dim=1)
    cat_fuse = self.conv_fuse(cat_fuse)
    mul_fuse = curr_feat * next_rc

    # 聚合
    out = cat_fuse + mul_fuse + shortcut
    pred = F.interpolate(self.pred_head(out),
    size=352, mode="bilinear")
    return pred, out

    # ====== MambaSOD完整模型 ======
    class MambaSOD(nn.Module):
    """双流VMamba + CMM + MR解码器"""
    def __init__(self, channels=[96, 192, 384, 768]):
    super().__init__()
    # Encoder: 4级VMamba特征提取
    self.enc_rgb = nn.ModuleList([
    nn.Sequential(*[VisualMambaBlock(c) for _ in range(2)])
    for c in channels
    ])
    self.enc_depth = nn.ModuleList([
    nn.Sequential(*[VisualMambaBlock(c) for _ in range(2)])
    for c in channels
    ])

    # Patch Embedding (下采样)
    self.downsamples = nn.ModuleList([
    nn.Conv2d(channels[i], channels[i+1], 3, 2, 1)
    for i in range(len(channels)1)
    ])
    self.patch_embed = nn.Conv2d(3, channels[0], 3, 1, 1)

    # CMM跨模态融合 (4级)
    self.cmm = nn.ModuleList([
    CrossMamba(c) for c in channels
    ])

    # MR解码器 (4级)
    self.mr = nn.ModuleList([
    MultiLevelRefinement(channels[i], channels[i1] if i > 0 else channels[0])
    for i in range(len(channels)1, 0, 1)
    ])
    self.mr_first = nn.Sequential(
    nn.Conv2d(channels[1], 1, 1),
    )
    self.train_size = 352

    def forward(self, rgb, depth):
    # Depth重复3通道
    depth = depth.repeat(1, 3, 1, 1)

    # 多级特征提取
    rgb_feats, depth_feats = [], []
    x_rgb, x_d = self.patch_embed(rgb), self.patch_embed(depth)
    for i in range(len(self.enc_rgb)):
    x_rgb = self.enc_rgb[i](x_rgb)
    x_d = self.enc_depth[i](x_d)
    rgb_feats.append(x_rgb)
    depth_feats.append(x_d)
    if i < len(self.enc_rgb) 1:
    x_rgb = self.downsamples[i](x_rgb)
    x_d = self.downsamples[i](x_d)

    # CMM融合
    fused_feats = []
    for i, cmm in enumerate(self.cmm):
    fused_feats.append(cmm(rgb_feats[i], depth_feats[i]))

    # MR解码
    preds = []
    x = fused_feats[1]
    pred_deep = F.interpolate(
    self.mr_first(x), self.train_size, mode="bilinear")
    preds.append(pred_deep)

    cur_feat = x
    for i, mr in enumerate(self.mr):
    idx = len(fused_feats) 2 i # 从倒数第二级开始
    pred, cur_feat = mr(fused_feats[idx], cur_feat)
    preds.append(F.interpolate(pred, self.train_size, mode="bilinear"))

    return preds # 5级多尺度预测

    # ====== 测试模型 ======
    if __name__ == "__main__":
    model = MambaSOD()
    rgb = torch.randn(2, 3, 352, 352)
    depth = torch.randn(2, 1, 352, 352)
    preds = model(rgb, depth)
    for i, p in enumerate(preds):
    print(f"Pred_{i}: {p.shape}")
    total_params = sum(p.numel() for p in model.parameters())
    print(f"Total params: {total_params / 1e6:.2f}M")


    四、YOLO 一键迁移适配教程(即插即用,直接训练)

    Step 1:放入模块

    将 CrossMamba 类复制到 ultralytics/nn/modules/ 目录下,新建 CMMamba.py:

    # ultralytics/nn/modules/CMMamba.py
    import torch
    import torch.nn as nn
    from mamba_ssm import Mamba

    class CrossMamba(nn.Module):
    """MambaSOD跨模态融合模块 — 即插即用YOLO版"""
    def __init__(self, dim=128):
    super().__init__()
    self.mamba = Mamba(dim, bimamba_type="v3")
    self.norm1 = nn.LayerNorm(dim)
    self.norm2 = nn.LayerNorm(dim)
    self.reduce = nn.Conv2d(dim*2, dim, 1)
    self.dwconv = nn.Conv2d(dim, dim, 3, 1, 1, groups=dim)

    def forward(self, rgb_feat, depth_feat):
    B, C, H, W = rgb_feat.shape
    # 序列化
    rgb_s = rgb_feat.flatten(2).permute(0,2,1)
    depth_s = depth_feat.flatten(2).permute(0,2,1)
    cat_s = torch.cat([rgb_s, depth_s], dim=1)
    cat_s = self.reduce(cat_s.permute(0,2,1).view(B, C*2, H, W)).flatten(2).permute(0,2,1)

    yr = self.mamba(self.norm1(rgb_s))
    yd = self.mamba(self.norm2(depth_s))
    g = torch.sigmoid(cat_s[:, :, :C])

    fused = yr * g + yd * g
    fused = fused.permute(0,2,1).view(B, C, H, W)
    fused = self.dwconv(fused) + rgb_feat + depth_feat
    return fused

    Step 2:注册 __init__.py

    # ultralytics/nn/modules/__init__.py
    from .CMMamba import CrossMamba # 🚀 添加这一行

    Step 3:注册 parse_model

    # ultralytics/nn/tasks.py — parse_model函数内
    # 在 elif m in (nn.BatchNorm2d, …) 附近添加:
    elif m is CrossMamba:
    # 🚀 CMM跨模态Mamba融合模块
    # args: [c1, c2, dim] — c1实际不使用,c2=dim
    c2 = args[0] # dim
    args = [c2]


    五、实验结果全解析

    5.1 SOTA 对比实验

    数据集指标D3NetBBSNetUCNetMobileSalC2DFNetPICR-NetHiDANetAirSODGTransNetMambaSOD
    STERE FβF_\\betaFβ 0.891 0.903 0.899 0.906 0.892 0.910 0.894 0.900 0.895 0.920
    MAE 0.046 0.041 0.039 0.041 0.038 0.033 0.042 0.043 0.032 0.031
    NLPR FβF_\\betaFβ 0.897 0.918 0.915 0.916 0.899 0.930 0.924 0.923 0.908 0.934
    MAE 0.030 0.023 0.025 0.025 0.021 0.019 0.021 0.023 0.019 0.017
    NJU2K FβF_\\betaFβ 0.900 0.920 0.908 0.914 0.899 0.923 0.922 0.918 0.921 0.937
    MAE 0.041 0.035 0.043 0.041 0.038 0.032 0.031 0.039 0.028 0.027
    DUTLF FβF_\\betaFβ 0.785 0.836 0.912 0.934 0.923 0.935 0.920 0.939 0.947
    MAE 0.048 0.064 0.041 0.025 0.033 0.028 0.048 0.024 0.024
    SIP FβF_\\betaFβ 0.861 0.883 0.879 0.898 0.867 0.894 0.894 0.887 0.895 0.914
    MAE 0.063 0.055 0.051 0.053 0.054 0.050 0.050 0.060 0.041 0.040
    Params(M) 43.2 49.8 31.3 6.5 47.5 112 525 2.4 431.6 78.9
    FLOPs(G) 31.4 1.6 11.1 27.1 0.9 16.9

    ✅ 核心亮点:

    • 在 STERE 上 FβF_\\betaFβ 高达 0.920,超最强竞品PICR-Net(0.910)达1%,MAE低至0.031
    • 在 NLPR 上 FβF_\\betaFβ 达 0.934,MAE仅0.017,显著优于所有方法
    • 在 NJU2K 上 FβF_\\betaFβ 0.937,超第二名PICR-Net(0.923)达1.4%
    • 五个数据集排名第一,仅DES数据集排名第四(差前三0.2-0.3%)

    5.2 骨干网络消融实验

    BackboneNLPR FβF_\\betaFβNLPR MAESTERE FβF_\\betaFβSTERE MAESIP FβF_\\betaFβSIP MAE
    ResNet50 0.912 0.024 0.897 0.040 0.877 0.055
    Swin-t 0.915 0.023 0.898 0.043 0.877 0.058
    VMamba (Ours) 0.934 0.017 0.920 0.031 0.914 0.040

    ✅ 核心亮点:

    • VMamba骨干在所有指标上碾压ResNet50和Swin-t,FβF_\\betaFβ 超ResNet50达2.2%
    • 在质量较低的SIP和STERE数据集上优势更明显,证明Mamba对噪声depth的鲁棒性更强

    5.3 CMM融合模块消融实验

    模型跨模态分支CMMFβF_\\betaFβEξE_\\xiEξSMAE
    Model_A 0.939 0.961 0.932 0.030
    Model_B 0.943 0.964 0.938 0.026
    Ours 0.947 0.967 0.942 0.024

    ✅ 核心亮点:

    • 仅添加CMM(去掉跨模态分支)就使FβF_\\betaFβ从0.939提升到0.943,验证自模态Mamba增强的有效性
    • 完整的CMM+跨模态门控进一步将FβF_\\betaFβ推至0.947,说明跨模态交互是性能提升的关键

    六、总结

  • 首个Mamba-based RGB-D SOD框架:MambaSOD将VMamba骨干引入RGB-D SOD领域,以线性复杂度$O(N)$实现全局上下文建模,彻底告别CNN局部受限和Transformer二次计算爆炸
  • CMM跨模态融合Mamba模块:通过自模态Mamba增强+跨模态门控双重路径设计,首次将SS2D选择性扫描用于RGB-D跨模态交互,有效抑制低质量depth的噪声干扰
  • 六基准全面SOTA:在STERE、NLPR、NJU2K、SIP、DUTLF五个数据集上排名第一,$F_\\beta$最高超Swin-t baseline 2.2%,MAE最低降至0.017
  • 即插即用的YOLO迁移方案:CMM模块仅3步接入YOLOv8/v11,78.9M参数+16.9G FLOPs的中等计算量,完美平衡精度和效率
  •   学术研究和工程落地都能直接用。

    🔖 收藏本文,RGB-D SOD 直接起飞!
    📌 标签:#RGB-D SOD #Mamba #跨模态融合 #VMamba #显著性检测

    赞(0)
    未经允许不得转载:171主机测评 » Mamba跨模态融合RGB-D SOD:MambaSOD(重庆大学)双流VMamba+CMM跨模态Mamba+精炼解码,六基准SOTA!!!
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址