【三维重建】Unsupervised Learning of Depth and Ego-Motion from Monocular Video

题目:Unsupervised Learning of Depth and Ego-Motion from Monocular Video Using 3D Geometric Constraints
链接:https://arxiv.org/abs/1802.05522

前言

最近开始接触三维重建,希望能够跟着师兄的脚步多学一点东西。刚开始学论文读起来还是很吃力的,这篇文章花了一个上午的时间才勉强懂了一点。为了防止自己忘得太快,做一下笔记方便以后回顾。

概述

本文提出了一种基于无监督学习的新方法,对单目视频中的深度与自我运动的估计。以往的一些方法多采用像素级或基于梯度的损失,只关注在较小区域的像素。而作者提出的方法能够明确地对整个区域的3D几何进行推断,并且加强连续视频帧之间3D点云和自我运动的一致性。对于这项比较有挑战性的任务,在作者提出的对齐三维结构的新颖的反向传播算法下得以解决。
作者使用从相邻帧之间得到的深度与运动信息,将3D的损失与基于帧重建光度质量的2D损失进行了结合。作者还通过加入有效性掩码来避免不存在有效信息区域的惩罚。
最终作者在KITTI数据集和一个通过手机拍摄的微景观标定的视频数据集进行了算法的验证,也取得了SOTA。

自我运动: 环境中相机的3D运动。在计算机视觉领域,自我运动是指估计相机相对于固定场景的运动。自我估计的一个例子是估计汽车相对于从汽车本身观察到的道路或街道标志线上的移动位置。自我运动的估计在自主机器人导航应用中很重要。
https://blog.csdn.net/CSerwangjun/article/details/103154308

1、介绍

估计深度与自我运动对于无论是机器人还是自动驾驶都是很重要的,而大多数的监督学习方法需要仔细的标定,这严重限制了能够使用的数据集,这正是为什么很多监督学习方法只用在一些著名的数据集,例如KITTI和Cityspaces。即使GT可用的时候,也很容易造成预测伪影。

信号处理(特别是在原始转换过程中执行的操作)可能导致显着的视觉伪影,包括过度锐化“光晕”和丢失精细、低对比度的细节。这些伪影是非线性信号处理的结果(因为它随信号的变化而变化)。日志频率-对比度图表图像可能被锐化(MTF增强),在出现对比特征,如边缘和模糊(低通滤波),在他们没有。这通常提高测量性能(锐度和噪声/信噪比),但它可能导致图像质量下降,例如,一个“塑料”卡通样的外观,即使边缘是强烈锐化。这种细节的损失不能用SFR来衡量。

而旋转LIDAR(Light Detection and Ranging)无法与照相机采集的图像对齐,即使两者仔细同步过。结构光深度传感器、LIDAR和TOF传感器都有噪声与结构伪影的问题。另外,深度传感器和照相机间经常有偏差,当点云投影到照相机视角的时候容易导致一些缝隙或重叠。所以在这种数据上训练出的模型很容易出现伪影。
针对这个些问题,本文提出的一种基于非监督学习的方法能够对单目视频中的深度和自我运动进行学习。唯一的可以称得上“监督”的便是假设连续帧之间具有一致性与时间相关性。
为了实现无监督学习,作者依赖的是自我运动,通过将两个连续的帧输入到视频中,神经网络产生对每一帧的深度估计与自我运动的估计。
这个方法之所以可以学习深度,在于深度和自我运动到一个新的帧的变换是能够被学习的,这个变换可以用可微函数对其进行逼近。
作者本文的贡献主要体现在三个方面:

Imposing 3D constraints

作者提出了一种可以在深度估计中对不连续直接惩罚的约束。通过3D点云对深度进行对比。直观地说,假设场景中没有明显的物体运动,可以通过应用ego运动或其逆运动将每帧的估计点云转换为另一帧的预测点云。在当时,这种直接施加3D几何约束的方法是独创的,并且取得了很显著的效果。

这张图还是很清晰的,对于xt-1和xt在估计点云后分别通过T-1或T变换得到下一帧与前一阵的点云估计,然后再与直接的点云估计计算loss,从而更新T变换,这也代表着对自我运动的估计。

