论文研读:2016 DeMoN Depth and Motion Network for Learning Monocular Stereo
摘要
1.将sfm当作一个学习问题;
2.训练了一个CNN能够通过连续无约束的图片,计算深度和相机移动
3.CNN由多堆编码-解码网络组成,核心部分是一个迭代网络,能够提高预测精度
4.本网络能够输出:1)深度信息;2)相机运动信息;3)平面法向量;4)光流;5)光流匹配可信度。
5.相对于其他的能够预测深度的网络,DeMoN能够学习到匹配的概念。
1.介绍:sfm
1.传统的SFM由几个固定的工作流程组成,现在使用这些流程具有一些内在的缺陷。
1)在通过稠密匹配进行场景重建前,必须先进行相机的位姿估计。因此,如果相机位姿估计有误会导致深度值估计错误。
2)起始的相机姿态估计来源于稀疏的特征点匹配,这种低级别的过程往往会出现异常值并且在没有纹理的区域工作也不正常。
3)当相机仅有微小平移时,目前所有的sfm都会失效。因为相机的微小移动会导致问题退化。
2.本文提出的网络具有以下特性
1)通过一对无约束图片对,同时计算深度与相机位姿估计。因为其同时性,所以有别于传统的sfm技术。
2)目前本文的方法不支持大场景的SFM,但是本文的方法是朝着大视场SFM进步的一步。
3.本文能够说明,以后基于数据驱动的学习方法具有很大的潜力。其能够自动学习之前我们建立模型时所提出的强烈先验。
4.CNN单帧图像预测深度值[7,8,24]
缺点:
1)泛化能力差:在预测从未见过的图片时,效果很差,因为其没有利用双目立体视觉。
5.本文提出的网络,利用了视差信息,不存在上述的缺点,能够应用于从未见过的场景。
1)为了利用视差信息,网络的输入必须是两张相关的图片对。
2)简单的编码-解码网络,不能够充分的利用立体视觉:因为在最终预测深度时,简单的编码-解码网络仅仅使用输入图片对的其中一张图片,这与单帧图像恢复深度没有什么区别。因为单帧图像恢复深度信息是实现训练目标的捷径,其不需要两张相关输入图片,不需要推测相机位姿变化。
3)本文提出的网络,打破单目图片恢复深度时简单实现训练的捷径。关键在于能够建立一个使用相机位姿信息、恢复深度的信息、以及光流信息的网络。
6.为了实现构建网络对两帧输入图片的充分利用,使用以下网络架构:
1)使用一个等价于RNN的迭代网络;不同之处在于,在训练循环网络时,我们将常规训练迭代的预测附加到当前的小批量,而不是典型的展开。这样的训练手段能够为我们节省内存空间
7.利用一个特殊的LOSS去解决SFM的尺度不确定性问题。
2.相关工作
1.一对图片进行深度与相机位姿估计:过去[25,17,10];当今优秀方法[14,42]。
1)这些方法都遵循同一个工作框架
①对两张图片之间的特征点进行稀疏匹配;、
②估计相机的本质矩阵去估计相机的位姿变化
③利用一定的优化手段(滤波器等),去滤除异常点。
2)即使BA作为优化手段时,其同时优化相机位姿与深度信息,但是其最后的优化效果取决于初始化效果(初始化时先特征点匹配,再位姿估计,这一步并不是同时进行的)。
3)传统方法的特点:先估计相机运动+稀疏3D点云,再利用极线集合的方法重建稠密点云。
2.[14,42]适用于大场景重建,能够恢复整个城市的场景,
3.传统方法的特点:先估计相机运动+匹配稀疏3D点云,再利用极线集合的方法重建稠密点云。
1)与传统方法差异的LSD-SLAM[9]:匹配半稠密点云同时重建地图。它考虑一段时间内的多帧图像,但是没有使用BA。
2)DTAM [30]可以通过匹配密集深度图来可靠地跟踪相机姿势以获得关键运动。 但是,需要外部深度图初始化,而后者依赖于经典结构和运动方法
4.[41]图像间稠密匹配关系,计算相机位姿变化;本文通过深度学习的方法,deviate from上述方法通过图像间稠密匹配关系,估计相机姿态。
5.[7]CNN估计深度:单目图像估计深度是一个病态问题,只能够通过增加先验知识或者语义信息去解决此类病态。CNN网络就能够很好的学习一定的先验与语意信息去解决这个问题。
[24]结合CNN+超像素+条件随机场单目图像深度估计。
本文提出的网络,不仅能够学习到单目图像恢复深度时需要的先验以及语意信息,还能够充分利用两张图片间的视差信息,从而能够应用于从未见过的场景。
6.CNN在SFM中的应用:代替前端的特征点匹配过程。[6,44]
7.[45]利用网络估计两张图片之间的视差图;[5,28]利用网络估计图片之间的稠密匹配。本文的方法与[45,5,28]相似。与[28,45]的不同之处在与我们两张图片之间相机运动是任意的,而不是固定的,此时学习起来更加困难。
8.[12]CNN利用视频流重建3D场景:他们通过假设相机姿态已知去简化问题,允许他们使用平面扫描方法在给定的场景视图之间进行插值。 此外,他们从未明确预测深度,仅从中间视点预测RGB图像。
9.[2,19]使用CNN预测相机姿态变化,但是这两篇论文的工作重点不在预测相机姿态,而是学习特征表达;[21]训练了一个CNN去相机重定位:通过单目图片能够预测相机在已知场景的位置,,其仅能使用训练过的场景,对于新场景,必须进行重新训练。
3.网络结构
1.由一系列的编码-解码网络组成,整个网络主要包括3大模块
1)引导网络:许多编码-解码网络组成,计算光流
2)迭代网络:许多编码-解码组成,计算深度与相机姿态
3)细化/提纯网络:一个编码-解码组成,产生最终超分辨与细化的深度图
2.引导网络:
1)输入:一对图像
2)输出:初步深度图+初步相机位姿+初步尺度s
第一个E-D网络输出光流图+光流信任度图
4)E由1纬模板组成(InceptionV4)保证计算速度,通过不长=2,降低空间维度增加通道维度
5)D逆卷积E的输出,输出x,y的光流图+光流信任图
第二个E-D以上一个D的输出作为输入,利用光流图变换其中一张图片为另一张图片。
7)E由1纬模板组成(InceptionV4)保证计算速度,通过不长=2,降低空间维度增加通道维度
8)D逆卷积E的输出
3.迭代网络:其中结构与引导网络的一样,但是输入不同
1)第一个E-D输入:转换深度图+相机位姿信息为光流图,将此光流图+作为输入
2)第一个E-D输出:深度图+相机位姿信息
3)第二个E-D输入:使用先前的相机运动预测将光流转换为深度图,将此深度图+光流图作为输入
4)第二个E-D输出:
注意:
4.提纯网络:简单的逆卷积
4.深度与相机移动参数
1.本网络计算第一个视角的深度图,深度图的值是深度的倒数。
2.通过规定相机平移量t = ||1||去解决尺度不确定性问题。
5.loss方程:基本都需要ground-truth
简介:本网络预测的输出具有很大的区别:一个是高维度的深度图,两一个是低维度的相机姿态矩阵。因此,loss必须能够平衡这些目标,并且能够刺激两个目标能够协同合作。
1.逐点损失函数:深度,平面法向量,光流,光流神人
1)深度图:需要ground-touth
2)法向量:需要ground-truth
3)光流:需要grond-truth
2.相机移动loss
1)旋转:需要ground-truth
2)平移:需要ground-trurh
3.尺度不变loss(有点类似于eigen提出的尺度不变loss)
此函数让估计深度图的梯度与groud-truth的深度图的梯度接近,保证估计得到的深度图纹理清晰、平滑。