Bi-CMPStereo:基于双向规范空间学习的事件-帧非对称立体匹配方法

立体匹配事件相机跨模态融合
于 2026-05-30 03:03:21 修改
·本内容遵循CC 4.0 BY-SA版权协议

1. 项目概述与核心挑战

立体匹配,简单来说就是让计算机像人眼一样,通过比较左右两张图像的差异来感知深度。这项技术是机器人导航、自动驾驶汽车避障、以及增强现实(AR)设备理解周围环境的核心。过去十年,基于深度学习的立体匹配方法在标准RGB相机上取得了巨大成功。但当我们把场景切换到高速运动、光线剧烈变化(比如从隧道驶出)或者极端低光照的环境时,传统相机的短板就暴露无遗:运动模糊会让图像变“糊”,动态范围不足会导致亮处过曝、暗处死黑,丢失大量细节。

这时,事件相机登场了。它不像传统相机那样按固定时间间隔“拍照”,而是像个极度敏感的“变化探测器”,每个像素独立工作,只在亮度发生足够大变化时才输出一个“事件”信号。这带来了两个革命性优势:微秒级的时间分辨率(几乎没有运动模糊)和超过120dB的高动态范围(能同时看清阳光直射和阴影细节)。想象一下,用事件相机去看一个快速挥动的手或一辆疾驰而过的车,你能得到清晰、无拖影的运动轨迹,这是帧相机难以做到的。

于是,一个很自然的想法诞生了:能不能把事件相机和传统RGB相机组合起来,构建一个“非对称立体系统”?比如,左眼用RGB相机获取丰富的颜色和纹理信息,右眼用事件相机捕捉高速动态细节。这样不就兼得两者之长了吗?理论上确实美好,但实操起来却是个大坑。这个坑就是“模态鸿沟”。事件数据本质上是稀疏的、异步的亮度变化点云,而图像是稠密的、静态的彩色像素矩阵。两者在数据形态、信息密度和语义表达上截然不同。直接拿现有的、为同质图像设计的立体匹配网络(比如RAFT-Stereo)来处理这种“鸡同鸭讲”的输入,效果往往很差。因为网络在学习对齐特征时,很容易为了追求“相似”而强行抹平那些只在单一模态中显著、但对匹配至关重要的独特特征,比如图像中鲜明的颜色边界,或者事件流中精确到像素的瞬时运动边缘。

因此,事件-帧非对称立体匹配的核心挑战,不是简单地做特征融合,而是如何在尊重并保留各自模态独特信息的前提下,让它们在一个共同的“语言体系”下进行有效对话,从而计算出精确的视差。我们团队提出的Bi-CMPStereo,就是为了解决这个难题而生。

2. Bi-CMPStereo 核心设计思路拆解

面对模态鸿沟,主流思路大致分两种:一是“硬对齐”,强行把事件和帧转换成一种中间表示(比如将事件累积成图像),然后用一个共享的特征提取网络处理,这容易丢失模态特异性信息;二是“软对齐”,用两个独立的网络分别提取特征,再在特征空间进行融合,但这往往对齐不够精细,匹配精度上不去。

我们的设计哲学有所不同。我们认为,与其让两个模态勉强“求同”,不如让它们各自发挥所长,并在一个精心设计的“规范空间”里进行高保真对齐。Bi-CMPStereo 的核心是一个双向框架,它包含两个并行的、目标域不同的子网络:evCMPStereo 和 imgCMPStereo

2.1 双向架构与目标规范空间

这个设计的巧妙之处在于“双向”和“目标规范空间”的概念。

  • evCMPStereo:它以事件为目标域,图像为源域。它的任务是“用图像的视角来理解事件,并在事件的空间里做立体匹配”。这意味着,网络学习的是如何从图像中提取对事件匹配有帮助的信息,并映射到事件的特征空间。
  • imgCMPStereo:反之,它以图像为目标域,事件为源域。它的任务是“用事件的视角来增强图像,并在图像的空间里做立体匹配”。

