基于深度学习的影像深度重建综述

论文名称:A Survey on Deep Learning Architectures for Image-based Depth Reconstruction

作者单位:University of South Australia

论文下载链接:https://arxiv.org/pdf/1906.06113

1 本文核心思想

在计算机视觉、图形学、机器学习领域中,从RGB影像中恢复深度已经研究了数十年。而深度学习与大规模训练集的出现颠覆了传统的方法。本文综合介绍利用深度学习恢复单视或多视影像深度的方法,总结了常用的处理流程并分析优缺点。

本文创新点:

  • 第一篇综述深度学习重建影像深度的论文。

  • 收集了2014至2018年间,超过100篇在计算机视觉、计算机图形学和机器学习领域的论文。

  • 对深度学习训练集、网络结构、训练方式和应用场景(单视、双视、多视)做了分析。

  • 对诸多方法结果做了综合比较。

2 研究背景介绍

图像三维重建的目的在于恢复真实物体和场景的三维结构,在机器人导航、物体识别、场景理解、三维建模等领域有重要应用。

从2D影像恢复深度可分为两部分。

  • 传统方法方法:具体指理解和构建3D到2D投影过程。要想获取较优的结果,需要多视影像,并且相机需要标定。该方法在影像遮挡、特征缺失、纹理重复的环境难以准确估计深度。

  • 深度学习方法:人眼在单眼观测的情况下,可根据先验知识建立模型推断物体的大概尺寸和几何位置。所以可基于深度学习利用先验知识将深度估计问题建立为识别任务。

而深度学习方法分两类:

  • 双像匹配方法:用深度学习完成特征提取、特征匹配、视差(深度)估计、视差(深度)修正。

  • 回归方法:深度学习直接预测,无需匹配。

3 双像匹配方法

该方法模仿传统双像匹配原理进行学习,匹配结果可转光流或视差图,进而可得深度图。含四个部分。

  • 特征提取

  • 求特征匹配cost

  • 视差(深度)计算

  • 视差(深度)修正

优化量E(D)E(D)E(D)如公式1。x,yx,yx,y为像素,dx,dyd_x,d_ydx​,dy​为对应的深度。CCC为匹配的cost,EEE为正则项。四个部分中前两个部分构建CCC,后两个部分构建EEE并估计深度(视差)。

综合,可对所有双像匹配方法进行分类。如TABLE 1。

3.1 特征提取

基于CNN结构,编码器输入局部影像或全局影像,生成2D的特征图。特征图分两种:

  • 单尺度特征图。如Fig. 1,该网络模型有2个分支,每个分支都是一个CNN。提取单尺度特征的网络结构如TABLE 2。

  • 多尺度特征图。如Fig. 2。可通过修改中心像素的块尺寸或利用中间层计算的特征图来实现多尺度。注意,层数越深,计算出的特征尺度就越大。

3.2 求特征匹配cost

匹配的cost(即为公式1的CCC)有两种计算方法。

  • 由同名特征点的特征向量直接计算距离(如欧氏距离,余弦距离等)求得。

  • 使用相似度-学习网络,先集成不同的网络生成的特征向量,再通过全连接网络或卷积网络输出匹配cost,最后由于有多个像对,产生多个cost,所以对诸多cost进行集成(如最大池化),生成最终匹配的costCCC。

两种方法如Fig. 3。

3.3 视差(深度)计算

3.1和3.2已经计算了匹配的cost,现在通过最小化E(D)E(D)E(D)计算深度(视差)图。如图Fig. 4,分两步进行。

  • 将匹配cost正则化。原始的cost由于非朗伯体、物体遮挡、纹理重复等原因,含较多误差。原始cost可与其他特征叠加,然后通过神经网络计算完成正则化。
  • 从正则化后的cost估计深度。简单可用argmin或argmax来计算,但argmin和argmax不可导,且无法达到子像素精度。所以采取别的处理手段(如soft argmin)。

3.4 视差(深度)修正

一般情况下,预测的视差(深度)图分辨率较低,细节部分会缺失,且在边界处容易过于平滑。甚至有些方法输出的图不完整或者很稀疏。直接预测高分辨率和高质量视差(深度)图的神经网络有很多参数,很难训练。进而需要一个修正模块。它有三个作用。

  • 提高输出视差(深度)图的分辨率。
  • 修正在细节处的重建效果。
  • 补全视差(深度)图。

在利用深度学习进行修正时,可以有五种输入。

  • 估计的视差(深度)图。
  • 估计的视差(深度)图与参考影像合并。
  • 估计的视差图,匹配cost和重建误差(由左右影像和视差图可得)
  • 估计的视差(深度)图和将右影像转为左影像(利用视差)
  • 估计的视差(深度)图和参考影响的特征图(第一卷积层结果)

深度学习方法修正如表。分四种方法(如图):

  • 从下往上方法。第一种策略类似于滑动窗口的处理方法,以小块为单元处理,估计小块中心像素的深度。另外一种从下而上的策略是利用不完整的深度图的各向异性扩散来填补未知区域的深度。

  • 从上往下方法。直接处理整个视差(深度)图。第一种策略采用反池化实现解码,好比池化和卷积的逆过程。第二种策略采用编码和解码网络,先编码到另一个空间,再从这个空间恢复高分辨率视差(深度)图。

  • 特定目标(错误的、深度太小或太大的)修正。直接估计深度或进行深度修正不是最优的方法。可将修正任务分解为三个部分。探测错误的估计,替换掉错误的,再进行修正。

  • 依据其他信息(如同时优化深度和法线)进行修正。

3.5 多像匹配网络

除了从一个像对中重建深度(视差)图,也可以从n个像对中重建,也就是说将特征计算的网络分支复制n次。多像匹配网络分两种。

  • 前期融合网络:如Fig. 5(a), (b), ©。由不同分支计算的特征可通过池化等方式集成之后,再送入神经网络生成深度图。

  • 后期融合网络:如Fig. 5(d)。对每个像对计算cost,再根据池化等方式合并所有的cost。

4 回归方法

该方法不学习如何匹配,直接对每个像素预测深度(视差)。该方法可对单视或双视影像估计深度,且可生成任意角度深度图。网络结构可分4种。

  • 直接对影像进行编码获得深度。一般来说编码网络主要包含卷积层和全连接层。另外,之前的修正方法再获得较高分辨率结果的同时对资源的要求是比较高的,所以加上池化层降低特征图分辨率。
  • 先用一个卷积神经网络对输入影像进行编码,将影像转到隐藏空间(latent space)。再指定一个视角,用一个网络(由一系列全连接层或反卷积层)对编码后的影像进行深度估计。
  • 多个网络搭在一起能够提高效果。
  • 估计深度的同时解决多个任务。深度估计和其他基于影像理解的问题,比如影像分割,语义标注和场景解译,都有强烈的关系。通过利用这些任务之间的复杂属性,可以联合解决这些任务进而互相增强任务效果。另外,尽管能够显著提升各任务的效果,对训练集的要求也是比较大的,需要同时有各个任务的标注。

5 网络训练

本部分具体含四个部分。

  • 不同的训练集与数据增强方式。

  • 不同的loss函数

  • 不同的监督程度

  • 训练技巧

5.1 训练集与数据增强

TABLE 4为双目深度估计数据集。另外多视的算法测视需要人工合成数据集。

现实中有深度标注的自然影像是比较难获取的。所以可基于已有数据集进行数据增强。有以下三种数据增强策略。

  • 3D数据增强。为了给已有数据集增加多样性,可增加一些几何转换。如旋转、平移、缩放、噪声、光照变化等。这样的好处能够减少网络的泛化误差。
  • 使用合成的3D模型和场景。可从3D的CAD模型人工渲染获取影像深度标注。
  • 使用真实影像和3D场景。把从3D模型渲染的影像覆盖到真实影像上从而合成训练集。

5.2 loss函数

loss函数的功能在于描述估计视差(深度)和真实值的差异,并用它来调整网络权重。一般来说loss由两部分组成,如公式7。D^\widehat{D}D为估计的深度图,DDD为真实深度图,Θ\ThetaΘ为训练集,WWW为网络权重。

  • L1\mathcal{L}_1L1​描述估计的深度与真实深度的误差。可分为以下几类。

    • L2L_2L2​类loss

  • 平均绝对误差类loss

  • 交叉熵类loss。P(x,d^x)P(x,\widehat{d}_x)P(x,dx​)为像素xxx具有视差(深度)d^x\widehat{d}_xdx​的概率。Q(dx,d^x)Q(d_x,\widehat{d}_x)Q(dx​,dx​)为常数。

  • 子像素交叉熵。对Q(dx,d^x)Q(d_x,\widehat{d}_x)Q(dx​,dx​)进行修改。

  • 基于合页loss。现有双像,一张属于正类,一张属于负类。在双像上考虑同一位置周围的像素。s+s_+s+​为正类输出,s−s_-s−​为负向输出,mmm为间隔,则合页损失定义为:

  • 重投影loss。利用相机参数将预测的视差(深度)图投影到参考视差(深度)图上,可不需要真值。

  • 匹配loss。label(x,d)∈x,dlabel(x,d)\in{x,d}label(x,d)∈x,d作为真实标签,描述左片像素x(i,j)x(i,j)x(i,j)和右片像素(i−d,j)(i-d,j)(i−d,j)的匹配程度。predicted−score(x,d)predicted_-score(x,d)predicted−​score(x,d)是预测的匹配得分。

  • 语义loss。可利用语义信息构建loss。比如基于边缘特征图。ξ\xiξ是边缘概率图,像素位置x=(u,v)x=(u,v)x=(u,v)。

注意,L1\mathcal{L}_1L1​可由以上多种loss构成。

  • L2\mathcal{L}_2L2​作为正则项加了诸多限制。有如下四种考虑因素。

    • 平滑度。由估计的视差(深度图)的一阶或二阶导数构成。

  • 一致性。左片为IleftI_{left}Ileft​,利用右片计算的视差图将右片转到左片坐标系下得到I^left\widehat{I}_{left}Ileft​,利用左右视差将左片转到右片坐标系得到I~~\widetilde{\widetilde{I}}I,则正则项为:

另外,有左视差$d_x$和将右视差投影到左片的$\widehat{d}_x$,则正则项为:

  • 最大深度启发。在纹理较少区域,多个投影函数和得到近似的投影loss。为了在这些区域采取较强正则化,可用:

  • 尺度不变性。

5.3 监督程度

获取真实深度的方式(传统双目匹配或3D扫描设备)比较困难,价格昂贵,并且易受噪声影响,精度不高。通过三种机制可以调整监督机制。

  • 以双目影像进行监督。该方法不需要真实深度,但需要双目相机已经标定。比如使用L26\mathcal{L}_2^6L26​尽量使左视差图等于投影后的右视差图。
  • 以相机光圈进行监督。可通过原始影像和预测的深度模拟相机光圈造成的景深效果。
  • 以相对深度进行训练。人眼更能够判断相对深度(哪个点近哪个点远)。

5.4 训练技巧

有监督的深度学习经常受限于没有足够的训练数据。另外,当使用测距传感器时,噪声是存在的并且结果有可能很稀疏。但是,合成的影像以及对应的深度图采用计算机图形学技术是比较容易生成的。然而真实影像和图形学生成的影像时有区别的。通过一些手段可以直接训练生成的影像并且可以将真实影像学习的结果迁移过来。为了使生成的影像适合,有两类方法。

  • 第一类是训练网络,在生成的影像和真实影像之间互相转化。
  • 第二类在生成影像网络和真实影像网络之间,进行权值共享等迁移学习操作。

6 实验评价标准

