单目深度估计文献翻译unsupervised monocular depth estimation with left-right consistency
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
左右(视差)一致的非监督式单目深度估计
摘要
以学习为基础的方法已经在对单张图片的深度估计上取得了可观的结果。
大多数现有的方法是将深度预测作为监督式的回归问题来处理,然而这种方式需要大量相应的真实深度数据用于训练。
然而,单单从复杂环境中获取高质量的深度数据就已经很有难度了。
我们将在本文中对已有方式进行创新,不再对深度数据进行训练,而是训练更容易获得的双目立体连续镜头。
我们提出了一种新颖的训练目标,即使在缺少真实深度数据的情况下,仍然能够使用卷积神经网络来完成单张图片的深度估计。
利用极线几何限制,我们通过训练有图像重构损失函数的网络生成了视差图像。
我们曾发现单独进行图像重构会导致深度图像质量很差。
为了解决这个问题,我们提出了一个新颖的训练损失函数,可以使左右图像产生的视差趋于一致,以此来提高当前方式的表现和健壮度。
我们的方法在KITTI 驾驶数据集上展示出艺术般的单目深度估计效果,甚至优于基于真实深度数据的监督式学习的效果。
1.简介
在计算机视觉领域,对图片进行深度估计已经有了很久的历史。
目前的成熟方式依赖于连续动作、X 射线下的形状、双目和多视角立体模型。
然而,多数的上述技术是基于可获取相关场景的观测数据的假设。
其中,数据可能是多角度的,或者观测是在不同的光线环境下进行的。
为了突破这个限制,近期涌现出大量在监督式学习下对单目深度识别的讨论。
这些方法试图直接在线下通过大量真实深度数据训练的模型来对图像中的每一个像素进行深度估计。
这些方法虽然已经取得巨大的成功,但是是建立在可获取大量图像数据集和相应的像素深度的情况下的。
在单张图像里获取不受外表干扰的场景形状是机器感知的基础问题。
很多此类的应用,比如在计算机图形学中合成对象的插入、在计算机摄影学中对深度的合成、机器人抓握,会使用深度为线索进行人体姿
态估计、机器人辅助手术和电影业中2D向3D的自动转换。
从一个或多个摄像机获取准确的深度数据对于自动驾驶来说是极其重要的,通常使用的设备是昂贵的激光摄像机。
在单目深度估计中,通过利用焦点等为线索、依照熟悉目标的大小和在光线、阴影以及遮挡下的外形进行比例缩放等方式,人们已经取得了不错的成果。
这种自顶向下和自底向上的线索的结合连接起对全场景的理解和我们对深度准确估计的能力。
本文中,我们采取另一种办法,在训练中以图像重构的方式来对待自动深度识别。
我们的全连接模型不需要任何深度数据,反而通过训练可以立即生成深度数据。
通过学习,它可以预测/有摄像机基线的/矫正立体图像对/的像素级别相关度。
现有的一些方法也解决了上述问题,但是仍然存在一些限制。
比如非完全可辨别的、训练效果非最优的或者图像生成模型不能扩展到大输出分辨率。
在对这些方法的优化中,我们通过新颖的训练目标和加强的网络模型,显著地提高了最终效果。
图1 我们在KITTI 2015上的深度预测结果。
从上至下:输入图像,真实视差数据,我们的结果。
我们的方法能够对如街道标志和杆子之类的薄结构进行深度估计。
图1展示了一个我们算法的运行结果。
在一个时下的GPU上运行对一个512*256的图像的稠密深度预测,我们的方法速度很快,只需要35毫秒。
特别的,我们做出了以下贡献:
1)一个执行端到端非监督式单目深度估计的网络结构,其中一个新颖的训练损失函数可以保证左右深度
的一致。
2)一个对多种训练损失函数和图像生成模型的评估,显示出我们的方法具有很好的效果。
3)除了在一个极具挑战性的驾驶数据集上展示出艺术般结果,我们的模型还推广到三个不同的数据集,
包括一个已经开源的、由我们自己采集的全新城市户外数据集。
2.相关工作
目前有大量对于图像的深度估计研究,要么使用不同视角或者瞬时序列获取成对的或多个重叠图片,要么对假定固定位置的摄像机和静态场景改变光线。
这些方法很典型的建立在必须有相关场景的多于一个输入图像的条件上。
在此,我们集中于只使用一张输入图像的单目深度估计研究,并且不对场景几何学和目标呈现类型做任何假设。
基于学习的立体模型
绝大多数立体估计算法都有用于计算图像中每一像素与其他图像中任何一个像素的相似度的数据项。
典型地,立体数据对是被矫正过的,因此视差(如按比例放缩的逆深度)估测问题可被转化为对每个像素的一维搜索问题。
最近研究表明,将匹配相似作为一个监督式的学习问题并训练一个预测一致性的功能,将能够获得远优于手动定义的相似度数据,而且将这种双目一致性搜索当做多类别的分类问题来对待,具有在结果质量和速度上双重的优势。
相比单纯的学习匹配功能,Mayer等人引入了可以直接计算两个图片中一致区域的全卷积深度网络DispNet。
在训练时他们试图通过最小化一个回归训练损失函数来直接预测每个像素位的视差。
DispNet和他们之前的端到端深度光学流网络具有相似的结构。
上述方法在训练时依赖大量准确的真实视差数据和立体图像对,这种数据在真实场景中很难获取,所以一般使用合成数据进行训练。
尽管合成数据变得越来越贴近真实,但是仍然需要针对每一个新的应用场景由人来创造新内容。
监督式的单张图像深度估计
单视角,或者说单目的深度估计,指的是测试时只有单张图像的问题。
Saxena等人提出了基于补丁的模型Make3D,第一次对输入图像过分割为补丁并通过估测局部平面的3D位置和方向来解释每一个补丁。
这些对平面参数的预测是由经过激光扫描数据集线下训练过的线性模型获取的,然后使用MRF将其
结合起来。
这种方法以及其他基于平面的近似估计的弊端在于对薄结构的建模有难度,另外由于这种预测是在局部建立的,因此缺少全局环境来生成更真实的数据。
相比于手动调节一元和成对的项,Liu等人使用卷积神经网络来学习它们。
在另一种局部方式里,Ladicky等人将语义合并进他们的模型来提高每一个像素的深度估计。
Karsch等人试图通过从训练集里复制全部深度图像来获取更多一致的图像级别的预测。
这种方式的缺点在于在测试时仍需要全部的训练集。
Eigen等人表示使用由图像和其对应深度数据训练过的two scale深度网络获取稠密的像素深度估计是可行性的。
和很多先前的单张图像深度估计方法不同,他们并不依赖于手工获取的特征或者起初的过分割,而是直接在未加工的像素值上学习表现形式。
一些建立在这种方法的成功之上的研究,使用诸如条件随机场之类的技术来提高准确度,将损失函数从回归改变到分类,使用更健壮的损失函数函数,在相关的表面常规预测问题中合并强壮场景。
与之前提到的立体模型一样,这些方式在训练时依赖大量高质量的、像素对齐的真实深度数据。
我们同样进行单张图像的深度估计,但是不需要真实深度数据来训练,而是额外的双目彩色图片。
非监督式深度估计
最近,用于新颖角度合成和深度估计的少量基于深层网络的方法被提出,这些方法不需要训练真实数据。
Flynn等人介绍了一个新颖的图像合成网络DeepStereo,通过从附近图像挑选像素来生成新的视角(下的图像)。
在训练中,多个摄像机的相对位置被用来预测一个特定的附近图像的表现,然后最合适的深度将基于平面扫描体积对邻居图像色彩进行抽样。
在测试时,图像合成是建立在小的重叠补丁上。
因为在测试时需要一些附近生成的图像,DeepStereo不适合单目深度估计。
Xie提出的Deep3D网络也解决了新视角合成的问题,他们的目标是在双目对中通过输入的左目图像生成相应的右目图像。
通过再一次使用图像重构损失函数,他们的方法获得了每一个像素上可能的视差分布。
生成的合成右目图像像素值是左目图像相同扫描行的像素在经过视差可能性加权后的和。
这种图像生
成方式的缺点在于,潜在视差值数目的增长极大地增加了此种算法的内存消耗,导致难以输出大分辨率图像。
在本文中,我们将与Deep3D图像生成模型进行对比,并展示我们的算法生成了更好的结果。
同时进行的、在精神上最贴近我们的模型的是Garg等人的研究。
类似Deep3D和我们的方法,他们训练网络并使用图像重构损失函数来进行单目深度估计。
然而他们的图像生成模型不是完全可辨别的。
为了弥补这点,他们使用泰勒近似来线性化损失函数,这导致了一个更难以优化的目标。
类似其他最近的研究,我们的模型通过使用双线性过滤生成图像来解决这个问题,得到了完全可辨识的训练损失函数。
受启发于Mayer的监督式DispNet结构,我们提出了全卷积的深度神经网络。
通过转化单目深度估计为图像重构问题,我们可以在没有真实数据的情况下解决视差场。
只是最小化光度损失函数可以做到高质量图像重构,但是区别会导致深度数据质量很差。
在其他方面,我们的完全可辨别训练损失函数包括了左右目一只检查来提高合成深度图像的质量。
这种一致性检查普遍用于很多立体模型的后处理中,但是我们直接将它用在网络里。
3.方法
本节将描述我们的单张图片深度预测网络。
我们引入了一个新颖的深度估计训练损失函数,以内嵌的左右目一致性检查为特点,这个功能可以帮助我们实现在不需要真实深度数据形式的监督的情况下训练图像对。
图2 我们的损失组件输出左右视差图d l和d r。
这个损失组件结合了平滑化、重构和左右视差一致检查。
相同的组件将在四组不同尺度的输出中重复执行。
C:卷积。
UC:上卷积。
S:双线性采样。
US:上采样。
SC:跳连接。
3.1.以图像重构的形式进行深度估计
在测试时给定一张图像I,我们的目标是学习到一个功能f来预测每一像素的场景深度,d~=f(I)。
大多数现有的基于学习的方法将它以监督式的学习问题来对待,使用彩色输入图像和相应目标深度值来训练。
目前来说,获取大量不同场景下的此类真实深度数据是不可行的。
即使使用激光扫描仪之类的昂贵硬件,在自然场景中的特征移动和映射也是不精确的。
作为替代方案,我们在训练时将深度估计问题转化为图像重构问题。
这种想法来自于,对于一对校准的双目摄像机,如果我们可以学习到一个能够从给定图像重构另一张图像的功能,则可以获取关于此图像内场景的3D形状的一些数据。
详细来讲,在训练时我们有两张图像I l和I r,对应于拍摄在同一时刻的校准过的立体模型对的左目彩色图像和右目彩色图像。
我们试图寻找到密集对应场d r,当应用到左目图像时能够重构出右目图像,而不是直接预测深度。
我们将重构得到的图像I l(d r)记为I~r。
类似的,我们也利用右目图像来估计左目图像,I~l= I r(d l)。
假定图像是经过校准的,d对应于图片视差-在我们的模型中每个像素都将学习得到的一个标量。
给定一个摄像机间的基线距离b和摄像机焦距f,我们可以通过预测的视差来简单地恢复深度=bf/d.
3.2.深度估计网络
在高层次,我们的网络通过扭曲左目图像以匹配右目图像来获取视差。
我们的方法的关键在于,我们可以只用左目输入图像并通过强迫左目到右目和右目到左目的视差保持一致,而同时推测得出两个视差。
图3 反向映射的采样策略。
在朴素采样下,CNN生成的视差图与目标一致而非与输入一致。
NoLR修正了这一点,但是却受到人工痕迹干扰。
我们的方法使用左目图像为两个视角生成视差,通过强迫双向一致提高质量。
我们的网络使用双线性采样器生成反向映射的预测图像,从而形成完全可辨识的图像生成模型。
如图
三所示,朴素学习通过在右目图像采样生成的视差和左目图像保持一致。
然而,我们希望输出视差图与输入的左边图像对齐,这意味着网络必须从右边的图像中取样。
相反的,我们可以从右目图像中采样并训练网络来生成左目图像,从而创建一个与左目图像一致的视差图(如图3 No LR)。
图5 我们的方法在有和没有左右一致性的对比。
我们的一致性项在物体边缘上有卓越的表现。
上述结果都未经过后续处理。
但是单纯的这种模式下,推测出的视差会展示出“纹理复制”的人工痕迹和深度不连续的误差(图5所示)。
我们通过在对立图像采样训练网络来预测两个视角的视差图来解决这个问题。
这种方式仍然只需要在卷积层输入左目图像,而右目图像只在训练时使用。
通过这种新颖的左右目一致度检查来迫使左右视差的一致,我们能获取更准确的结果。
受DispNet的启发,但是我们对全卷积结构做了一些重要的改动以能够在不需要真实深度数据的情况下训练。
我们的网络由两部分组成,从cnv1到cnv7b的编码器和从upcnv7开始的解码器,您可以在文末补充材料中详细了解。
解码器在编码器的激活块使用跳连接的方式来解决更高分辨率的细节。
我们输出四个尺度的视差预测(从disp4到disp1),依次在空间分辨率上加倍。
尽管我们只输入单张图像,我们的网络可以对每一个尺度的左目到右目和右目到左目视差图作出预测。
3.3.训练损失函数
我们针对每一个输出尺度s定义了损失函数C s,并获得了总损失函数C = s。
我们的损失函数模块将C s定义为三部分之和,
(1)
其中C ap使重构的图像更贴近相应的输入训练集,C ds使视差更平滑,C lr使左右视差趋向一致。
每一部分都
包含了左右目图像的变量,但是只有左目图像是供给卷积层的。
我们用左目图像来表现损失函数中每一部分(),右目图像版本则在对立方向采样。
外表匹配损失函数在训练过程中,网络通过从相对的立体图像中采样像素来学习生成图像。
我们的图像生成模型使用来自空间变压器网络(STN)的图像采样器,使用视差图对输入图像进行采样。
STN使用双线性采样,其中输出像素是四个输入像素的加权和。
与其他方法不同的是,我们所使用的双线性采样器在局部完全可辨识,并无缝地集成到我们全卷积结构中。
这意味着我们不需要对成本函数进行任何简化或近似。
我们将L1和一个单独尺度SSIM项结合为我们的光学图像重构函数C ap,它比较了输入图像和它的重构图像,其中N是像素数量,
在这里,我们使用一个简化的SSIM 3×3块代替高斯过滤,并设置α= 0.85。
视差平滑化损失函数我们通过在视差梯度∂d上添加L1惩罚函数以促进视差的局部平滑。
考虑到图像梯度处经常发生深度不连续,我们使用图像梯度∂I作为边缘敏感项给这个函数加权。
左右视差一致损失函数为了生成更精确的视差图,我们训练我们的网络来预测左右图像的视差,但是只将左目图像作为网络卷积部分的输入。
为了保证一致性,我们的模型中引入了一个L1左右视差一致性惩罚函数。
这项工作试图使左视差图等于投影的右视差图,
和其他项一样,这项工作是右视差的镜像,并将在各个输出尺度被评估。
在测试时,我们的网络在最精细的尺度上预测了与输入图像分辨率相同的左目图像d l的视差。
使用已知的摄像机基线和训练集的焦距,我们可以将视差图转换为深度图。
虽然我们也在训练中估计了右视差图d r,但没有在测试时使用。
4.结果
在这里,我们将比较我们的方法与有监督和无监督的单视角深度估计方法的表现。
我们对校正后的立体图像对进行训练,而不需要任何真是深度数据形式的监督。
现有的一些单视角数据集如[41,45],缺少立体对,所以并不适合上述评估。
我们选用流行的KITTI 2015数据集来评估我们的方法。
为了评估我们的图像生成模型,我们与使用了Deep3D图像生成模型和添加了平滑限制的Deep3Ds图像生成模型的我们算法的变体进行比较。
我们也与缺少左右一致性限制的模型比较来进行评估。
4.1.实现细节
这个在TensorFlow上实现的网络含有31,000,000个可训练参数,在一个Titan X GPU上以50 epoch 来训练由30,000张图像组成的数据集需要花25小时。
推测速度是很快的,对于一个512*256的图像,包括转换时间和来自GPU的时间在内只需要不到35毫秒,或者说每秒多于28帧。
请在本文的补充材料和源码中了解更多细节。
在优化过程中,我们将不同损失函数的权重设置为=1,=1。
通过放缩的sigmoid非线性函数将视差输出限定为0~,其中是0.3倍的给定输出尺度下的图像宽度。
作为多尺度输出的结果,在每个尺度上,相邻像素的典型视差在每个尺度间相差2倍(因为我们向上采样时输出是原来的2倍)。
为了修正它,我们用r在每一个尺度下放缩视差平滑项,以在每一个级别达到相同的平滑性。
因此=0.1/r,其中r 是相对于传入网络的输入图像的分辨率在相应层的降尺度系数。
对于网络中的非线性,我们使用指数线性单位,而不是常用的整流线性单位(ReLU)。
我们发现,ReLUs 倾向于过早地将中等尺度预测视差固定为单个值,导致后续的改进变得困难。
随后,我们将通常的解压缩替换为伴随了卷积的最近邻居的上采样。
我们从最初草样的50 epochs,批量大小为8,和β1=0.9 , β2 =0.999 , =10−8的Adam开始训练。
我们最初采用λ=10-4的学习速率并在前30次epochs保持一致,直到每10次epoch进行一次折半至结束。
我们起初和[39]中一样,使用渐进式更新计划来实验,这种办法先
优化了低分辨率的图像尺度。
然而我们发现,同时优化所有四个尺度可以得到更稳定的收敛。
同样,我们对每个尺度的损失使用相同的加权,因为我们发现不同的加权会导致不稳定的收敛。
我们同样对批量标准化进行了实验,但是发现它没有产生显著的改善,最终排除了它。
数据增强是动态进行的。
我们以50%的几率对输入图像进行水平翻转,同时注意两个图像的交换,以使它们相对于彼此处于正确的位置。
我们也以50%的几率添加了色彩加强,分别在每个色彩通道通过从均匀分布的采样来执行随机的伽马,亮度和颜色的偏移,范围分别为[0.8,1.2],[0.5,2.0]和[0.8,1.2]。
Resnet50 和[33]类似的,为了保全完整性,我们对模型的变体使用Resnet50作为编码器,其他的结构、参数和训练步骤保持不变。
这个变体含有48,000,000个可训练参数,并且在结果表中由resnet表示。
后处理为了减少立体干扰在图像的左侧和遮挡物的左侧都产生了视差坡度的影响,对输出进行了最后的后处理步骤。
对于测试时的一个输入图像I,我们也会计算它水平翻转后的图像I’的视差图。
通过将这个视差图翻转回去,我们得到了视差图,它与d l一致,但是视差坡度是在图像和遮挡物的右侧。
我们将以上视差图结合的到最后的结果,其中图片最左部的5%使用,最右部的5%使用d l。
最红视差图的中间部分使用d l和的平均值。
经过这一步最终后处理,我们以双倍测试时间为代价,得到了更准确和更少人工痕迹的结果。
在结果表中我们使用pp来表示这种方法。
4.2.KITTI
我们在KITTI数据集上使用了两种测试分割来达到和现有工作的对比。
在未加工形式下,KITTI有61个场景下的42382个矫正立体对,典型图片大小为1242*375个像素。
KITTI分割首先比较我们的方法在不同图像生成模型和不同训练集下的变体。
我们在作为官方KITTI训练集一部分的覆盖了28个场景的200个高质量视差图上进行评估。
剩余的33个场景包含30159张图想,其中29000张用于训练,其余用于评估。
尽管这些视差图的质量比重新投影的velodyne激光深度值要高,但CAD模型是嵌在移动的车辆上的。
这些CAD模型会导致透明表面(如车窗)上模糊的视差值,以及在CAD 模型不能完全对齐图像的物体边界处产生问题。
另外,KITTI数据集中存在的最大深度约为80米,我们将
所有网络的最大预测值上限为这个值。
最终结果使用来自[10]的深度矩阵和来自KITTI的D1-all视差误差计算。
来自[10]的矩阵将既考量与真实深度数据的米数误差,又考量在正确值阈值内的深度所占的比例。
在视差图内给定了真实数据的情况下,测算深度空间的误差导致精确度问题是很重要的。
特殊的,无阈值测量会对因为在小视差值上的预测误差而导致的深度上的大误差敏感。
表1 不同图像生成模型的对比。
结果来自于KITTI2015的200组立体视差图的训练。
K:KITTI数据集。
CS:Cityscapes。
我们的模型在伴随左右一致性时表现最好,并在加入Cityscapes之后进一步提升。
最后一行展示了我们的模型以两张图象未输入和测试而非一张图像的表现。
在表1中我们可以看到,包括微弱的缩放性质在内(就分辨率和它所能代表的差异数量而言),当使用与我们同样的网络结构训练时,Deep3D图像生成模型表现很差。
从图6中我们可以看出,Deep3D生成了看似合理的图像重构,但是输出视差却次于我们的。
我们的损失函数比Deep3D基线和增加了左右一致性检查的所有方式的都表现更好。
在图5中,我们在对比中展示了一些放大后的图片,清楚地表明左右一致性检查的加入改善了结果的视觉质量。
通过额外的、在众多的德国城市中捕捉的包含有22973个训练立体对的Cityscapes数据集的预训练之后,我们的结果有了进一步提高。
相比于KITTI数据集,这个数据集在相同设定上带来了更高的分辨率、图像质量和多样性。
我们裁剪了输入图像,只保留图像的前80%,去掉了输入图像中非常反光的汽车罩。
有意思的是,我们在Cityscapes数据集上训练的模型并没有在数值上表现很好。
这可能是由于两个数据集之间的摄像机校准差异造成的,但是对与测试集相关的数据进行微调有明显的优势。