本期话题:深度图

内容要点

1. 深度图基础知识

2. 不同的技术路径

  • 传统方法

  • 早期深度学习方法

  • 当前深度学习方法

  • 结合时序信息的深度学习方法

3. 深度估计的主要模块

对很多人来说,自动驾驶早已不是一个陌生的名词,但是深度图(Depth Map)的话,相信不少人还是第一次听说。

顾名思义,深度图是用来反映深度信息的图像,而其中的深度信息指的就是距离信息。它用来描述相机拍摄到的场景图像中每个像素点到相机的深度,计算环境中物体到相机的距离。

图1:深度图示意效果

(颜色越浅的部分深度越小,距离越近。)

01

深度图的基础知识

在自动驾驶中,如果车辆能够稳定可靠地获取场景中各点的深度信息,那么它的作用是显而易见的,比如进行像素级的测距,3D目标检测,未定义障碍物的检测,等等。从而可以实现路面上所有突出障碍物的检测,以及任意障碍物的测距。

另外,将相机图像结合深度信息充填RGB色彩也可以生成像素级点云,实现类似于激光点云的效果。虽然它的测距准确性不及激光雷达,但点云远比后者稠密,而且RGB着色不需要人工进行同步、校准等工作。

图2:视觉方法生成的像素级点云效果示意

可以说,深度图在自动驾驶领域有着相当广阔的应用前景。业界求深度图方法的有很多种,归纳起来可以分为三类:

  1. 双目相机结合立体图像,模拟人眼的立体视觉,将同一点在左右两幅图像不同位置进行匹配后,结合相机外参求得深度。

  2. 单目相机结合单幅图像,直接进行深度推理。将单目的照片结合单目的深度图或激光点云,放入Encoder-Decoder模型中直接进行学习。

  3. 单目相机结合时序图像,用前后时间图像上的点进行匹配,运用一些SLAM的假设求出相机位姿和周边环境中各点的深度。

双目方法较为常用,它将两个相机横向严格放置,预先通过标定获取焦距和基线长度,在知道某点在左右两幅图上的横向位置后便可计算出视差,然后利用相似三角形的原理求出深度。

图3:双目匹配的原理

就像目标检测有mAP、检准率、召回率这些指标一样,深度图同样也有一些评估的方法和指标。目前比较常用的有KITTY D1 error,它计算的是匹配失准的像素比例,以及EPE(end-to-end point error)和一些深度图定量评价指标,如平均相对误差、均方根误差、均方根对数误差、平方相对误差、精确度。

在深度图方面,主流的公开数据集有三种类型:

  1. 合成数据集,它先进行3D建模,然后用虚拟相机捕捉图像。优点是精度非常高,成本非常低,也能实现一些复杂的功能。缺点在于成像不真实,场景不真实。

  2. 激光雷达和CAD数据集,它的优势是精度和真实性高,劣势是点云稀疏,对快速移动的障碍物难以补偿,成本相对较高。

  3. 传统算法生成的数据集,比如用SGM或者是SFM+SGM生成,它的优势在于零成本,缺点是可靠性极差。

图4:不同类型数据集

02

不同的技术路径

在这些年的发展当中,求深度图的方法衍生出了很多不同的技术路径,既有传统方法,也有诞生于深度学习不同时期的一些方法。正是在这些技术方向的共同突破,让深度图应用到量产自动驾驶方案上成为可能。

传统方法

传统方法的性能一般,但是当中一些具有代表性的经典算法,提供了很多有价值的思路。以SGM为例,它求深度图的过程可以分为匹配代价计算,代价聚合,视差计算和视差优化,这一经典思路和其中的不少细节为之后的很多算法所借鉴。

图5:SGM算法示意

传统方法的不足之处在于,面对弱纹理、重复纹理、明暗失调、遮挡等情况时会出现难以匹配的问题。因此它的效果并不理想,求得的深度图通常连续性差,或者轮廓不清晰,甚至是存在明显的深度错误。在一些环境和场景可控的工业领域传统方法尚且适用,但是对于场景繁多的自动驾驶感知环境而言,传统方法非常具有局限性,难以胜任。

早期深度学习方法

相比之下,早期的深度学习方法在性能上就要好上不少。早期深度学习方法是在传统方法基础上做了一步改进,那就是在匹配代价计算中不再用传统的手工提取特征方法进行计算,而是改用深度学习。

早期深度学习方法的特点是,性能不错但耗时较长。在2015年,像MC-CNN这样的卷积神经网络的KITTI 2015 D1 Error已经可以达到3.6%,而传统的SGM算法是10%左右。在运行时间几乎普遍以分钟计的早期,MC-CNN的运行时间也是略多于1分钟。

图6:MC-CNN示意

