任务

将相机参数与图像线索解耦,构建出即插即用的地面嵌入插件,从而提升单目深度估计的精度与泛化性。

背景

单目深度估计是一个ill-posed的问题,不仅在几何模糊性上,还在相机的内外参,而本文想要解决的问题主要是后者。不同尺度和深度的物体可能会被拍摄成一样的图片;而同一物体也可能因为内外参的不同而被拍摄成不同的图片。

Untitled

有一些工作在单目绝对深度上有所进展,但是它们本质上是针对特定训练数据上的图像线索(例如,对象比例、明暗和纹理梯度)和相机参数的特定组合而定制的,这强烈限制了它们的泛化能力。

一个工作(How do neural networks see depth in single images?)表明,物体的地面接触点主要用于估计其深度;另一个工作(Visualization of Convolutional Neural Networks for Monocular Depth Estimation)则表明,位于消失线(vanshing line)附近的场景是估计深度的重要线索。

最早的单目深度估计网络,使用两个网络从粗到细地回归出深度,同时使用了尺度不变损失来减轻尺度模糊问题。后续一些工作将该任务建模为序数回归问题,考虑离散深度之间的顺序信息,使用了新颖的序数损失,这后面演变为了adaptive discrete bins with Transformers的形式。但是这些工作都没有考虑相机参数对单目深度估计的影响。

本文通过相机参数,计算出对应的地面深度,并通过ground attention map,确定地面的具体范围,这一定程度上促进了地面接触点的学习,同时定位了消失线附近的区域,这一定程度提高了单目深度估计的精度;显式利用相机参数的方式,可以将其与图像线索解耦,从而提高单目深度估计在不同数据集、参数下的泛化性。

Pipeline

Untitled

本文的工作被设计成plug and play的插件,嵌入到一般的encoder-decoder的架构中,这种架构可以被任意的CNN/Transformer所替代。

地面深度如何计算

在大多数自动驾驶数据集中,都有地面的出现。如果能对地面的深度进行准确地估计,就能将其作为强烈的先验,缓解尺度模糊的问题,从而提高性能。地面深度计算的前提是:我们能够知道道路在世界坐标系中的高度(y值)。

Untitled

世界坐标系中的一个点$(x_w,y_w,z_w)$与像素平面点$(u,v)$的对应关系是:

Untitled

$z_c$是这个点相对于相机的深度, $\bold K$是相机内参, $[\bold R \bold T]$是相机外参。可以将这个式子重写为:

Untitled

将 $\bold R^{-1}\bold K^{-1}$当作矩阵$\bold A=(a_{ij})\in\bold R^{3\times 3}$,将$\bold R^{-1}(-\bold T)$当作矩阵$\bold B=(b_{i})\in\bold R^{3\times 1}$。将 $r(u,v,z_c)$视为穿过光心与$(u,v)$的光线中深度为$z_c$的点。那么参数化公式可以表示为: