【GiantPandaCV导语】本文针对3维视觉中的深度图补全问题,介绍了一下近年基于深度学习的RGB-D深度图补全算法进展。深度图的质量对3维视觉至关重要,深度图的优劣极大地影响了后续的3d识别等工作,但目前较多研究聚焦于自动驾驶领域的Lidar深度图的补全,而对RGB-D相机涉猎较少,故本文介绍几篇基于consumer RGB-D cameras深度图补全的深度学习方法,以此来看看近期该领域的发展现状。
0x0. 前言¶
consumer RGB-D cameras主要是指价格相对低廉的主动式3D相机,如3D结构光相机和TOF相机。通常用于人脸重建,室内场景重建等。深度图记录了场景的几何信息,它表示场景中物体离相机光心的距离。图像像素坐标可以通过深度图和相机参数转换为世界坐标系下的三维坐标(例如:点云数据)。一般3D结构光相机的有效距离是0.3-4m,在这个范围之外的物体就会表现为无数据的空洞,即深度值为0。空洞由无效点组成,其成因是多方面的,包括场景中额外光源的干扰、场景中物体表面特性和遮挡,超出量程等等。这些空洞会导致深度图像上有一些盲区,从而严重影响深度图像质量。因此深度图补全空洞的工作就至关重要了。
0x1. CVPR2018:Deep Depth Completion of a Single RGB-D Image¶
算法可以直接通过输入RGB图及相对应的深度图,直接补全任意形式深度图的缺失。这算是第一篇基于深度学习的RGB-D深度图补全的文章。
1. 总体介绍:¶
受制于物理硬件的限制,目前深度相机输出的深度图还有很多问题,比如对于光滑物体表面反射、半透明物体、深色物体、超出量程等都会造成深度图缺失,而且很多深度相机是大片的深度值缺失。深度图补全一直是一个非常有用的研究方向,之前的文献大都只能补全比较小范围的深度缺失,对于较大深度值缺失的情况无能无力,而本文只需要输入一张彩色图和一张深度图,就可以补全任意范围的深度缺失。注意该工作与深度估计不同,很多深度估计方法只能重现consumer RGB-D获得的原始深度,本文关注的深度补全是对深度传感器没有返回值的像素点进行全新的深度预测。由于这些像素在原始深度中缺失,因此只在原始深度上训练的方法不能很好的预测缺失的深度信息。
2. 挑战与解决方案:¶
用深度学习做深度信息修补过程的挑战:
①Training data。针对很难获得大规模的成对的原始深度图和干净gt深度图训练集,很多原始深度图不完整,有缺失的现象,作者引入了一个新的数据集,其中包含105432个RGB-D图像。
②Depth representation。照理说是使用新数据集作为监督以训练FCN直接从RGB-D深度图回归出深度值,但是哪怕是人类也难以估计绝对深度,尤其是缺失大片区域情况下。因而作者训练网络只预测深度的局部微分性质(如表面法线和边界),然后用原始深度图作为正则化,求解一个全局线性优化问题,最终得到补全的深度图。
③Deep network design。以前没有人去训练一个端对端网络去从RGB-D图像补全深度,没有前辈经验是个困难。很难训练网络从输入深度图来填补空洞——网络通常只学会复制和插入输入的深度。
解决方案:只向网络提供彩色图片作为输入,训练网络在监督下预测局部表面法线。然后将这些预测与全局优化中的输入深度图结合起来,以解决返回到深度修补的问题。(网络通过颜色预测局部特征,这是网络所擅长的部分。法线只代表表面的方向,这是相对容易预测的。边界为深度不连续提供信息,有助于保持边界锐度,所以也有用。)
网络的总体结构:其输入是RGB-D相机拍摄的一张RGB图像和对应的深度图,然后根据分别训练好的两个网络(一个是针对RGB图表面法线的深度学习网络,一个是针对物体边缘遮挡的深度学习网络),预测该彩色图像中所有平面的表面法线和物体边缘遮挡。最后用深度图作为正则化,求解一个全局线性优化问题,最终得到补全的深度图。
3.Method:¶
(1)Dataset
如何创建RGB-D图像与完整深度图像相匹配的数据集?
①使用低成本的RGB-D摄像机捕捉图像,并将它们与高成本深度传感器同时捕获的图像对齐。这种方法既昂贵又耗时,这种类型的最大公共数据集涵盖了少量的室内场景。
②此论文所使用的方法,利用从大环境的多视图RGB-D扫描重建的现有表面网格,此论文使用的是Matterport3D,先进行稠密的三维重建,然后再进行优化和渲染。虽然单一视角的深度图可能会有因为不同原因引起的缺失,但是经过多个不同视角的重建和优化,这些缺失的地方都被填补了。然后将其深度结果反投影回到输入深度图。最后得到的深度图就是gt.
(2)Depth Representation
为什么几何表示法最适合深度补全? 方法一,直接,设计一个基于原始深度和颜色直接回归出完整深度图的网络,但非常困难。 方法二,间接表示,本文关注预测表面法线和边界。由于法线是不同的表面性质,它们只依赖于像素的局部领域。在利用彩色图像求出了表面法线和边界后,可以结合原始深度图,重新计算所有深度,然后得到补全后的深度图像,这种训练彩色图法不受被测物体和环境的限制,并且网络独立于输入的观测深度。
(3)Network Architecture and Training
训练深层网络来预测表面法线和边界以达到补全深度信息的最佳方法是什么?
选择了zhang et.al中提出的深度网络架构,[论文:Physically-based rendering for indoor scene understanding using convolutional neural networks.CVPR2017]。因为在正态估计和边缘检测方面都显示出了竞争性能。该算法基于VGG16,有对称的编码器和解码器用从重建网格计算出的表面法线和轮廓边界来训练网络。用重建网格计算出的表面法线和轮廓边界来训练网络。
【如何进行深度训练?】
训练网络应该用什么损失函数?
因为目标是补全缺失像素,因此目标是训练一个网络,仅对原始深度图像的空洞内的像素进行法线预测。且这些像素的颜色外观特征可能与其他像素不同(发亮,远离相机等),人们可能认为网络应该只对这些像素用于网络监督且进行法线回归。但这些像素是比较少的,所以本文对比了在所有像素上进行训练以及仅在空洞处进行训练。结果显示,所有像素训练的模型比仅使用观察到的或仅使用未观察到的像素训练的模型表现更好,且使用渲染图法线训练的模型比使用原始图法线训练的模型表现更好。
【网络应该输入哪些图像通道?】
实验表明如果用RGB-D四个channels作为输入来预测三个颜色通道的法线,在空洞部分像素的法线预测很差(尽管对于observed pixels work),这和大家自然的想法不一致,推测这种网络只是从RGB-D中的depth channel来预测normals了,所以对于空洞就不能work了,这样给定了空洞对应的颜色图也不能补全。实验后发现仅仅使用彩色图而不用深度图作为输入,预测法线竟然效果最好!因此可以训练一个网络仅从颜色图来预测表面法线,观察到的深度仅作为从法线图正则化求深度时使用。这种将无深度图预测与有深度优化分离开来的策略很有吸引力,首先,预测网络不需要对不同深度传感器进行重新训练(因为仅依赖于颜色)。其次,优化可以推广到各种深度观测作为正则化,包括稀疏深度样本。
(4)Optimization
目标函数为:四项误差平方的加权和。
ED:在像素p处,预测深度D(p)与观察到的原始深度D0(p)的距离
EN:预测深度与预测表面法线N(p)的一致性by 切线点乘法线
ES: 促使相邻像素有相似的深度值
B ∈ [0, 1]根据一个像素在边界B(p)上的预测概率对正常项进行加权
4.实验结果¶
搭建桥梁沟通了彩色图和深度图信息 桥就是normals!
实验环境:对于一幅320x256的RGB-D输入图来说,用NVIDIA TITAN X GPU预测表面法线和边界遮挡需要0.3s。在Intel Xeon 2.4GHz CPU上求解线性方程需要1.5秒。显而易见,这是一个牺牲时间换取图像质量的算法!
0x2. ECCV2018:Reconstruction-based Pairwise Depth Dataset for Depth Image Enhancement Using CNN¶
这篇文章主要增强由consumer RGB-D cameras(包括3D结构光相机和tof相机)捕获的深度图像。包括去噪和填充空洞。
1.总体介绍:¶
来自手持消费RGB-d相机的深度图像的质量仍然是有限的,因为它们的重要设计目标是速度,而不是精确地获取三维几何。由于传感器的物理限制和低处理能力,捕获的深度图像受到重噪声和缺失值的影响。由于同时捕获的RGB图像的质量相对优于深度图像,很多传统深度图增强算法利用RGB图与深度图颜色和几何信息之间的相关性,即sensor fusion,主要采用基于局部滤波器的方法。然而,单个退化的深度图像只包含场景几何的部分信息,以往基于图像的方法在解决重噪声和缺失值方面的能力有限。
尽管基于CNN的图像处理在彩色图像恢复方面取得了成功,但由于缺乏原始干净的成对gt数据集,类似的基于深度学习的深度图增强方法到目前为止还没有得到积极的研究。彩色图像复原可以由高清彩图降质得到大量数据,因而对数据驱动的深度学习算法非常有利,而深度图像采集上质量就很差,难以给深度学习提供数据。
与上一篇介绍的文章对比,CVPR2018那篇文章主要集中在估计未观察到的大深度值,而不是从低质量的RGB-d图像中去除噪声和填补空洞。此外,他们没有解决由不准确的三维重建引起的原始输入和渲染的深度图像之间可能的不匹配,这应该解决,以便有效地训练深度图像处理网络。
2.贡献:¶
①作者提出了一个大规模的原始带噪和干净的成对深度图像数据集,可以用于深度图像增强的监督学习,干净深度图是在RGB-d流上应用最先进的密集三维表面重建。
②提出了一种基于深度图像增强的具有多尺度跳过连接的深度拉普拉斯金字塔网络,以级联的方式降低噪声和空洞。
③网络训练的损失函数使原始几何结构在深度图像增强过程中得以保留,其特性有助于加速密集三维表面重建的收敛。
3.Method:¶
论文讨论了consumer RGB-D cameras三个关键问题:depth noise(噪声,法线可以可视化看出), depth hole(空洞), and depth discontinuity(物体表面的深度不连续)。
①噪声:原始深度图像通常包含强的非均匀噪声模式。 由于RGB-d相机通过分析投影模式(结构光相机)或测量发射光的传播时间(TOF相机)来捕获三维几何,噪声分布受表面材料和距离摄像机的影响。因此,具有固定核大小的传统图像滤波器,如双边滤波器,不足以处理各种噪声。相反,作者使用一个深度CNN,它可以通过从给定的深度图像中提取多尺度特征来自适应地处理噪声。
②空洞:RGB-d相机的物理限制导致缺少深度值,称为空洞。太闪亮或吸光的物件也会导致缺失深度值,预测缺失值需要了解输入场景的局部和全局上下文。为了实现这种预测,我们的网络架构逐渐将深度图像从粗(输入的¼大小)提高到精细尺度来实现深度图增强。
③物体表面的深度不连续:与边缘周围具有抗锯齿光滑像素的彩色图像不同,深度图像不应具有通过混合前景和背景深度获得的抗锯齿深度值。为了保持深度图像中的原始不连续性,提出了一种基于梯度的结构保持损失函数,它可以强烈地惩罚深度边缘的平滑性。
4.数据集的生成:¶
用高精度激光扫描仪捕捉场景可以为数据集产生干净的深度图像,但这种方法需要额外的硬件。如果通过绘制综合建模的高质量三维场景来获得干净的深度图像,但深度图的降质过程不容易实现。因此,作者采用了稠密的三维重建技术去获得干净的深度图。在数据集生成过程中,作者通过测量结构相似性来检查原始和干净深度图像对的质量,并过滤掉低质量对,以提高数据集的整体质量。(方法与刚介绍的CVPR2018的文章类似)
5.网络结构:LAPDEN¶
拉普拉斯金字塔深度增强网络Laplacian Pyramid Depth Enhancement Network(LAPDEN)
与直接提高给定输入图像的空间分辨率的超分辨率不同,Lapden首先在最粗的尺度上预测干净的完整深度图像,其分辨率为原始分辨率的四分之一。然后,预测的四分之一大小的干净深度图像逐渐通过金字塔向上采样,以预测一半大小和原始大小深度图。此外,在下采样过程中提取的特征被传递到具有跳过连接的上采样金字塔,以防止在上采样过程中丢失输入深度图像中的原始细节。对于图像金字塔的每个级别,一个长跳过连接直接将提取的特征传递到网络的后面相应部分,以便能够融合以不同尺度(红色箭头提取的特征)。
结构细节:输入深度图经过7×7的卷积层映射为64通道的图,然后输入到带有跨层连接的多层金字塔结构。在最粗的尺度上,使用图像重建层从提取的特征中预测四分之一大小的剩余深度图像,噪声和空洞几乎可以被移除。在此基础上,对特征进行了上采样和进一步变换,以预测上层的细尺度子带残差。分别在金字塔的中和高层使用20和40个卷积层作为残差块。除了预测残差层(即重建层)之外,每个卷积层都有一个-0.2斜率的rectified linear unit (LReLU),所有卷积层都使用64 channels,其大小为3×3。下采样和上采样是由卷积层和转置卷积层使用64 channels进行的,其大小为4×4。
结构的优点:首先,当在粗尺度上尝试时,降噪和填充空洞变得更容易。下采样输入深度图像自然减少噪声和空洞,CNN的感受野尺度变大,因而网络可以很容易地学会预测代表场景整体结构的干净完整的深度图像。第二,由于在粗尺度预测中估计了整体结构和光滑表面,更精细的尺度层只需要学习预测“锐化深度边缘不连续性和精细细节的残差”。
6. 损失函数:¶
总体损失函数被定义为数据损失Ld和结构保持损失Ls的组合:
多尺度数据损失:x表示输入深度图,y和n是x对应的干净深度图(gt)及其法线图,yˆ是输出深度图。我们首先用yˆ与y之间深度的L1距离和yˆ与y之间的深度梯度L1距离来定义ld,就像通常基于cnn的回归一样(对应公式前两项)。此外,我们还使用了它们之间表面法线之间的L1距离(公式最后一项np和nˆp代表法线)。表面法线方向对深度值的振荡噪声高度敏感,因此与前两种措施相比,最小化表面法线距离对于去除小深度噪声是有效的。这个loss可以解决method提出的前两个问题(噪声和空洞)。总的来说,我们定义数据Ld如下:
结构保持损失:method第3点指出了深度图像沿前景和背景区域之间的边缘具有明显的不连续性和强烈的混叠。 传统的损失函数,如深度值的L2或L1,很难保持这种不连续性。作者提出了一种基于梯度的结构保持损失Ls,以保持原始几何结构和深度图像的不连续性。 在数学上,深度不连续在边缘像素处引入了强梯度大小。 如果发生反混叠或混合,当陡峭的边缘扩展到多个像素时,边缘周围的最大梯度幅度变小。
这里Ωp代表5*5的窗口,Ls计算像素p周围的最大梯度幅度,并测量yˆ和x的最大值之间的距离。因此,最小化Ls强制yˆ和x具有相似的深度不连续结构。这里可看出,Ls并没像Ld那样用y作监督,而是用输入x作为监督信息,是为了使得输出深度图保持给定输入深度图的原始结构。Ls能使预测的边缘能够从相邻像素中获取结构信息,即使输入图像中的深度像素在该位置丢失。
因此,通过训练具有结构保持损失Ls和数据损失Ld的网络,有效地保留了输入图像的原始深度不连续性,同时显著减少了其噪声和填补了缺失的深度值。
7. 实验结果:¶
作者采用了三级训练策略,先把深度图降为四分之一尺度训练,即只采用粗等级的监督。第二阶段训练同时采用二分之一和四分之一,第三阶段采用全部的三个等级的监督。
这个例子表明,深度噪声和空洞是在最粗的尺度上细化的,细节和锋利的边缘是通过两个更细的尺度恢复的。
对于本文的推理速度,作者并没有提及,但作者描述本文的缺点是不能够实时,后续将是研究的重点,实验结果还是很好的。
0x3. ECCV2018文章:DDRNet¶
Depth Map Denoising and Refinement for Consumer Depth Cameras Using Cascaded CNNs
这篇文章主要增强由consumer RGB-D cameras(包括3D结构光相机和tof相机)捕获的深度图像。包括平滑去噪并补充细节。
1. 作者观点:¶
平滑去噪:能减少传感器噪声,但是高频细节深度信息被修改了,这样的退化永远无法在细化步骤(refinement)中恢复。因而传统算法已不足够解决问题。
深度图增强通常采用RGB图来引导增强深度图。
深度融合:多帧作为输入,融合多帧信息来提高深度图质量。
深度细化方法(refinement):主要是提取几何细节。
2.总体结构¶
DDRNet是由Denoising net(有监督)和refinement net(无监督)组成,可同时在低频和高频上提高深度图的质量。这篇文章主要是针对Consumer Depth Cameras,同时适用于3d结构光相机和tof相机产生的深度图。
3. 数据¶
如果噪声特性因传感器而异,甚至噪声源也是不可追踪的,如何生成gt深度图成为一个主要问题,获取高质量的深度图用于训练挑战巨大。Denoising net的训练数据由Dref提供,Dref并非真正的gt,而是由dynamic fusion方法创造。非刚性的动态融合pipeline能重建高质量动态场景的几何特性(这点与前两篇文章类似)。据此,作者提出了一种人体数据集,填补了人体表面重建领域无数据集的空白。数据集包括人体的彩色图,原始带噪声的深度图,dynamic fusion方法造的高质量深度图(作为gt)。训练集共36840张,其中11540张来自3D结构光相机,25300张来自tof相机,验证集共4010张。训练集包含了不同光照下形态各异且不同衣着的人体。
4.Denoising net:¶
分为三个部分,encoder,nonlinearity,decoder。encoder编码特征,nonlinearity增加非线性,decoder解码出特征,重建出高质量深度图。这里的一些跨层连接在对于Din中保留几何细节很有用,残差策略对提取干净图像很有用。这里用转置卷积(Deconv)代替插值上采样是为了抑制棋盘伪影。通过融合,可以通过集成积分截断符号远距离函数(TSDF,truncated signed distant function )来降低单深度图中存在的重噪声。从这个角度来看,我们的Denoising net是学习一个深度融合的步骤,它能够获得比启发式平滑更好的深度精度。
L2和L1损失可能会产生模糊的结果,但它们准确地捕获了低频,这符合我们的目的。
然而,在只有深度重建约束的情况下,通过Denoising net后,small local patch中的高频噪声仍在,为此我们设计了一个法线项来进一步去除高频噪声,旨在约束去噪深度图的法线方向与参考法线方向一致。Nref法线图可以由作者提出的D2N层得到。
5.Refinement net¶
为了在去噪深度图中添加高频细节,我们采用了一个相对较小的基于超柱体系结构的全卷积网络。这里Cin是单通道的灰度图。
Refinement net解决了反射率和几何分离问题的挑战,采用了更好的反射率估计方法,可进一步减轻反射率的影响。该网络不需要任何训练数据,它是无监督的,依赖于预定义的生成过程,从而对训练过程产生反向渲染损失。
我们首先将Ddn和Cin的光谱特征结合起来,然后通过最大池化和卷积下采样将这些特征融合在空间域中,最后采用多尺度特征图融合。也就是通过提取彩色图像中的高频特征,并作为指导,通过图中所示的网络结构从去噪表面凸显出局部详细几何形状。由于高频细节主要是从小的local patches中推断出来的,因此具有相对较小感受野的浅层网络足够了。Refinement net 网络在一个向前传递的深度图上生成高频细节。
许多基于SFS的细化方法(refinement)表明,彩色图像可以用来估计入射光照,这是由图像的渲染过程参数化的。对于朗伯表面和低频光照,我们可以将反射辐照度B表示为表面法线N、照明条件l和反照率R的函数如下:
基于该式子,设计了逐像素的shading loss。它惩罚了渲染图像与相应灰度图像之间差值的灰度和梯度:
其中Ndt是Ddt的法线图,光系数l∗可以通过求解最小二乘问题来计算。
此外,为了约束refinement深度图接近参考深度图(gt),添加了一个保真度项:
6.实验结果¶
上面例子的Base+Ours refine指的是双边滤波去噪加上refinement net,可看出在广泛的结构噪声存在下,无法保持独特的衣服结构,不必要的高频噪声会导致照度估计不准确。
在欧氏空间中计算了这两个点云之间的均方根误差(Rmse)和平均绝对误差(MAE),还报告了法线的角度差,以及正常差小于3.0、5.0和10.0度的百分比。在测试时,我们的整个处理过程包括数据预处理和级联CNN预测。 预处理步骤包括:深度与颜色对齐、形态学变换和必要时的重采样。前向推理需要10.8ms(256×256输入)或20.4ms(640×480输入)在泰坦X,182.56ms或265.8ms每帧在英特尔核心i7-6900k CPU。 值得一提的是,如果不去噪CNN,我们的方法的一个变体,“双边滤波+refinementnet”达到640×480输入时每帧9.6ms的速度。
可以说这是第一篇在重量级GPU设备上达到实时的基于深度学习的深度图增强算法。
0x4. 参考¶
欢迎关注GiantPandaCV, 在这里你将看到独家的深度学习分享,坚持原创,每天分享我们学习到的新鲜知识。( • ̀ω•́ )✧
有对文章相关的问题,或者想要加入交流群,欢迎添加BBuf微信:
为了方便读者获取资料以及我们公众号的作者发布一些Github工程的更新,我们成立了一个QQ群,二维码如下,感兴趣可以加入。
本文总阅读量次