题目:Learning the Depths of Moving People by Watching Frozen People
链接:https://arxiv.org/abs/1904.11111
前言
三维重建领域学习的第二篇论文,重点在人体的深度估计,数据来源也比较特别,从YouTube爬下来的。
概要
本文提出的方法能够在有自由移动的人的单目视频中进行深度估计,这类场景在实际应用中还是挺多的。现有的从单目视频中恢复动态非刚性物体深度的方法对物体的运动有很强的假设性,只能恢复稀疏的深度。本文的方法是数据驱动的,且来源也比较特别,来自于YouTube。
由于人是固定的,训练数据可以从多个角度产生,在推断阶段正是通过视差从静止的区域来引导深度预测。作者在现实世界手握相机拍摄的视频中验证了他们的方法,并且展示出超过SOTA的效果。
1、介绍
人手持相机进行拍摄是现实世界中经常出现的场景,而恢复这样场景的几何信息是很难的:移动的物体干扰了3D视觉中的极线约束,并且在现有的SfM和MVS中经常被视作噪声。而人类对深度的感知并不容易受到物体运动的影响,即使只通过一只眼睛看。本文的尝试就是通过计算的方式实现这种能力。
通过数据驱动的方法,本文无需进行一些人类形状和变换的假设。
深度传感器(例如Kinect)得到的内容一般局限于室内环境,并且需要很多人为的处理。并且各类年龄、肤色的人种也很难召集,所以基于YouTube中的视频数据。这些数据构成了新的MannequinChallenge(MC)数据集。因为场景的固定的,因此通过SfM和MVS估计相机动作与深度,然后使用3D数据作为训练的监督。
文中设计的深度神经网络使用一张RGB图像、人区域的mask和环境初始深度作为输入,然后输出整张图片的密集深度预测,包括人和整个环境。其中初始深度通过视频中两帧的视差进行计算。作者的方法在单目深度预测和运动立体方法中都超过了SOTA。
本文的主要贡献如下:
- 提供了一个新的深度预测到的数据来源
- 设计并训练了一个基于深度网络的模型,用于在相机同时运动和复杂人体运动的情况下预测密集深度图。
2、相关工作
基于学习的深度预测
包括监督与非监督的,有很多从一张RGB图中进行深度预测的算法。现在也有很多学习方法基于多张图片或者假设知道相机的位置或同时预测相机的位置与深度。但是没有像作者的方法这样用来预测动态物体的。
动态场景的深度预测
RGBD数据已经被广泛用于动态场景的3D建模,但是只有几个方法尝试去重建单目相机的图像。有些方法尝试去重建动态场景的稀疏几何,有人提出了一种基于动作/物体分割的算法,将动态场景分解为分段刚性部分。然而,这些方面采用强烈的物体运动的假设被人为运动所干扰。还有人做足球运动员运动的情况,不过应用场景太过局限。
用于学习深度的RGBD数据
RGBD = RGB + Depth Map
RGB :
RGB色彩模式是工业界的一种颜色标准,是通过对红®、绿(G)、蓝(B)三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色的,RGB即是代表红、绿、蓝三个通道的颜色,这个标准几乎包括了人类视力所能感知的所有颜色,是目前运用最广的颜色系统之一。
Depth Map:
在3D计算机图形中,Depth Map(深度图)是包含与视点的场景对象的表面的距离有关的信息的图像或图像通道。其中,Depth Map 类似于灰度图像,只是它的每个像素值是传感器距离物体的实际距离。通常RGB图像和Depth图像是配准的,因而像素点之间具有一对一的对应关系。
原文链接:https://blog.csdn.net/donkey_1993/article/details/80781773
有很多通过深度传感器或同步雷达采集的RGBD数据集,但是很少有对自然场景下人的深度监督。很多动作识别方法使用深度传感器去捕捉人类活动,但是大多数使用静态相机,并且提供有限的室内场景。REFRESH是最近提出的的一个半合成场景流数据集,通过在NYU v2图像上叠加动画人物而创建。因此这个数据有很多局限且包括合成的人。
人体形态和姿态估计
从一张图中重建人体姿势现在是很流行的一个领域,然而这些方法只建模人体,而忽视了头发、衣服等场景中的非人类部分。另外,这些方法很依赖于人体关键点,需要人体的大部分都在这张图片中。
3、MannequinChallenge数据集
The Mannequin Challenge是一个流行的视频潮流,人以一种有趣的姿势静止在某个地方,然后摄像机会环绕他拍摄,很多视频都被传到了YouTube上,可以通过SfM和MVS算法处理它。作者找到了大约2000个可行的视频,并组成了MannequinChallenge (MC)数据集。
Estimating camera poses
作者使用 ORB-SLAM2来估计初始相机位置,这个阶段为了效率采用了低分辨率的数据,并且基于一般的手机摄像头拍摄习惯调整到了60度。然后提高分辨率后通过可视化SfM系统对序列进行了重建,从而重新定义相机位置和一些参数。
Computing dense depth with MVS
在每个相机片段中的相机得到估计以后,作者重建了每个场景的密集几何。使用的方法是当时最好的MVS系统——COLMAP。由于使用的数据含有很多移动模糊、阴影和反射等,直接用MVS生成的深度对于训练来讲有太多的噪声。作者通过一个深度滤波器来解决这个问题。首先使用了一个深度改良方法,然后在MVS深度一致与两帧间的动作视差的基础上去除了一些错误的深度值,然后对于每个有效像素计算一个正则化过的error。
DMVS是通过MVS得到的深度图,Dpp是基于两帧的视差得到的深度图。对于这个结果超过一定值的深度值会被去除。
Filtering clips
有些片段可能不适合训练,例如人移动了起来,或者视频中包含一些图形元素。动态物体和合成的背景也不满足multi-view geometric constraints,因此会被MVS过滤掉。因此,作者去除了数据中少于20%有效信息的像素。
更进一步,作者去除了估计的径向畸变系数绝对值大于0.1或focal length小于等于0.6或大于等于1.2的帧。
最后,作者手动检查剩余序列的轨迹和点云,并移除明显错误的重建。
4、Depth Prediction Model
作者在MC数据集上训练他们的深度预测模型,一个关键的问题在于如何结构化输入使之能够在静止的人上训练但是在移动的人上推断。一个选择是从单个RGB图像回归到深度,但是这个方法会忽略场景静态区域的几何信息。为了有利于这样的信息,我们将深度图、非人类区域输入到网络,从视差中进行估计。
上面这张图是一个模型输入的例子,第一个是原图,然后是一张二值化的人类区域mask,一个通过视差的深度估计Dpp,一个置信图C以及一个可选的人类关键图K。文中假设训练与推断过程中通过SfM知道精确的相机姿态。得到这些输入后,网络预测出整个区域一个完整的深度图。要匹配这些MVS深度值,网络必须去掉人类区域深度的一些瑕疵,改善从Dpp中得到的非人类区域的预测,并且最后使整个场景的深度一致。
作者使用的网络结构是hourglass网络的变体,使用最近邻上采层替换了双线性上采样层。
下面具体来看:
Depth from motion parallax
两帧之间的视差图提供了初始的深度估计(假设人是动态的,场景是静态的)。然后基于reference image和source image,可以估用FlowNet估计一个光流图。通过相机两个场景的相对位置,可以从估计的flow field计算一个初始的深度图Dpp,然后使用Plane-Plus-Parallax representation。
在一些情况下,例如两帧向前或向后的移动,估计的深度图可能会被错误定义,比如极点可能在图像中。作者通过后面Confidence的方法进行解决。
Keyframe selection
如果两个场景间的2D变化很小或well-approximated by a homography的话视差可能会不适应,为了避免这种情况,作者使用了一个评价标准来选择帧,保证有合适的视差。作者希望两个场景有足够的重叠,并且有充分的baseline。
其中d代表两者相机中心的L2距离,o代表共可视SfM特征的分数。
对于o小于τ(一个阈值)的会被舍弃,说明两者偏差太大,然后还会限制帧的间隔在10以内。这样人为制定的标准作者经过实验发现还是很有效的。
Confidence
互联网视频中存在很多模糊、阴影、过暗或者反射等现象,在这种情况下,光流会有很多噪声,加重了输入深度图的不确定性。我们因此估计,并且输入进模型一个置信图,Dpp,这样会让网络更好地依赖深度高可信度的区域,并且潜移默化地提升在低可信度区域的预测。定义如下:
第一个表示向前或向后flow field的一致性,等于max(0, 1 - r§2),这里r§是向前向后的warping error。
第二个表示flow field与视图之间的极线约束的符合程度,等于max(0, 1 - (γ§/γ)2),其中γ§表示弯曲像素位置之间的距离和对应的极线。γ(上面有一杠)控制极距公差。
最后这个在两个场景的视差很小的情况下值会很低,公式如下:
β§是相机射线在p处相交的角度,β一杠也是一个torlerance。可以看到,如果角度大于这个torlerance那么结果就是1,否则会很小。
Losses
由于计算的深度值存在尺度信息,因此这里采用尺度不变的深度回归loss。具体由三部分组成:
Scale-invariant MSE
mean square error
此项计算预测中两个像素和GT中相同两个像素之间深度的平方、对数空间的差。
Multi-scale gradient term
作者使用了一个多尺度的梯度项,计算预测值和真实值导数的L1距离。
Multi-scale, edge-aware smoothness terms
为了在MVS无法恢复深度纹理较少的区域平滑深度差值,使用了一个平滑项,基于图像的一阶二阶导数计算log深度导数的L1距离,从而防止图像剧烈改变。
5、Results
总结
本文的工作主要是建立在一个单目相机与移动的人,并且提出了一个新的数据来源——YouTube。不过正如作者说的,这个方法还是有局限性的,加深了相机的姿态,所以如果移动物体占满了屏幕大部分场景会很难进行预测。对于非人的移动区域可能不怎么精确,例如车、烟雾,不过对于后面的研究还是很有启发的。
读了本篇文章,感觉三维重建的思路和语义分割真的很不一样,很在于一个像相机模型这样的计算机视觉基础知识与经典领域研究的应用,而后者很重要的则是模型设计,从实现和学习难度上来讲感觉三维重建更大一些。
虽然没有特别看懂,但是还是总结一下:比较重要的一个部分是对数据的处理,这个过程涉及通过MVS、SfM等技术进行估计,然后选取关键帧,以及删掉一些不合适的数据,还是复杂的一个过程。但是这个地方也体现了很多计算机视觉的基本知识。
然后通过处理的数据与生成的深度图进行训练,采取的是比较流行的一个hourglass网络的变体,然后构建了一个合适的损失函数,包括对深度图的学习与区域的平滑。
另外,作者对于一些实际问题还做了处理,比如视差可能过小,并制定了一个标准来过滤掉这样的数据。以及构建一个置信度对模糊、烟雾、低亮度与反射等数据进行过滤。置信度的各个部分从数学的角度也不是特别难,但是有很大的启发意义。
可见在作者发现问题的基础上,构建了很多或用于模型学习或用于数据过滤的表达式,然后结合流行的三维重建技术与经典的计算机视觉知识例如摄像机予以辅助,最终得到了一个合适的监督式深度学习方法。