Principled masking

当转换和投影时,场景中有的地方并没有被包含在内,可能是因为视差或者物体刚刚离开或进入到这个场景中,所以这部分的深度和像素信息是无用的。以前的方法通过向模型中添加通用学习掩码或应用后处理来消除边缘伪影来解决此问题。但是,学习mask不是很有效。解析地计算遮罩会给模型留下一个更简单的学习问题。

Learning from an uncalibrated video stream

作者论证其提出的方法可以应用于任何单目视频并且提出了一个新的数据集,是在自行车上通过手机拍摄的。

2、相关工作

深度和自我运动估计的经典方法涉及stereo和特征匹配技术,而目前深度学习普遍取得了更好的效果。很多开创性的工作主要通过对深度传感器中的信息进行监督学习,很多后来的方法把它们当做一种密集预测问题。很多方法(具体可以看原论文)采用了两张图片,即双目图像,Godard提出了一种使用矫正立体输入的方法,视差匹配只需一维搜索。另外,还有的方法通过双目图以及深度、光流信息实现。
之前也有类似的非监督学习方法,但是本文主要的不同在于提出了一种3D损失。

3、具体方法

Problem Geometry

问题其实可以简单的概括为输入xt-1和xt,估计深度dt-1和dt,以及两者之间的自我运动变换Tt。dt好了以后就可以映射为点云

这里的K是照样机内参矩阵。

//这个公式还没有特别看懂,有待研究

Principled Mask

如果要估计Xt,那么需要一个Xt-1和Xt之间的座标映射,然后由于自我运动,某些部分可能会消失或者出现,两者并不共有。尤其是前向自我运动,这种事情很容易发生,而这些部分很影响重建效果。之前的一些方法要么忽略这个问题,要么认为采取了一些蜜汁方法,难以解释。

文中提出的Principled Mask方法如上图所示,可以把前后帧一致的座标保留下来。

Image Reconstruction Loss


这个loss的主要问题在于获得预测结果的过程是粗略的,因为需要可微。这个处理过程无法解释光影、半透明和反射等的影响。总之,这个loss是有噪声的以及有伪影。正则化被用来去减少伪影,相应的也平滑平预测。如果直接学习相邻的帧就可以避免这些问题,但是就无法预测深度和自我运动了。

A 3D Point Cloud Alignment Loss


作者并没有通过Q和Q的预测值建立相邻帧的座标映射,而是直接比较点云,这个3D loss使用了著名的刚性配准方法,Iterative Closest Point (ICP),用来降低对应点的差异。ICP交替计算两个点云之间的对应关系,并且计算了两个点云之间的一个最佳变换,然后不断迭代。
不过ICP是不可微的,因为只能通过它计算的产物粗略的估计,这也有利于反向传播。

简单来说就是这个变换会被不断地调整,基于ICP的结果, 直到与预测值与真实值一致。这个变换也就是自我运动。

最终的loss如上,r代表真实值与预测值直接的差异。

Additional Image-Based Losses

Structured similarity (SSIM)是一种常用的评估预测图质量的指标,这个loss也被用于训练过程。它被用来评估两张图的的相似性。


根据优化目标设计了上了的loss,只需要最小化即可。
然后作者还设计了一种深度平滑loss。

Learning Setup


最后组成了一个最终loss,其中四个参数一次为0.85,0.1,0.05, 0.5。然后采用SfMLearner architecture进行学习,基于DispNet实现。

3、实验


总结

说实话这篇文章已经是少数能看懂一点的了,但是读到现在还是很吃力,已经花了好久了。基于能看懂的一点点,还是总结一下。
作者基于之前一个非监督单目重建工作的思想,把loss从二维升级到3维,精心设计了由四个部分组成的loss进行学习,从变换学习质量、图像质量等多个角度对学习进行限制。并且基于一些越界问题使用了Principled Mask。比较核心的思想还是前后帧的利用,通过估计到点云,然后前后估计与真实估计计算loss用来学习,还是很值得借鉴的。其loss的设计也是基于了很多现有的差异或相似性计算指标实现的。另外,里面出现了很多重建方面的方法与术语,值得细细品味。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章