有如下定量评价方式。

  • 训练时间和预测时间

  • 对内存的占用

  • 计算终点误差。真值为DDD,预测值为D^\widehat{D}D,则误差为∣∣D−D^∣∣||D-\widehat{D}||∣∣D−D∣∣

  • 预测错误像素比例。错误像素指真值和预测值相差超过阈值。

  • 绝对相对误差。如公式34。ddd为每个像素。

  • 平方相对误差。如公式35,与公式34类似。

  • 线性均方根误差。

  • 对数均方根误差。

  • 最大相对误差。指像素did_idi​的占比,did_idi​满足:

  • 密度。指完成深度估计像素的占比。

除了定量,还有定性评价质量的方式。

  • 监督程度。需要很少的的真值或者甚至不需要真值的训练是优先选择的。
  • 端到端训练。有些方法分开训练几个网络,有些一起训练直接输出结果,即为端到端。
  • 子像素精度。如果结果直接就有子像素精度,而不需要后处理或正则化,这将是极好的。
  • 对视差结果范围是否需要修改。

7 基于双像数据实验

总表如TABLE 5。

7.1 有无真实深度图的影响

大多数效果比较好的方法都需要真实深度图。但是真实深度比较难获取,所以非监督的训练方式更吸引人。无监督训练的关键在于基于重投影误差构建loss函数,但这需要相机参数。根据TABLE 5可知,有真实深度图训练效果更好,比如 Yang et al. [25] 。

7.2 计算时间和内存

由TABLE 5,估计深度最慢需超过40s,最快需0.1s。

8 基于多像数据实验

TABLE 6比较了五种深度学习多视重建算法。TABLE 6中大多使用了有监督学习,且大多没有达到子像素精度,需要提前给定深度的计算范围且在不调整网络结构重新训练的情况下,无法更改范围。另外,这些方法在重建细微的特征(比如植被)时会计算失败。

9 回归方法实验

TABLE 7总结了深度学习方法回归深度的结果。有如下四个结论。

  • 依据深度的大小采取不同的处理方式,这样精度更高。比如在loss函数中多关注深度较大的像素。
  • 没有训练样本(使用重投影误差构建loss)的预测结果接近于有训练样本预测结果。
  • 采用相对深度能提高深度估计精度。这是因为相对深度比绝对深度更精确,所以获取训练用的相对深度更容易。
  • 联合估计深度和其他属性(如法线、语义分割)能提高深度估计精度。

10 未来发展方向

  1. 深度学习搭载在移动和便携平台,需要轻小型深度学习网络。
  2. 深度学习难以恢复细小物体(比如植被和头发)深度,且大多数方法会离散化深度图。另外在复杂环境下精度很容易受影响,比如遮挡区域、高密度聚集场景和具有复杂材料属性的物体。
  3. 估计深度时需要较大计算机资源,尤其是需要输出高精度深度图和输入高分辨率影像时。尽管可通过多尺度等方式解决,计算时间也是比较长的。
  4. 有真实深度的训练集比较难获取,可通过构造不需要真值的loss函数或迁移学习等训练策略来解决。
  5. 提高模型对不同数据集的适应能力。

本文由计算机视觉life 公众号旗下从零开始学习slam知识星球成员 杨俨棣 翻译。

欢迎加入公众号读者群一起和同行交流,目前有SLAM、检测分割识别、三维视觉、医学影像、GAN、自动驾驶、计算摄影、算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~
投稿、合作也欢迎联系:simiter@126.com

长按关注计算机视觉life