为什么要这么做?因为事件和图像的信息具有天然的互补性。图像有丰富的语义和纹理,但在高速场景下模糊;事件有精确的时间边缘和运动信息,但缺乏静态场景的上下文。让每个子网络专注于将一个模态的信息,以最高保真度对齐到另一个模态的“主场”空间,就能最大化地保留该目标域的特有优势。最终,我们将两个子网络的结果融合,相当于综合了“事件主场”和“图像主场”两个视角下的最佳匹配线索。

2.2 关键组件:CDEA 与 SCC

为了实现上述高保真对齐,我们为每个CMPStereo子网络设计了两大核心组件:

1. 跨域嵌入适配器(CDEA) 你可以把CDEA理解为一个“翻译官”。它的输入是源域数据(比如对imgCMPStereo来说,就是事件数据),输出是一个已经初步向目标域(图像域)“靠拢”的特征嵌入。我们采用了一个轻量级的U-Net结构作为适配器。它的目标不是进行像素级的图像翻译(那会产生模糊),而是在特征层面进行域适应。

注意:这里我们刻意避免了复杂的对抗性训练。我们只使用了一个简单的域分类器作为监督信号,让适配器学习将源域特征“伪装”成目标域特征。这样训练更稳定,且能确保适配后的特征仍然保留着对立体匹配至关重要的结构信息,而不是变成一张看起来像目标域但内容模糊的“赝品”。

2. 立体规范化约束(SCC) 这是保证对齐质量不丢失细节的关键。特征提取器(FtFs)会将目标域数据和经过CDEA适配的源域数据,映射到一个共享的瓶颈层特征空间。SCC约束要求这个共享特征空间必须具备强大的“重建”能力。

具体来说,我们引入了一个轻量级的共享解码器FR。在训练时,我们要求:

  • 从目标域特征Ft(Xt)能重建出目标域数据Xt本身(自重建)。
  • 从源域特征Fs(As2t(Xs))能重建出经过视差扭曲后的目标域对应物Xs^(t)(跨域重建)。这里的Xs^(t)是利用真实视差d_gt,将目标域数据扭曲后得到的,它代表了“在目标域视角下,源域数据应该长什么样”。

实操心得FR必须设计得足够“弱”(层数少、通道数少)。如果它能力太强,就能自己“脑补”出缺失的细节,从而让前面的编码器偷懒,不再努力在瓶颈特征中保留精细信息。我们通过实验发现,一个只有2-3个卷积层的解码器效果最好,它能迫使编码器学习到信息量更密集、更具判别力的特征。

SCC的三重好处是:1)强制目标域特征保留自身关键细节;2)强制源域特征与目标域进行像素级对齐;3)用一个共享的解码器将两个编码器“拴”在同一个规范空间里,保证了特征的一致性。最重要的是,SCC仅在训练时使用,推理时毫无额外计算开销

2.3 上下文学习与层级视觉变换(HVT)

立体匹配网络通常需要一个“上下文网络”来提取全局场景语义,为后续的迭代优化提供先验。在非对称立体中,如果上下文网络只从图像帧提取特征,网络可能会走捷径——过度依赖图像中现成的、容易匹配的纹理,而逃避去学习艰难的跨模态匹配。这会导致模型在训练集上表现好,但泛化到新场景时性能骤降。

为了解决这个问题,我们引入了层级视觉变换(HVT)。它的思想是:对输入图像施加一系列不同层级的、破坏性的视觉变换(如全局的颜色抖动、局部的块遮挡、像素级的噪声添加),然后要求网络提取的上下文特征对这些变换是“不变”的。

  • 全局变换(TG):改变整个图像的色彩、对比度,模拟光照变化。
  • 局部变换(TL):随机遮挡图像的一些区域,迫使网络不能只依赖局部纹理。
  • 像素变换(TP):添加噪声,增加低级特征的鲁棒性。

我们通过两个损失来约束:

  • L_sim:要求变换后的图像与原始图像在低级视觉特征(用预训练的VGG浅层网络提取)上尽可能不相似。这确保了变换是“有效”的,真的制造了困难。
  • L_dist:要求上下文网络Fc对变换前后图像提取的特征尽可能相似。这迫使网络忽略这些表面的、低级的视觉变化,去学习更本质的、与几何结构相关的上下文。

这样训练出来的上下文特征,对表面的纹理变化“不敏感”,从而逼着主干的立体匹配部分必须去啃跨模态对齐这块“硬骨头”,极大提升了模型的泛化能力。