值得一提的是,MC-CNN在高峰期时的变体非常多,主要的思路包括有提升网络性能,增加感受野,处理多尺度特征,简化训练过程,等等。

早期深度学习方法的思路是先用深度学习的方法求两点的相似度,然后构建3D的匹配代价体,余下部分全是传统方法去做,所以耗时很高。

当前深度学习方法

在2017年一些研究出来之后,基于深度学习求深度图的方法也到了一个新的阶段,端到端方法开始成为当前的主流。

深度学习端到端方法分为重型和轻型两条技术路径,而GC-Net是典型的重型路径。它先用2D卷提取特征,然后组建4D的代价体,全程进行3D的卷积,最后用Soft ArgMax函数求出模型的损失。

GC-Net的性能非常出色,D1-all指标达到了惊人的2.87%(对比之下MC-CNN是3.89%),而且耗时为0.9秒。不过,这类重型网络的嵌入式部署的难度很大,即使相比于早期深度学习方法已经很轻,但运行时间仍达几百毫秒。

相比之下,轻型网络的耗时很短,而且性能较可靠,最为接近量产部署。以DispNetC为例,它是DispNet的两种网络结构中稍复杂的一种,虽然它4.34%的D1-error略高于MC-CNN,但是耗时只为惊人的60毫秒。并且从一些试验结果来看,DispNet的泛化性理论上也较为不错。

深度学习方法可以比较好地处理遮挡,这也是与SGM等传统方法不同的一个地方。因为深度学习虽然学的是匹配,但或多或少还学了很多新的先验信息以及全局语义的理解。

结合时序信息的深度学习方法

这是深度学习方法求深度图的另一个独特技术分支,从2016年后开始出现,采用无监督或者是自监督的方式。

其中极具代表性的是MonoDepth2,它是一个单目深度估计的网络,利用SLAM方面的假设,将具有前后关系的图像输进网络,求得深度和相机位姿,并用t+1帧去监督t帧,将t帧推测生成的t+1帧图像与真值进行对比。

Monedepth2性能稳定,有较为不错的单目无监督的深度推理效果,但也存在一些问题,比如无法有效应对遮挡、移动目标以及非理想反射情况,而且单目推理没有求匹配关系,遇到未见过的场景会比较危险。

图7:无监督方式求得的深度、深度变化、光流

除了深度和相机位姿以外,这类方法也可以无监督地学习光流,比如GeoNet。而且求光流的方法与求深度的方法几乎完全相同,在匹配的时候用光度差值判断匹配正确与否,匹配上就能算出光流。

GeoNet在学习动态障碍物光流的过程中,可以将移动障碍物解耦出来,而且根据一些先验信息,可以直接求图像的深度,因此这个思路也相对来说有量产价值一些。

03

深度估计的主要模块

在早期的深度学习方法中,求深度图通常包括特征提取、形成代价体、代价体过滤和损失函数这几个模块。虽然当前的深度学习方法,大多属于端到端的方式,整体环节会少一些,但是也可以从中找到很多借鉴。

图8:经典的GC-Net的网络结构图

特征提取,分为基于孪生网络和基于串联(concact)的方法。孪生网络的话,左右图分别经过一个骨干网络,然后输出左右图的feature map,最后由这两个feature map组成3D或4D的代价体,这是大部分双目匹配网络使用的方法。而concat的方法在开始就将2幅图像合成6通道,全程不用孪生网络而是仅仅使用类似于分割模型的encode-decode结构,比如DispNet。

其中形成代价体也有几种方法,一种就是基于相关性的,计算两个特征向量之间的距离;另一种是基于concact的,即将左图特征直接基于视差值进行移动后与对应的右图特征进行拼接(concact),然后形成4D代价体。

在代价体过滤部分,4D代价体一般进行3D的卷积,但也可以用一些3D卷积配合2D卷积,3D代价体的话一般是2D的卷积。通常来说,4D代价体的准确性更佳,但计算量也更大。

损失函数是比较核心的部分,分为无监督和有监督两类。无监督方法包括有光度损失、视差平滑度损失、左右一致性校验损失等,有监督的则包括有L1和Smooth L1等函数。

在深度图领域,还有非常多值得研究的方向,包括域自适应、高分辨率深度图、高实时深度图、深度图置信度算法、无标签学习和一些新型应用等等。随着一些算法的不断发展和工程化方面的持续改进,深度图接下来很有希望部署到量产的自动驾驶方案中。

— END —

推荐阅读

关注我们