基于深度学习的影像深度重建综述相关推荐

  1. 收集了100+论文的最新综述来了!基于深度学习的图像深度重建

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 今天给大家分享的论文是2020年最新的综述:A Survey on Deep Learning Arc ...

  2. 基于弱监督深度学习的医学图像分割方法综述

    基于弱监督深度学习的医学图像分割方法综述 摘要:基于深度学习的医学影像分割尽管精度在不断的提升,但是离不开大规模的高质量标注数据的训练,被称为弱监督学习的深度学习的一个分支正在帮助医生通过减少对完整和 ...

  3. 病虫害模型算法_基于深度学习的目标检测算法综述

    sigai 基于深度学习的目标检测算法综述 导言 目标检测的任务是找出图像中所有感兴趣的目标(物体),确定它们的位置和大小,是机器视觉领域的核心问题之一.由于各类物体有不同的外观,形状,姿态,加上成像 ...

  4. 基于深度学习的表面缺陷检测方法综述-论文阅读笔记

    //2022.3.2日阅读笔记 原文链接:基于深度学习的表面缺陷检测方法综述 (aas.net.cn) 个人对本篇综述内容的大致概括 论文首先介绍了表面缺陷检测中不同场景下的成像方案,主要根据表面颜色 ...

  5. 论文《基于深度学习的表面缺陷检测方法综述》学习笔记

    <基于深度学习的表面缺陷检测方法综述>学习笔记 前段时间完成了<基于图像的零部件缺陷识别系统设计>毕业课程设计,过程中收获了很多,老师也分享了很多论文,在此记录一下学习的收获. ...

  6. 基于深度学习的目标检测研究综述

    基于深度学习的目标检测研究综述 摘要:深度学习是机器学习的一个研究领域,近年来受到越来越多的关注.最近几年,深度学习在目标检测领域取得了不少突破性的进展,已经运用到具体的目标检测任务上.本文首先详细介 ...

  7. 读“基于深度学习的图像识别技术研究综述”有感

    "基于深度学习的图像识别技术研究综述"总结 现在流行的图像识别技术都是基于深度学习的算法,经过前辈们的探索改进,图像识别技术经历很多阶段,现如今图像识别技术已经广泛的应用于生活的方 ...

  8. 基于深度学习的目标检测算法综述(从R-CNN到Mask R-CNN)

    深度学习目标检测模型全面综述:Faster R-CNN.R-FCN和SSD 从RCNN到SSD,这应该是最全的一份目标检测算法盘点 基于深度学习的目标检测算法综述(一) 基于深度学习的目标检测算法综述 ...

  9. 基于深度学习的目标检测算法综述(一)

    基于深度学习的目标检测算法综述(一) 基于深度学习的目标检测算法综述(二) 基于深度学习的目标检测算法综述(三) 本文内容原创,作者:美图云视觉技术部 检测团队,转载请注明出处 目标检测(Object ...

最新文章

  1. 相机模型--A Theory of Catadioptric Image Formation
  2. 在EXE和DLL中,FindResource的区别
  3. H5的Websocket基本使用
  4. 独立团-手游脱机封包辅助课程(完整版)
  5. STM32用串口(USB串口)下载程序的方法
  6. Win8 ××× 客户端安装出现 An error occurred installing the TAP device driver 错误的解决...
  7. 黑苹果alc269声卡仿冒id_笔记本制作仿冒声卡驱动AppleHDA最详细教程
  8. Boobooke (播布客) 是个好网站
  9. 无法解析 taglibs:standard:1.1.2
  10. 抽奖活动的奖品怎么设置?
  11. docker 清理磁盘
  12. python批量修改字典的键或值
  13. php+点击图片跳转网页,怎么在图片上加超链接 点击图片跳转到指定网页
  14. python 中关键字 global 的用法
  15. java内部类继承类_java内部类基础(内部类继承关系 或外部类整体继承)
  16. 美国互联网理论是伪科学?
  17. 用户注册密码加密和后端校验的权衡
  18. Sinvoice:创新声波通信技术,给您带来全新的连接体验!
  19. 聊聊太阳能光伏发电系统的防雷设计
  20. 三极管工作原理_「硬见小百科」半导体三极管的工作原理

热门文章

  1. webpack入门与解析(一)
  2. 小米9搭载 Android,小米9开箱:新一代安卓机皇,硬件配置不输苹果xsmax
  3. keep-alive的使用及详解
  4. 插件化?好像也就那么回事
  5. Java开发两年挑战阿里P6,面试经历分享
  6. 阿里云 P10 研究员吴翰清(道哥)离职,投身 AI 短视频创业
  7. 干了三年外包的普通程序员还能社招进阿里吗?
  8. 2007年安徽省公务员录用考试
  9. DIY福音:Firefox菜单及右键菜单ID大全
  10. 跨域传值即主页面与iframe之间互相传值