3. 网络实现与训练流程详解

3.1 事件表示的选择

事件相机输出的是异步的(x, y, t, p)流,需要转换成张量才能输入神经网络。针对两个子网络的不同目标域,我们选择了不同的事件表示方法,这是工程上的一个关键细节。

  • 对于 imgCMPStereo(目标域是图像):我们采用 Voxel Grid 表示。将一段时间内的事件流,在时间维度上离散化成几个(如5个)区间(bin),每个区间形成一个2D的空间网格,正负极性事件分别累加。这样就得到一个[B, H, W]的张量(B是时间区间数)。这种表示结构规整,与图像网格兼容性好,便于在图像域进行对齐和卷积操作。
  • 对于 evCMPStereo(目标域是事件):我们采用 Event Concentration 表示。这种表示旨在保留事件相机响应“边缘”的特性。它先将事件流按时间反向堆叠成多个(如10个)2D映射,然后通过一个注意力网络学习每个映射的权重,最后加权求和得到一个单通道的、类似清晰边缘图的张量。这种表示强化了事件的边缘响应特性,与图像形成鲜明互补,更适合作为事件域匹配的主体。

3.2 级联代价体与迭代优化

特征经过CDEA和编码器提取后,我们构建多尺度(1/16, 1/8, 1/4分辨率)的特征金字塔。立体匹配的核心是构建“代价体”——一个在每一个像素位置、每一个可能的视差假设下,计算左右特征相似度的4D张量。

我们采用分组相关来计算代价体。假设特征通道数是C,我们将其分成G组(例如8组),每组内计算左右特征的内积作为匹配代价。这样做比全通道相关计算量小,且分组操作能学习到不同方面的匹配模式。

TEXT
# 伪代码示意:分组相关代价体计算
# f_left, f_right: [N, C, H, W]
# 分组,G=8
group_size = C // G
cost_volume = []
for g in range(G):
left_group = f_left[:, g*group_size:(g+1)*group_size, :, :]
right_group = f_right[:, g*group_size:(g+1)*group_size, :, :]
# 对右特征在水平方向进行偏移d,计算内积
for d in range(max_disp):
shifted_right = shift(right_group, d) # 水平位移
corr = torch.sum(left_group * shifted_right, dim=1, keepdim=True) # [N, 1, H, W]
cost_volume.append(corr)
cost_volume = torch.cat(cost_volume, dim=1) # [N, G*max_disp, H, W]
# 重塑为 [N, G, max_disp, H, W]

为了融合多尺度信息,我们在每个尺度上还会对代价体进行池化,构建一个多层的代价体金字塔。例如在1/4尺度,我们除了原始分辨率的代价体,还会将其池化到1/8和1/16分辨率,形成一个3层金字塔。

优化部分借鉴了RAFT-Stereo的思想,采用级联的ConvGRU进行迭代优化。流程如下:

  1. 初始化:最粗尺度(1/16)的视差初始化为0,隐藏状态由HVT提取的上下文特征初始化。
  2. 迭代更新:在每个尺度,ConvGRU以当前尺度的代价体金字塔和当前视差图为输入,迭代更新隐藏状态,并预测一个视差残差。每次迭代都基于更新后的视差,重新在代价体上查询更精确的匹配代价。
  3. 上采样与传递:当前尺度优化结束后,将视差图上采样到下一更精细的尺度,作为其初始值,同时隐藏状态也传递过去,继续优化。
  4. 最终上采样:在1/4尺度迭代优化完成后,将视差图凸上采样到全分辨率输出。

这种由粗到细、迭代优化的策略,能在大位移处保持鲁棒性,在精细结构处又能恢复高精度。

3.3 双向融合与整体训练策略

两个子网络(evCMPStereo和imgCMPStereo)是独立预训练的。每个网络的总体损失函数是多个损失的加权和: L_pre = L_d + λ1*L_cdea + λ2*L_scc + λ3*L_hvt 其中L_d是视差平滑L1损失,L_cdea是CDEA的域分类损失,L_scc是立体规范化约束的L1重建损失,L_hvt是上下文变换一致性损失。

