DeMoN
Ummenhofer 2017 · 论文
一句话总结 — DeMoN(CVPR 2017)将双视图运动恢复结构(structure-from-motion)表述为一个学习问题:一串堆叠的编码器-解码器网络从一对不受约束的图像中联合估计深度和相机运动,并通过强制预测光流来学习对应关系。
问题
经典的双视图SfM流程依次串联特征点检测、描述子匹配、本质矩阵估计和稠密立体匹配——运动首先是从稀疏且容易出现外点的对应关系中估计出来的,因此一个糟糕的运动估计会污染深度估计,弱纹理区域会失败,并且在相机平移量很小时所有现有流程都会崩溃。单图深度网络避免了匹配问题,但由于完全依赖外观先验,在训练分布之外泛化能力很差。DeMoN端到端地训练一个网络,从连续的、不受约束的图像对中计算深度和运动——并证明了朴素方法会失败:一个简单的编码器-解码器接收两帧图像后会走单图捷径,直接忽略第二张图像。
方法与架构
- 链式的三个组件:bootstrap网络 → 迭代网络 → 精化网络。 bootstrap和迭代组件各自都是一对编码器-解码器:第一个从图像对预测光流和光流置信度图(编码器使用成对的1D滤波器以获得较大的感受野);第二个接收光流、置信度、图像本身以及经光流变形后的第二张图像,预测深度、表面法线,并通过三个全连接层预测相机运动 和深度缩放因子 。
- 强制匹配。 预测光流要求同时使用两张图像;将该光流输入深度/运动网络会使其利用运动视差。这是关键的架构技巧:朴素的双帧深度估计并不比单图深度估计好(L1-inv 0.079对比0.080),而DeMoN能达到0.012。
- 参数化。 旋转 (角轴表示),平移归一化为 以固定尺度基准;网络预测逆深度 (可处理无穷远处的点)以及标量 ,使最终深度为 。
- 迭代网络。 将前一次的深度+运动转换为光流提议,再将光流转换为深度提议,然后重新估计——这是一种带共享权重的学习式迭代精化。训练时将前几次训练迭代得到的预测结果追加到小批量中,而不是展开(unrolling)迭代(不通过迭代反向传播),从而节省内存;改进效果在3-4次迭代后趋于饱和。精化网络将64×48的估计上采样到完整的256×192分辨率。在GTX Titan X上,3次迭代的前向传播耗时110毫秒。
- 损失函数。 在缩放后的逆深度上使用L1损失,;在法线和光流上使用L2损失;置信度损失以真值 为目标;运动损失使用L2;以及论文标志性的尺度不变梯度损失,该损失由像素 处的离散梯度构成,
该损失在5种间距上惩罚相邻像素间的相对深度误差——使深度不连续处更锐利,同质区域更平滑。
- 训练数据。 SUN3D、RGB-D SLAM、MVS重建结果、合成数据集Scenes11,以及作者自建的Blendswap数据集;使用Caffe配合Adam优化器,分三个阶段训练(先训练顺序的编码器-解码器,再联合迭代训练,最后训练精化网络)。
实验结果
- 对比经典双帧SfM(基线方法由SIFT或FlowFields对应关系+8点法/RANSAC+重投影精化+平面扫描立体匹配构成):DeMoN在深度和运动上均胜出,“在大多数数据集上领先1.5到2倍”——例如Sun3D:L1-rel 0.172对比0.297(Base-FF)、旋转误差1.80°对比3.68°、平移方向误差18.8°对比33.3°;Scenes11:旋转0.81°、平移8.9°。只有在纹理丰富的MVS数据集上,基于光流的基线方法在运动估计上与之相当。
- 在除MVS之外的所有数据集上,DeMoN的深度估计甚至超过了Base-Oracle——即给定真实运动的经典立体匹配方法(例如Sun3D的sc-inv为0.114对比0.241)。
- 对比单图深度(Eigen&Fergus VGG、Liu等人的方法):在除NYUv2(它们的训练域)之外的所有数据集上表现更好。在作者自行录制的、包含不寻常场景(雕塑、近景特写、旋转90°的图像)的泛化测试集上:L1-inv为0.041,对比Eigen的0.062和Liu的0.055——在外观先验失效的地方,运动视差得以泛化。
- 能优雅地处理退化的小基线/零基线情况,并且将成对运动串联起来,在RGB-D SLAM序列上能得到局部一致的轨迹(存在平移漂移,无回环检测)——“这些结果使我们相信DeMoN可以被集成到此类[SLAM]系统中”。
对SLAM的意义
DeMoN是”给网络输入两张图像,输出几何信息”这一系列方法的先祖。它证明了学习双视图几何需要匹配,而不仅仅是识别——这一教训至今仍影响着前端设计——其学习式迭代精化预示了BA-Net、DeepV2D和RAFT风格的系统,而其不受约束的双视图设置正是DUSt3R在基础模型规模上重新探索的方向。