1 Intro
基于学习的方法对深度估计有非常好的效果,然而现存的方法都是监督学习需要大量的训练数据,本文作者提出一种单视图的深度估计方法,且不需要ground truth depth data。
2 Method
建立一种training loss去check左右一致性,可以使训练在不需要ground truth的监督。
2.1 Depth Estimation as Image Reconstruction
这里的想法是,给定一对经过校准的双目摄像机,如果能够学习一个从一个图像重建到另一个图像的函数,那么就已经学习了一些关于这些图像的三维形状的信息。
那么该方法就是试图找到一个dense correspondence field dr,通过左图可以重建右图。d就对应于image的disparity(这就是模型要去预测的每个像素的标量值),通过disparity来重建depth。
2.2 Depth Estimation Network
该网络可以通过左视图同时推断left-to-right和right-to-left的disparities,并且通过使左右disparities达到一致性来增强深度估计的效果。
Naively learning:通过从左图像来生成右视图disparity会并且与左视图的采样共同产生output即右视图。
No LR:但是作者希望得到的disparity与input左视图对应,因此生成left view aligned disparity map,但是问题是这样会在深度不连续的地方产生失真和错误,下图可以看出:
Ours(即本文提出的模型):通过采样对面视角input image,利用left image input来生成两个视角的disparity map可以解决上面提到的问题。还是只需要input left image,让生成的左右disparity map一致,可以提高depth预测结果的准确度。
网络的卷积层有两个部分,encoder和decoder:
作者在四个不同的尺度上输出预测的disparity,并且在不同空间分辨率子序列尺度上double。
2.3 Training Loss
这里的loss有三部分:
Cap是使重建的图像和对应的input图像相似,Cds加强disparity平滑,Clr控制左右disparity的一致性。
Appearance Matching Loss
训练过程中,网络使用image sampler进行采样(来自于LTN的bilinear sampler),本文的bilinear sampler是局部完全可微的,可以无间隙地整合到全卷积网络架构里面。
作者使用L1范式和SSIM作为cost,比较input image和重建的结果:
这里N是像素数,SSIM为33的滤波器,设置α为0.85。
Disparity Smoothness Loss
使用L1范式约束,使disparity局部平滑,处理图像梯度上的深度不连续。
Left-Right Disparity Consistency Loss
网络只有left view作为input,为了达到一致性,在左右一致性上施加L1约束,这个cost是为了使左视图disparity map与投影的右视图disparity map相等。
3 Results
作者比较了该方法在监督和非监督情况下的表现;并且评估该方法的变形,使用原始的deep3D模型和修改的deep3Ds模型(加了平滑约束);还比较了使用左右一致性和未使用的情况。K表示KITTI数据集,CS表示Cityscapes数据集。
3.1 Implementation Details
优化时,设置αap =1 and αlr =1。可能的输出视差图用缩放的sigmoid单元限制在0到 dmax 之间,而 dmax=0.3 给定输出尺度的宽度。
对于多尺度output,相邻像素的disparity会被一个因子差分(像用factor 2进行上采样),为了修正这个问题,作者缩放平滑项αds=0.1/r,从而在每一个尺度上都有相同的平滑性,其中r是这一层相对于输入图像的分辨率的下采样因子。
作者用了指数线性单元而不是常用的Relu。作者发现Relu倾向在中间尺度过早固定预测视差到一个值,这样使子序列提升困难。
作者同样使用了resnet50作为模型的encoder,其余结构不变,结果展示在上表。
Post processing
为了减少立体遮挡(这会在图像和遮挡的左边产生视察坡)的影响,作者做了一个后处理。在测试时,对input image的水平翻转计算disparity map d’,再将d’翻转回去为d’’, 这个图和d对齐,而且视差坡是在遮挡的右边也在图像的右边。作者结合了两个视差图组成最后的结果(用d’’的左边5%和d的右边5%),最终视差图的中间部分则是 d和d’的平均。后处理操作提高了准确度,降低了人工制作的感觉。将这个结果用PP表示在表中。
3.2 KITTI
将数据集分成两部分,用于不同的测试比较。
KITTI Split
尽管disparity images的质量要比反投影的velodyne激光深度值好,但他们有CAD模型插入到移动汽车中,这些CAD模型会导致透明表面(例如车窗)上的视差值不明确,并导致对象边界的CAD Model无法与图像完全对齐。
在上表中可以看到,除了具有较差的缩放特性(就分辨率和它可以表示的差异数量而言)之外,使用相同的网络架构,deep3d模型的性能也较差。
从上图可以看出deep3d模型产生了看起来不错的图像重建结果,但是在disparity上与本文提出的方法相差很多。本文模型的loss使其表现出优于deep3d和其他使用左右一致性方法的性能。
从下图可以看出左右一致性带来了更好的视觉效果,在对象边界上有更好的性能。
该模型可通过在Cityscapes数据集上预训练进一步提高,但是当单独在Cityscapes训练并没有很好的效果,这可能是因为两个数据集上不同的相机校准。
Eigen Split
这里就是与其他的一些方法比较。为了生成ground truth,作者通过velodyne laser反投影3d可视点到input的相机。那么会由于Velodyne的旋转,车和周围物体的移动和因为对象边界的遮拦导致的深度读取错误而产生误差。因为使用的图像大小不一样,其他方法的结果会与原始结果有区别。结果如下图:
3.3 Stereo
作者同样使用了该网络的立体版本,input将左右视图连接在一起。这样的结果要比该模型的单目模型表现的好。下图可以看到,stereo生成的差异图包含了更多的细节。
3.4 Make 3D
在Make 3D数据集上作者将该网络的output与其他方法比较,结果如下(*为监督学习):
3.5 Generalizing to Other Datasets
用一些别的数据集在模型上测试,以下是在Cityscapes、CamVid、urban dataset上面的结果:
4 Limitation
即使有后处理和左右一致性提高了结果的质量,但因为在遮拦区域的像素不可见,还是能在结果上遮拦边界看到人为因素的感觉。
另外,本文的方法需要修正的、对应的立体对进行训练,因此不能用单视图的数据集训练。
并且该方法依靠图像重建相关方法,对于反光的和透明的表面会有不一样的深度值。