单目视觉深度估计测距的前生今世

作者:黄浴 https://zhuanlan.zhihu.com/p/56263560 注:已授权转载

最近通过深度学习直接从单目摄像头的图像预测/估计深度图的方法成为一个应用的热点,惹来不少争议。

深度学习直接通过大数据的训练得到/调整一个深度NN模型的参数,在当今计算能力日新月异的平台(GPU/FPGA/ASIC/Muli-core)上实现了计算机视觉/语音识别/自然语言处理(NLP)等领域一些应用的突破。但是专家们还是对今后深度学习的发展有些期待和展望,比如

  • 非监督学习方法的引入减轻大数据标注的负担,比如GAN;
  • NN模型的压缩和精简以普及深度学习在移动终端甚至物联网终端的广泛应用;
  • 还有深度学习能够更多的引入人类知识和简单可靠的推理,以减少“暴力“学习的误差和错误,比如贝叶斯理论,知识图谱,逻辑推理,符号学习,多任务联合训练和迁移学习等等。

这里从单目深度估计在计算机视觉中的发展历程,特别是最近在采用深度学习NN模型的实验中,总结一下如何通过深度学习求解传统视觉问题,并从中发现可借鉴的地方。


深度估计问题在计算机视觉领域属于3-D重建的一部分,即Shape from X。这个X包括stereo, multiple view stereo, silhouette, motion (SfM, SLAM), focusing, hazing, shading, occlusion, texture, vanishing points, ...前面5个都是多图像的输入,从空间几何,时域变换和焦距变化的关系推导深度距离。剩下的都是单目的输入。

如果把图像模糊度建模,下图是图像边缘模糊的响应模型,那么单目图像也能估算深度,即shape from defocusing。

另外一个现象是大气散射 (Atmosphere scattering ) 造成的霾 (haze)提供了深度信息,即depth from haze,一般有天空被拍摄下来的图像,通过散射模型能够推断像素深度。这里给出的是图像亮度C和深度z之间计算的公式:C0是没有散射情况下的图像亮度值,S是天空的图像亮度值。

以上两个任务可认为是deconvolution问题,blind或者non-blind。

物体表面阴影的变化可以提供深度的信息,利用图像亮度和其中物体表面的形状之间的关系,即Shape from shading。和SFM一样,这是一个病态问题,需要附加约束条件,如物体表面的特性。SFS一般假设四种表面模型:纯Lambertian,纯镜面,混合和更复杂的模型。大部分情况下都是Lambertian,即均匀照明的表面从任何一个方向观察其亮度不变。其目标函数是一个积分,求解的算法比较复杂,类似有限元之类。

纹理的变形提供了该纹理表面形状的线索。下图是一个示意流程图:

中间第三图是表面法向图,第四个才是深度图。纹理分割是必备的基础(估计是很难的一部分),此外求解这个shape from texture的优化问题,必须加上几个纹理元素(textels)约束条件:homogeneity,isotropy,stationary。

遮挡(occlusion)也是深度的一个线索,曲率(curvature)是其中的一个体现,即shape from curvature。isophote这个词指一种封闭的物体外轮廓,一般通过对图像灰度设门限可以得到,而它的曲率用来推导对应该门限的深度,见下图所示。门限在【0,255】范围变化就能得到最终叠加平均的深度图。分割仍然是一个求解遮挡的基础,要知道当时分割算法是计算机视觉很头疼的难题,俗称“chicken-and-egg"。

最后再说消失点,即某平面的一组平行线在透视投影下会聚的点。那么,它相应的平面就能得到深度图,如下图所示,在人工(特别室内)环境下可以推导深度图,沿着平行线的平面,靠近消失点的赋予大的深度值。该方法叫depth from geometrical perspective。


顺便提一下,在3维电视热的时期(2008-2010年左右)大家希望把以前拍摄的单目视频变成立体视频,给3-D电视提供更多的内容,包括3-D显示技术的普及(比如红绿眼镜)大家也想在家里share一些3-D的UGC。这个技术被称为2D-to-3D,通过深度图估计和虚拟立体视觉假设可以生成立体视频,其绘制技术称为DIBR,如下图:

以上是典型的传统计算机视觉,需要加约束求解病态的优化问题。下面谈谈机器学习如何解决这个视觉问题:

最早看到用机器学习的方法是基于MRF的,把各种约束关系放在模型的data term和connectivity term求解。这是我看到Andrew Ng在计算机视觉方面的第一篇论文,发表在NIPS 2005年,当时他刚刚在斯坦福大学建立自己的研究组。

如果采用图像分割得到的super-pixels,可以得到更平滑的结果,该系统叫做Make3D。

值得一提的是,当时CMU的博士生Derek Hoiem也在研究如何从单目图像中提取出景物的3-D结构,只是他采用机器学习方法在图像分割基础上做了一个简单的语义分割,即“ground”, “sky”, 和 “vertical”标注像素,然后采用简单的平面billboard做纹理映射后变成“pop-up”的3-D景物:

还有一种方法是把深度图估计变成一个搜索问题,即假设相似图像具有相似深度图:

针对视频,可以利用optic flow做motion segmentation,那么修正上面的方法得到:

另外一种改进是利用dictionary learning优化整个搜索过程:


下面我们看看深度学习是如何做的。

首先就是“暴力”方法直接喂数据训练模型:2篇论文

有些方法开始考虑传统方法的结合,比如CRF:

随后,双目立体视觉的空间约束被用作无监督学习单目的深度估计:三篇论文

自然地采用帧间运动为单目视频的深度估计提供帮助,实际上是双任务联合训练的例子:

这是结合表面法向图的联合训练例子:GeoNet,Geometric Neural Network

结合view synthesis也是利用几何约束和成像特性的工作:之前已经有文章直接通过Deep3D模型做单目到双目的合成,这里的工作只是最终结果是深度估计而不是图像。

这是结合运动和边缘信息的联合训练例子:

这个工作延续了以前利用分割提高深度估计的想法,只是假设上attention机制:

谷歌最近的工作延续了camera motion的结合,同时加上了其中物体各自运动的信息:可以认为是将optic flow分成了camera ego motion和object motion的工作,和加入语义分割有类似的思路吧,文章发表在AAAI‘19.

总之,深度学习在这个计算机视觉的传统问题上一开始是暴力的数据学习方法,慢慢地加入了传统方法的约束和先验知识,一定程度上缓解了数据标注的压力(pixel级别的ground truth是个挑战性的工作,structured light带来的数据多半是室内的,激光雷达的数据也存在“黑洞”现象),同时设计新的loss function同时多任务联合训练都能提升模型算法的性能。

原文发布于微信公众号 - CVer(CVerNews)

原文发表时间:2019-02-09

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券