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

点击上方“小白学视觉”,选择加"星标"或“置顶”

重磅干货,第一时间送达

计算机视觉(CV)|机器学习|深度学习|图像处理

编者荐语

 

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

转载自丨黄浴@知乎

链接丨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

ab989f0698cd282cf147b26c483079ce.png b8c8cae51368c3e12e7f98710fa0315c.png

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

059d395694d3b6590c7a74276f400efc.png b567a9b533eceffa0a07a11769088a9f.png

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

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

d597cfca7ca664635e47ea18760a03cc.png f72e36b77a13ac5c2def23f4a41d9be5.png

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

9332800c720cd0ea5ac2f88f1bf9e4d5.png

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

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

e74f6f47faa68b21857b05a0882ab32d.png

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

60f24f9ff3d649a12cc8123407c903e8.png 2c58aa39e03c6f160fd548d1e789a782.png

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

4e239b3aff69d6b4525d290dda31dc05.png

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

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

9e7e2140a70fb6dd163deb478abd2915.png

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

02c91557846b0ff6f649de4e242132f2.png

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

9968a58971f256ba6c62cf7380e161fe.png

还有一种方法是把深度图估计变成一个搜索问题,即假设相似图像具有相似深度图:论文“2d-to-3d image conversion by learning depth from examples“

574a5ab901e53cc4a9a0b0067d7dcf87.png

针对视频,可以利用optic flow做motion segmentation,那么修正上面的方法得到:微软论文“Depth Extraction from Video Using Non-parametric Sampling“

a2b405c7edd05578d963410d9d27dacf.png

另外一种改进是利用dictionary learning优化整个搜索过程:EBAY论文”Im2Depth: Scalable Exemplar Based Depth Transfer“

54bfcedaea729ab245f78ed737ded3b2.png

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

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

2e89fe360825a610c20044dda940d357.png 1f2d42541459857049da7a0d3f358b1f.png

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

9046ab30e276a6d909de446a028e31c9.png 780781e2313e32ddd6a9e46610ce4636.png

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

148d5c97ce8811d2db153f20852fd52a.png 03226851232d017bab95000e2c2d11cb.png 82aab0588e249457998b7bdc13cab68f.png 0799119fdcc3e23b4e6cfc711597bd2a.png 7c2741725398a798c78712b8dd92f4f2.png

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

5dd51c5db5fedb0c7b34a7192d995f79.png 17db69ecff9337e569194bae126e11b9.png 19cda7f2c5e66965996c9ca824840bb5.png

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

63071fe6fc76c67e8ef26a6a4fa448c5.png 93026c1333a221e76a587acd833b33e3.png 456cb627669a701b662e5a205b2b690d.png

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

c40ca08ed3aad5ae9455e5c63c1ac07d.png 4faaa1f17f1803fdbe866720bdd83b08.png

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

678880a57450c32d3f7740a85069482f.png

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

2a98f1889666e07589410de0d62c0de6.png

CVPR18 商汤科技的工作:“GeoNet--Unsupervised Learning of Dense Depth, Optical Flow and Camera Pose”,和光流,姿态一起估计了,还是无监督学习方法。

14131e47262ad41418e969b7181d7835.png

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

80726ee0a0e5738a9ebc3e433ccfc1c6.png

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

