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


深度学习直接通过大数据的训练得到/调整一个深度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。

53cbc3026f1eab3686884ad697fd77c5.png
fa021a4c1b44758b6ebcbe40a3114235.png

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

d1c09a67c437abf5e02d98392bc59746.png
05c9e2c4076651456e8130a8671cc37a.png

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

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

00c7dc0eb24f70c851093c51ada94e90.png
f5656f2340fd6e255fd82a6b510e5447.png

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

55a474859974634e59516a78eed981cf.png

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

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

8d6802e401784daf2d8f424ca3964784.png

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

87e5e4cf26ab6d10ae8eca975e6ed5cc.png
38cd278a37863b7fdd24d9a4ff95f580.png

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

68a9144a1e9857dfcdf2867d499dd9cd.png

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

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

e19517d046e151729aac77558278fec9.png

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

6069e39539dbf03c705ba536dfcf60b1.png

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

584c25107ed8b9352f87c98f93519b5f.png

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

27908c531a363b5d452d7b7acf16d298.png

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

d1c09a67c437abf5e02d98392bc59746.png

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

793dc603babe34259d7575bc57e0571d.png

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

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

43cecd87cb21bc98fac6eaec0e2ff153.png
d1c09a67c437abf5e02d98392bc59746.png

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

d1c09a67c437abf5e02d98392bc59746.png
d1c09a67c437abf5e02d98392bc59746.png

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

d1c09a67c437abf5e02d98392bc59746.png
d1c09a67c437abf5e02d98392bc59746.png
d1c09a67c437abf5e02d98392bc59746.png
949234ce02181408d78059447e1682b7.png
26652fdd191978eab1034ce24fbf0108.png

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

8c6bd2b20f76a0844a9ae8744e137685.png
d1c09a67c437abf5e02d98392bc59746.png
5ccf270730ab18d27aeb5caac93b72c3.png

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

da8b39e13165c819cdf238c3e60ef188.png
90d002cf930cecf44e5de62f7a65fdf8.png
fe4c535fd308022e3b65a74b0564aebc.png

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

ec58a8a26dcd36165ccdacba7591dc62.png
2618dc4585d91c70aed9b8c4a29382e4.png

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

55f2aaff9825834f51aaac90469ec52b.png

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

0008e3c3c469857bd671186646a2ca48.png

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

a53ac9de9d13d1d393fd0b6d3cbec8c1.png

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

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