预训练完成后,我们冻结两个子网络的权重,将它们作为强大的双向特征提取器。对于一个新的输入对(左图,右事件):

  • evCMPStereo网络会输出一组“以事件域为规范空间”的多尺度特征和初始代价体。
  • imgCMPStereo网络会输出一组“以图像域为规范空间”的多尺度特征和初始代价体。

在Bi-CMPStereo的融合阶段,我们设计了一种分层融合策略

  • 在1/16和1/8等较粗尺度:直接将两个子网络产生的代价体在通道维度进行拼接。因为粗尺度特征抽象,模态差异小,直接拼接能高效融合信息。
  • 在1/4精细尺度:由于细节丰富,模态差异可能更明显,我们使用一个3D Hourglass网络来融合两个代价体。这个网络通过3D卷积和跳接,能够自适应地选择和聚合两个域中最有价值的匹配线索。

融合后的多尺度代价体,再与HVT提取的上下文特征一起,送入相同的级联ConvGRU中进行最终的视差迭代优化。在这个阶段,只训练3D Hourglass融合网络、ConvGRU更新器和HVT上下文网络,损失函数简化为L_final = L_d + λ3*L_hvt

4. 实验验证、问题排查与调参心得

4.1 数据集与实验设置

我们在三个主流事件视觉数据集上进行了全面评估:

  1. DSEC:大型户外驾驶数据集,分辨率高(640x480),包含白天、夜晚、城市、乡村等多种复杂场景。我们按照公开划分,使用31个序列(18948个样本)训练,10个序列(7109个样本)测试。
  2. MVSEC:室内飞行器数据集,分辨率较低(346x260),用于测试跨数据集泛化能力。我们将在DSEC上训练的模型,直接在MVSEC的indoor_flying序列上测试,不进行任何微调。
  3. M3ED:多机器人、多环境事件数据集,分辨率更高(1280x720),用于进一步验证泛化性。

评估指标我们采用立体匹配领域通用的:

  • MAE/RMSE:视差绝对误差/均方根误差的平均值,单位像素,值越小越好。
  • nPE:误差超过n个像素的像素百分比,例如1PE、2PE、3PE,值越小越好。

对比方法包括:

  • 非对称立体SOTA:ZEST(基于视觉提示的方法)及其在DSEC上重新训练的版本ZEST†,以及SEVFI-Net。
  • 对称事件立体SOTA:SE-CFF和DTC-SPADE,作为性能上限参考。

4.2 核心实验结果与分析

我们的实验充分验证了Bi-CMPStereo及其各个组件的有效性。

在DSEC数据集上的性能(见表1): 我们的方法在所有指标上全面领先。即使是单一路径的imgCMPStereoevCMPStereo,也大幅超越了之前的非对称方法ZEST和SEVFI。这证明了我们CMPStereo网络设计的优越性。而双向融合的Bi-CMPStereo进一步提升了性能,甚至在MAE、1PE、2PE等关键指标上,超过了需要双目事件相机的对称事件立体方法(SE-CFF, DTC)。这是一个非常重要的结果,它表明:通过精心设计的跨模态融合,一个事件相机+一个RGB相机的非对称系统,其深度感知能力可以媲美甚至超过两个事件相机的对称系统,而成本却低得多。

跨数据集泛化能力(见表3、表4): 在未经过任何微调的情况下,直接将DSEC上训练的模型应用到MVSEC和M3ED上,Bi-CMPStereo的泛化性能显著优于所有对比方法,包括专门为零样本泛化设计的ZEST。这强有力地证明了我们方法所学到的跨模态匹配能力是本质的、场景无关的,而不是对训练数据分布的过拟合。HVT模块在这里功不可没,它迫使模型学习到了对表面纹理变化不敏感的、更几何化的特征。

消融实验(见表5、6、7): 我们系统地验证了每个模块的贡献。

  • 移除CDEA或SCC:在imgCMPStereo上,移除任一模组都会导致性能明显下降。SCC的作用尤其关键,因为它直接保证了跨模态对齐的保真度。
  • 移除级联结构(仅在1/4尺度优化):性能下降,证明了由粗到细策略的必要性。
  • 在Bi-CMPStereo中移除CDEA或SCC:同样导致性能下降,说明这两个模块不仅帮助单网络对齐,还促进了两条路径学习到更具互补性的特征。
  • 移除HVT:在跨数据集(DSEC→MVSEC)测试中,性能下降显著(MAE从1.858升至2.093)。这证实了HVT对于防止模型依赖图像纹理“走捷径”,提升泛化能力的决定性作用。

