基于深度学习的影像深度重建综述
2020-09-07 17:11 计算机视觉life 阅读(1038) 评论(0) 编辑 收藏 举报基于深度学习的影像深度重建综述
论文名称: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
-
视差(深度)计算
-
视差(深度)修正
优化量如公式1。为像素,为对应的深度。为匹配的cost,为正则项。四个部分中前两个部分构建,后两个部分构建并估计深度(视差)。
综合,可对所有双像匹配方法进行分类。如TABLE 1。
3.1 特征提取
基于CNN结构,编码器输入局部影像或全局影像,生成2D的特征图。特征图分两种:
-
单尺度特征图。如Fig. 1,该网络模型有2个分支,每个分支都是一个CNN。提取单尺度特征的网络结构如TABLE 2。
-
多尺度特征图。如Fig. 2。可通过修改中心像素的块尺寸或利用中间层计算的特征图来实现多尺度。注意,层数越深,计算出的特征尺度就越大。
3.2 求特征匹配cost
匹配的cost(即为公式1的)有两种计算方法。
-
由同名特征点的特征向量直接计算距离(如欧氏距离,余弦距离等)求得。
-
使用相似度-学习网络,先集成不同的网络生成的特征向量,再通过全连接网络或卷积网络输出匹配cost,最后由于有多个像对,产生多个cost,所以对诸多cost进行集成(如最大池化),生成最终匹配的cost。
两种方法如Fig. 3。
3.3 视差(深度)计算
3.1和3.2已经计算了匹配的cost,现在通过最小化计算深度(视差)图。如图Fig. 4,分两步进行。
- 将匹配cost正则化。原始的cost由于非朗伯体、物体遮挡、纹理重复等原因,含较多误差。原始cost可与其他特征叠加,然后通过神经网络计算完成正则化。
- 从正则化后的cost估计深度。简单可用argmin或argmax来计算,但argmin和argmax不可导,且无法达到子像素精度。所以采取别的处理手段(如soft argmin)。
3.4 视差(深度)修正
一般情况下,预测的视差(深度)图分辨率较低,细节部分会缺失,且在边界处容易过于平滑。甚至有些方法输出的图不完整或者很稀疏。直接预测高分辨率和高质量视差(深度)图的神经网络有很多参数,很难训练。进而需要一个修正模块。它有三个作用。
- 提高输出视差(深度)图的分辨率。
- 修正在细节处的重建效果。
- 补全视差(深度)图。
在利用深度学习进行修正时,可以有五种输入。
- 估计的视差(深度)图。
- 估计的视差(深度)图与参考影像合并。
- 估计的视差图,匹配cost和重建误差(由左右影像和视差图可得)
- 估计的视差(深度)图和将右影像转为左影像(利用视差)
- 估计的视差(深度)图和参考影响的特征图(第一卷积层结果)
深度学习方法修正如表。分四种方法(如图):
-
从下往上方法。第一种策略类似于滑动窗口的处理方法,以小块为单元处理,估计小块中心像素的深度。另外一种从下而上的策略是利用不完整的深度图的各向异性扩散来填补未知区域的深度。
-
从上往下方法。直接处理整个视差(深度)图。第一种策略采用反池化实现解码,好比池化和卷积的逆过程。第二种策略采用编码和解码网络,先编码到另一个空间,再从这个空间恢复高分辨率视差(深度)图。
-
特定目标(错误的、深度太小或太大的)修正。直接估计深度或进行深度修正不是最优的方法。可将修正任务分解为三个部分。探测错误的估计,替换掉错误的,再进行修正。
-
依据其他信息(如同时优化深度和法线)进行修正。
3.5 多像匹配网络
除了从一个像对中重建深度(视差)图,也可以从n个像对中重建,也就是说将特征计算的网络分支复制n次。多像匹配网络分两种。
-
前期融合网络:如Fig. 5(a), (b), (c)。由不同分支计算的特征可通过池化等方式集成之后,再送入神经网络生成深度图。
-
后期融合网络:如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。为估计的深度图,为真实深度图,为训练集,为网络权重。
-
描述估计的深度与真实深度的误差。可分为以下几类。
- 类loss
- 平均绝对误差类loss
-
交叉熵类loss。为像素具有视差(深度)的概率。为常数。
- 子像素交叉熵。对进行修改。
- 基于合页loss。现有双像,一张属于正类,一张属于负类。在双像上考虑同一位置周围的像素。为正类输出,为负向输出,为间隔,则合页损失定义为:
-
重投影loss。利用相机参数将预测的视差(深度)图投影到参考视差(深度)图上,可不需要真值。
-
匹配loss。作为真实标签,描述左片像素和右片像素的匹配程度。是预测的匹配得分。
- 语义loss。可利用语义信息构建loss。比如基于边缘特征图。是边缘概率图,像素位置。
注意,可由以上多种loss构成。
-
作为正则项加了诸多限制。有如下四种考虑因素。
- 平滑度。由估计的视差(深度图)的一阶或二阶导数构成。
- 一致性。左片为,利用右片计算的视差图将右片转到左片坐标系下得到,利用左右视差将左片转到右片坐标系得到,则正则项为:
另外,有左视差$d_x$和将右视差投影到左片的$\widehat{d}_x$,则正则项为:
-
最大深度启发。在纹理较少区域,多个投影函数和得到近似的投影loss。为了在这些区域采取较强正则化,可用:
-
尺度不变性。
5.3 监督程度
获取真实深度的方式(传统双目匹配或3D扫描设备)比较困难,价格昂贵,并且易受噪声影响,精度不高。通过三种机制可以调整监督机制。
- 以双目影像进行监督。该方法不需要真实深度,但需要双目相机已经标定。比如使用尽量使左视差图等于投影后的右视差图。
- 以相机光圈进行监督。可通过原始影像和预测的深度模拟相机光圈造成的景深效果。
- 以相对深度进行训练。人眼更能够判断相对深度(哪个点近哪个点远)。
5.4 训练技巧
有监督的深度学习经常受限于没有足够的训练数据。另外,当使用测距传感器时,噪声是存在的并且结果有可能很稀疏。但是,合成的影像以及对应的深度图采用计算机图形学技术是比较容易生成的。然而真实影像和图形学生成的影像时有区别的。通过一些手段可以直接训练生成的影像并且可以将真实影像学习的结果迁移过来。为了使生成的影像适合,有两类方法。
- 第一类是训练网络,在生成的影像和真实影像之间互相转化。
- 第二类在生成影像网络和真实影像网络之间,进行权值共享等迁移学习操作。
6 实验评价标准
有如下定量评价方式。
-
训练时间和预测时间
-
对内存的占用
-
计算终点误差。真值为,预测值为,则误差为
-
预测错误像素比例。错误像素指真值和预测值相差超过阈值。
-
绝对相对误差。如公式34。为每个像素。
-
平方相对误差。如公式35,与公式34类似。
- 线性均方根误差。
- 对数均方根误差。
- 最大相对误差。指像素的占比,满足:
- 密度。指完成深度估计像素的占比。
除了定量,还有定性评价质量的方式。
- 监督程度。需要很少的的真值或者甚至不需要真值的训练是优先选择的。
- 端到端训练。有些方法分开训练几个网络,有些一起训练直接输出结果,即为端到端。
- 子像素精度。如果结果直接就有子像素精度,而不需要后处理或正则化,这将是极好的。
- 对视差结果范围是否需要修改。
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 未来发展方向
- 深度学习搭载在移动和便携平台,需要轻小型深度学习网络。
- 深度学习难以恢复细小物体(比如植被和头发)深度,且大多数方法会离散化深度图。另外在复杂环境下精度很容易受影响,比如遮挡区域、高密度聚集场景和具有复杂材料属性的物体。
- 估计深度时需要较大计算机资源,尤其是需要输出高精度深度图和输入高分辨率影像时。尽管可通过多尺度等方式解决,计算时间也是比较长的。
- 有真实深度的训练集比较难获取,可通过构造不需要真值的loss函数或迁移学习等训练策略来解决。
- 提高模型对不同数据集的适应能力。
本文由计算机视觉life 公众号旗下从零开始学习slam知识星球成员 杨俨棣 翻译。
欢迎加入公众号读者群一起和同行交流,目前有SLAM、检测分割识别、三维视觉、医学影像、GAN、自动驾驶、计算摄影、算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~
投稿、合作也欢迎联系:simiter@126.com
长按关注计算机视觉life
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端