视差图转为深度图_纽劢研习社 | 深度图的非深度讲解相关推荐

  1. 视差图转为深度图_Parallax Mapping视差映射:模拟冰块

    继续练习一个模拟冰块的效果,模拟的是一个不透明内部有杂质的冰块,内部杂质用视差映射来实现,表面就是简单的法线贴图+Cubemap反射采样,也可以直接只计算高光不反射图案.文章会把视差映射讲一下,算是对 ...

  2. echarts 有引导线和内部文字_上进青年研习社丨设计入门02:平面设计之平面构成中的线...

    文丨姜哥 点.线.面是平面构成的三大基本元素.在<设计入门01丨不知道这一"点",学再多技能也不会设计>中为大家介绍了点的理论知识及在设计中的用法,今天接着来说说第二个 ...

  3. 立体匹配入门指南(8):视差图、深度图、点云

    本篇是比较简单的基础概念,刚入门的朋友可能是需要的. 视差图 三维点云 首先,我们要介绍下这三个概念. 视差(disparity) 视差 ddd 等于同名点对在左视图的列坐标减去在右视图上的列坐标,是 ...

  4. 视差图转换为深度图公司_视差刻录:使用SVG将照片从2D转换为3D

    视差图转换为深度图公司 Last week we talked about ZorroSVG, a tool for converting your chunky transparent PNG-32 ...

  5. 双目立体视觉建立深度图_计算机视觉实验五 双目立体匹配获得视差图,深度图...

    完整源码链接 https://github.com/LamyaLi/cvLab 文章目录 一. 立体匹配的研究背景及意义 二. 立体匹配算法的基本实现思想 1.误差能量函数 2.基于最小平均误差能量的 ...

  6. 2019-9-29 opencv摄像机标定与三维重构4-Depth Map from Stereo Images立体图像中的深度图(视差图)

    官网参见https://docs.opencv.org/3.4.1/dd/d53/tutorial_py_depthmap.html 上一节中,我们学习了极线约束的概念和相关术语.主要包含:如果我们有 ...

  7. 立体栅格地图_三维栅格地图构建之二:视差图及点云图 | 学步园

    在上一步骤--双目校正的基础上可以很方便的获取视差图.视差即空间中同一点在左右目图像上的水平位置差. 自己凭感觉(不知道对错的)总结了一下,主要分为两大类:基于兴趣点的,不基于兴趣点的. 基于兴趣点的 ...

  8. openMVS深度图计算:DenseReconstruction Estimate之EVTEstimateDepthMap之视差图初始化

    视差图初始化 1 对图像下采样 2 TriangulatePoints2DepthMap(对稀疏点三角化.栅格化.对depthMap进行插值) 3 三角网格栅格化 本文讲的是TSGM的视差图初始化,采 ...

  9. iconfont 图标转为字体_阿里巴巴Iconfont矢量图转为字体图标的方法

    我们在做网站时,网站里会有很多的小图标,通常这些小图标会使用小图片来制作,但修改起来比较麻烦.所以现在很多网站都使用字体图片来制作小图标. 今天学做网站论坛介绍一下阿里巴巴Iconfont矢量图转为字 ...

最新文章

  1. oracle10默认备份路径,oracle 10g RMAN备份及恢复
  2. 【ORACLE】碎片整理
  3. JavaWeb--数据库添加
  4. 【读书笔记】建造者模式代码完成与大家分享
  5. 机器人学习--MATLAB官网关于机器人方面的资料
  6. React with Webpack - 3: 内联image、font
  7. 不在 sudoers 文件中。此事将被报告_快餐包装中检出致癌物质?麦当劳、汉堡王回应!...
  8. 【C语言】赋值运算中的类型转换
  9. JavaScript中事件处理器中的event参数
  10. WebApi实现验证授权Token,WebApi生成文档等
  11. 基于SSM的个人健康管理系统
  12. 五笔打字--思成五笔秘方
  13. 一天搞懂机器学习PPT笔记-1
  14. windows10操作-虚拟桌面与关闭时间线
  15. php重定向下载地址,用PHP强制下载然后重定向
  16. 嵌入式软件面试准备与知识点总结
  17. Nacos Go微服务生态系列(一) | Dubbo-go 云原生核心引擎探索
  18. Surface重装系统
  19. 如何将报表系统集成到微信中?
  20. 软银集团和共享办公空间公司WeWork在日本成立合资公司

热门文章

  1. steam android app,steam手机版
  2. 上海··高房价的城市
  3. 数的变幻(魔术师的猜牌术(2))
  4. TIA PORTAL西门子博途中FB与FC的区别
  5. Excel格式报表生成 (POI技术)
  6. 二级域名的子域名查看方法及工具
  7. 女王大学计算机科学,女王大学计算机科学专业本科课件.pdf
  8. 借壳上市的标准和条件
  9. 清云小程序教程十五:主轴与交叉轴一
  10. 概述SAP云平台上的ABAP开发环境