1参考文献

  • “Predicting Depth, Surface Normals and Semantic Labels with a Common Multi-Scale Convolutional Architecture“, 15

  • “Depth Map Prediction from a Single Image using a Multi-Scale Deep Network“, 15

  • “Towards Unified Depth and Semantic Prediction From a Single Image“, CVPR 15

  • “Deep Convolutional Neural Fields for Depth Estimation from a Single Image“, 2015 CVPR

  • “Deeper Depth Prediction with Fully Convolutional Residual Networks:, 3DV, 16

  • “SURGE: Surface Regularized Geometry Estimation from a Single Image“, NIPS 16

  • “Estimating Depth from Monocular Images as Classification Using Deep Fully Convolutional Residual Networks“,2016

  • “Single image depth estimation by dilated deep residual convolutional neural network and soft-weight-sum inference“,2017

  • “Depth and surface normal estimation from monocular images using regression on deep features and hierarchical CRFs“,2015 CVPR

  • “Unsupervised CNN for Single View Depth Estimation: Geometry to the Rescue“,2016 ECCV

  • “Unsupervised Monocular Depth Estimation with Left-Right Consistency“ 2017 CVPR

  • “Semi-Supervised Deep Learning for Monocular Depth Map Prediction“ 2017 CVPR

  • “Multi-Scale Continuous CRFs as Sequential Deep Networks for Monocular Depth Estimation “,2017 CVPR

  • “Unsupervised Learning of Depth and Ego-Motion from Video“,CVPR 2017

  • “Single View Stereo Matching“,2018

  • “Deep Ordinal Regression Network for Monocular Depth Estimation“, CVPR18

  • “Look Deeper into Depth: Monocular Depth Estimation with Semantic Booster and Attention-Driven Loss“, ECCV‘18

  • ”Learning Depth from Monocular Videos using Direct Methods“,CVPR 18

  • “Depth Prediction Without the Sensors: Leveraging Structure for Unsupervised Learning from Monocular Videos“, 2018

  • “GeoNet: Geometric Neural Network“, CVPR 18

  • “GeoNet--Unsupervised Learning of Dense Depth, Optical Flow and Camera Pose“, CVPR18

  • “LEGO: Learning Edge with Geometry all at Once by Watching Videos“, AAAI,19

下载1:OpenCV-Contrib扩展模块中文版教程

在「小白学视觉」公众号后台回复:扩展模块中文教程,即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。


下载2:Python视觉实战项目52讲
在「小白学视觉」公众号后台回复:Python视觉实战项目,即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。


下载3:OpenCV实战项目20讲
在「小白学视觉」公众号后台回复:OpenCV实战项目20讲,即可下载含有20个基于OpenCV实现20个实战项目,实现OpenCV学习进阶。


交流群

欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器、自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN、算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: OpenCV是一个流行的开源计算视觉库,它支持多种图像和视频处理功能。在OpenCV中,单目视觉是指使用单个摄像头或者摄像头数组进行计算机视觉任务的技术。 在单目视觉中,我们通过分析单个摄像头获取的图像来实现不同的应用。相比于双目或多目视觉,单目视觉的计算相对简单,但仍可以实现许多实用和有趣的功能。 对于单目视觉,OpenCV提供了一系列的算法和函数,例如特征提取、目标追踪、运动估计和三维重建等。通过这些功能,我们可以实现物体识别、运动检测、人脸识别等应用。 除了提供各种算法和函数,OpenCV还支持多种编程语言,例如C++、Python和Java。这使得研究人员和开发人员可以使用他们熟悉的编程语言来进行单目视觉的开发和实现。 总之,OpenCV单目视觉是通过分析单个摄像头获取的图像来实现计算机视觉任务的技术。它提供了各种功能和编程语言支持,使得开发人员可以轻松地实现各种有趣和实用的应用。 ### 回答2: 单目视觉是指通过一台摄像机采集图像,并通过计算机视觉算法来获取场景中的三维信息。OpenCV是一种开源的计算机视觉库,提供了丰富的函数和工具,可以实现单目视觉任务。 在OpenCV中,单目视觉主要通过相机标定和视觉几何计算来实现。首先,进行相机标定,即确定相机内参和畸变参数。通过拍摄一组已知的模板图像,利用OpenCV中的函数,可以准确地计算出相机的内参和畸变参数,从而校正采集到的图像。 然后,通过视觉几何计算,可以实现通过单目视觉获取场景中的三维信息。OpenCV提供了多种方法来实现这个目标,比如利用特征点匹配和三角测量等技术来恢复三维点云数据,从而实现深度估计和场景重建。 除了基本的相机标定和视觉几何计算,OpenCV还提供了其他单目视觉相关的功能。比如,可以利用OpenCV中的目标检测和跟踪算法来实现实时目标检测和跟踪。可以利用OpenCV中的人脸识别算法来实现人脸识别等应用。 总之,OpenCV是一个强大的计算机视觉库,可以用来实现单目视觉相关的任务。通过它提供的函数和工具,可以进行相机标定、视觉几何计算、目标检测和识别等操作,用于实现各种单目视觉应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值