深度估计文章阅读-Structure-guided ranking loss for single image depth prediction

简介:

本文来自CVPR2020,工作的核心价值点:1、提出了一种结构引导排序损失函数(structure guided ranking loss,SR),使用两种采样策略用于单目深度估计【在正文中又说是使用了3种,一种随机采样,两种本文提出的策略】;2、基于互联网立体照片(stereo photos)构建一个包含21K的相对深度数据集。

深度估计的结果如图1,个人觉得本文深度估计的主要优势体现在:1、基于21k的数据训练得到的模型效果接近SOTA的MiDaS模型效果,说明泛化性能挺好;2、通过SR损失函数,得到边缘锐利深度估计结果。

原文:http://openaccess.thecvf.com/content_CVPR_2020/papers/Xian_Structure-Guided_Ranking_Loss_for_Single_Image_Depth_Prediction_CVPR_2020_paper.pdf

补充材料:http://openaccess.thecvf.com/content_CVPR_2020/supplemental/Xian_Structure-Guided_Ranking_Loss_CVPR_2020_supplemental.pdf

疑问:

1、文章没有详细介绍实现过程,也没有开源模型(coming soon...),估计复现难度较大,难以像MiDaS那样成为大家对比的标杆;

2、没有介绍模型性能,从backbone是ResNet50和需要Mask-RCNN做实例分割大概可以推测出,大概率推理时间较差,难以实时。

接下来将简单的根据自己的理解,梳理一下文章

Introduction

常见的数据集主要是路(kitti)和室内(nyu_v2, ScanNet),存在数据集多样性问题,导致训练的模型泛化能力差。为了提升数据集多样性,使用互联网立体照片和3D电影来构造大型视差数据集 ,但是立体照片和3D电影为了更好的观影体验,对原始数据调整虚拟基线,使用这种数据估计视差得到的深度图是在一个仿射变换尺度下的,我们称之为伪真值深度数据(pseudo-depth data)。为此有些文章提出了仿射不变损失函数(affine-invariant loss),但基于仿射不变损失函数估计得到的深度图存在边缘模糊和丢失细节的问题。

之前有文章提出基于点对损失函数(pair-wise loss[这个翻译可能不是很准确])来学习伪真值深度数据,相比于基于逐像素回归损失函数(pixel-wise regression loss),通过对稀疏点对来优化预测的深度图。在实验中发现点对的采样策略对最后模型预测深度图的效果有巨大的影响,为此本文提出边缘引导采样(Edge-Guided Sampling)和实例引导采样(Instance-Guided Sampling)。边缘引导采样主要可以克服图像纹理对深度预测的影响,实例引导采样可以提升突出对象的结构边缘精度(例如,预测的深度图中人头部分通常会被估计错误‘cut off’,如图下所示)

 深度估计常见的人头部估计错误的问题

Structure-Guided Ranking Loss for Monocular Depth Prediction

DIW这篇文章提出了pair-wise ranking loss用来训练伪真值深度数据(其是逆深度图),对于一个点对[p_0, p_1],定义如下:

其中 l (loss)是一个标签,其定义如下:

其中 tao 是容忍阈值,设置为0.03,如果p_0和p_1的深度值很接近,则l=0,表示损失函数期望预测值p_0和p_1尽可能相同;反之,超过一定阈值之后,p_0和p_1必须差异足够大才能够最小化损失函数【感觉原文这个描述不大对,但超过阈值后,l的值就是±1,与p_0和p_1本身多大没有关系,待以后理解后再补充】。将给定的一个点对集合求和取平均得到Lrank(P),如下:

相比于之前的文章,采用随机采样获得点对集合用于计算损失函数,我们提出使用边缘引导和实例引导两种方式。

Edge-guided Sampling

由于深度图通常大片是平滑连续的,只有在少数边缘区域是呈现突变,所以使用随机采样的方式,其实是浪费了大量的监督信息在连续平滑的区域。

如Figure 2所示,如果只采样图像(彩色图)边界两个点,预测得到的深度图容易出现光环效应(Halo artifacts),为此我们使用采样四点的方法。具体来说就是,对于给定的一张彩色图,将其转换为灰度图,使用Sobel算子,计算x方向和y方向的梯度图Gx和Gy,以及梯度强度图G(计算方法,可以参考:https://blog.csdn.net/qq_37124237/article/details/82183177),然后根据G和设定的阈值,我们得到边缘图E

对于边缘图E的每一边缘点e=(x,y),我们采样4个点[(x_k, y_k), k = a,b,c,d],要求采样点a,b在边缘一侧,c,d在边缘另外一侧,且满足如下公式要求:

采样算法流程如下:

Instance-Guided Sampling

使用上面Edge-Guided Sampling方式,依然会存在缺失重要的边缘的问题,导致显著性物体深度估计错误,例如人头深度估计错误。为此使用实例分割mask来采样,和前面类似,也是采样4个点,其中(a,b)在mask外,(c,d)在mask内部,(b,c)作为跨边界的点对。具体来说,本文使用Mask R-CNN来进行分割,为了克服欠分割的问题,将分割的mask往外膨胀一些。

Model Training

(终于到激动人心的炼丹环节,然鹅,论文里面写得太简洁,没有细节。。。)

点对采样方法:由于前面提到的两种采样策略难以有效保留全局结构,如地面,墙等,为此我们结合边缘引导采样、实例引导采样和随机采样三种方式。

损失函数,参考之前的文章证据多尺度尺度不变梯度损失函数(Lgrad),在具体实现中,使用4个尺度金字塔,定义R_i = p_i - p_*_i,即预测值减去真值,从而有:

结合排序损失函数和梯度损失函数,得到最后的损失函数:

模型使用ResNet50作为基础骨架,训练数据大小为448*448

Dataset

本节将介绍数据集构建。

收集互联网上的高分辨率立体图像,使用FlowNet2.0生成视差图,作为训练的GT.

Experiment

在本文提出的数据集上进行训练,在公开的数据集上进行验证。

定性实验

定量实验

Conclusion

基于立体照片和视频生成的视差数据可以作为有监督的深度估计的一种重要数据来源,但是这种方法得到的在一个仿射变换尺度下近似正确的逆深度,本文通过提出一种结构引导的排序损失函数,来学习深度估计中深度不连续性(深度图内边缘突变)问题,从定性结果中可以看到本文提出的模型,可以准确的估计树枝等细节,也可以准确估计人头等常见错误的问题。

你可能感兴趣的:(深度估计文章阅读-Structure-guided ranking loss for single image depth prediction)