4.3 实际部署与调参注意事项

基于我们的开发经验,这里分享一些实操中的关键点:

1. 数据预处理与校准至关重要 非对称立体的前提是严格的相机标定。必须精确获取事件相机和RGB相机之间的外参(旋转和平移)和内参(焦距、主点、畸变)。在DSEC等数据集中,RGB图像需要根据标定参数扭曲(warp) 到事件相机的坐标系下,保证极线对齐。在实际系统中,任何微小的标定误差都会在深度估计中被放大。

2. 事件表示的参数选择

  • Voxel Grid的bin数量:我们选择了5个。太少会丢失时间信息,太多会增加计算负担且可能引入噪声。需要根据事件流的时间密度调整。
  • Event Concentration的堆叠数量M:我们选择了10。这个参数影响了事件“累积”的时间窗口和注意力加权的复杂度。对于不同频率的场景,可以适当调整。

3. 训练技巧与超参数设置

  • 损失权重(λ1, λ2, λ3):经过网格搜索,我们最终设定为0.5, 2, 1。λ2(SCC损失)权重较高,因为它直接关系到对齐质量的核心约束。
  • 学习率与调度:初始学习率5e-4,采用余弦退火策略。我们发现,在训练Bi-CMPStereo融合网络时,学习率可以设得更低一些(如1e-4),因为特征提取器是冻结的,只需要微调融合模块和GRU。
  • 批大小(Batch Size):在24GB显存的RTX 3090上,我们最大批大小设为8。立体匹配任务显存消耗大,尤其是构建高分辨率代价体时。如果显存不足,可以尝试梯度累积。

4. 推理速度与优化 在单张RTX 3090上,对于640x480的输入,Bi-CMPStereo的推理时间约为0.1秒/帧(10 FPS),达到了实用级别。如果对速度有更高要求,可以考虑:

  • 减少迭代次数:默认迭代次数可能较多,可以尝试在精度损失可接受范围内减少。
  • 量化与剪枝:将模型转换为FP16或INT8精度,并对网络进行剪枝,可以显著提升速度。
  • 使用更轻量的特征提取主干网络(如MobileNet变体),但需要重新权衡精度。

5. 失败案例分析:何时效果可能不佳? 尽管Bi-CMPStereo表现强劲,但在极端情况下仍会面临挑战:

  • 事件完全缺失的区域:如果场景中有大面积完全静态、无纹理的区域(如一面纯色的墙),事件相机不会产生任何输出。此时,evCMPStereo路径将缺乏有效输入,深度估计将主要依赖imgCMPStereo路径和图像本身的立体匹配,在纹理缺失区域可能会失败。
  • 非常剧烈的、非刚体运动:事件相机对运动非常敏感,但如果运动过于复杂且非刚体(如密集的树叶在狂风中乱舞),事件流会变得极其稠密和混乱,给特征提取和匹配带来困难。
  • 标定严重错误:如果相机标定不准,极线约束不成立,任何立体匹配算法的基础都将崩塌。

对于前两种情况,一个可行的解决方案是引入置信度估计。网络可以同时输出每个像素视差的置信度。在事件缺失或运动混乱的区域,置信度会很低。在后处理中,可以利用时空一致性或结合单目深度估计先验,对这些低置信度区域进行修复或平滑处理。

Bi-CMPStereo为我们打开了一扇新的大门:用更低的硬件成本(一个事件相机+一个RGB相机),实现堪比甚至超越高端对称系统(两个事件相机)的鲁棒3D感知能力。它的核心思想——通过双向目标规范空间学习来保留模态特异性,并通过约束保证对齐保真度——为解决更广泛的跨模态感知问题(如RGB-热成像、RGB-激光雷达)提供了有价值的思路。代码已经开源,期待社区能在此基础上,推动事件视觉在机器人、自动驾驶等领域的实际应用走向新的高度。