PSEUDO-LIDAR++:自动驾驶中 3D 目标检测的精确深度-深度校正

时间:2024-01-26 13:38:59

SDN 显着改进了深度估计并更精确地渲染了对象轮廓(见下图)。
在这里插入图片描述
视差 cost volume(左)与深度 cost volume(右)。该图显示了从 LiDAR(黄色)和立体(紫色)获得的 3D 点,对应于 KITTI 中的一辆汽车,从鸟瞰图(BEV)看到的。差异 cost volume 中的点被拉长且嘈杂;而来自深度 cost volume 的点则忠实地捕捉到汽车轮廓。

然而,由于像素的离散性质,立体图像存在一个基本限制:视差(即相应像素之间水平坐标的差异)必须在单个像素的级别上进行量化,而深度是连续的。尽管可以通过更高分辨率的图像来减轻量化误差,但计算深度预测成本会随着分辨率的增加而呈三次方变化,从而突破了自动驾驶汽车中 GPU 的极限。

因此,论文探索了一种混合方法,利用具有极其稀疏(例如 4 束)但精确的深度测量的廉价 LiDAR 来纠正这种偏差。我们注意到,此类传感器太稀疏,无法捕获物体形状,并且不能单独用于检测。然而,通过将激光雷达点投影到图像平面上,我们可以获得一小部分“地标”像素的精确深度。

论文提出了一种基于图的深度校正(G​​DC)算法,该算法有效地结合了渲染对象形状的密集立体深度和稀疏的精确激光雷达测量。从概念上讲,我们期望校正后的深度图具有以下属性:全局上,与 LiDAR 点关联的地标像素应具有精确的深度;在本地,应保留由相邻 3D 点捕获的、从输入深度图反投影的对象形状(参见公式 1)。

输入匹配

通过立体深度估计将来自 LiDAR (L) 和 Pseudo-LiDAR (PL) 的两个点云作为输入。后者是通过将深度为 z z z 的像素 ( u , v ) (u, v) (u,v) 转换为 3D 点 ( x u , y v , z ) (x_u, y_v, z) (xu,yv,z) 来获得的。
首先,通过 PL 点云中的有向 K-最近邻 (KNN) 图(使用加速 KD 树)来表征局部形状,该图将每个 3D 点与其具有适当权重的 KNN 连接起来。同样,可以将 3D LiDAR 点投影到像素位置 ( u , v ) (u, v) (u,v) 上,并将它们与相应的 3D 立体点进行匹配。不失一般性,假设我们获得了前 n n n 个点的“地面实况”LiDAR 深度,而其余 m m m 点则没有地面实况。我们将 3D 立体深度估计称为 Z ∈ R n + m Z ∈ \R ^{n+m} ZRn+m,将 LiDAR 深度地面实况称为 G ∈ R n G ∈ \R ^n GRn

边权重

为了构建 3D 的 KNN 图,忽略前 n n n 个点的 LiDAR 信息,只使用它们在 Z Z Z 中预测的立体深度。让 N i \mathcal {N}_i Ni 表示第 i i i 个点的 k k k 个邻居的集合。此外,令 W ∈ R ( n + m ) × ( n + m ) W \in \R ^{(n+m)×(n+m)} WR(n+m)×(n+m) 表示权重矩阵,其中 W i j W_{ij} Wij 表示点 i i i j j j 之间的边权重。受到流形学习先前工作的启发,选择权重作为系数,从 N i \mathcal {N}_i Ni 中任何点的邻居深度重建任何点的深度。可以通过以下约束二次优化问题来求解这些权重:
W = arg min W ∣ ∣ Z − W Z ∣ ∣ 2 2 , s . t . W 1 = 1   a n d   W i j = 0  if  j ∉ N i . (7) \tag 7 W = \text{arg min}_W ||Z-WZ||_2^2, s.t. W\boldsymbol 1= \boldsymbol 1 \space and \space W_{ij} = 0 \space \text{if}\space j \notin \mathcal {N}_i. W=arg minW∣∣ZWZ22,s.t.W1=1 and Wij=0 if j/Ni.(7)

这里 1 ∈ R n + m \boldsymbol 1 \in \R^{n+m} 1Rn+m表示全1向量。只要我们选择 k > 3 k > 3 k>3 并且点处于一般位置,就有无限多个满足 Z = W Z Z = WZ Z=WZ 的解,并且论文选择具有最小 L2 范数的解(通过轻微的 L2 正则化获得)。

深度校正

将校正后的深度值表示为 Z ′ ∈ R n + m Z^{'}∈ \R ^{n+m} ZRn+m,其中 Z ′ = [ Z L ′ ; Z P L ′ ] Z^{'} = [Z^{'}_L;Z^{'}_{PL}] Z=[ZL;ZPL] Z L ′ ∈ R n Z^{'}_L \in \R^{n} ZLRn Z P L ′ ∈ R m Z^{'}_{PL} \in \R^{m} ZPLRm ,其中 Z L ′ ∈ R n Z^{'}_L \in \R^{n} ZLRn 是具有 LiDAR 地面实况的点的深度值,否则为 Z P L ′ ∈ R n Z^{'}_{PL} \in \R^{n} ZPLRn
对于 LiDAR 测量的 n n n 个点,将深度更新为(地面实况)值 Z L ′ = G Z^{'}_L = G ZL=G 。然后,在给定 G G G W W W 中编码的加权 KNN 图的情况下求解 Z P L ′ Z^{'}_{PL} ZPL 。具体来说,更新剩余深度 Z P L ′ Z^{'}_{PL} ZPL,使得任何点 i i i 的深度仍然可以使用学习的权重 W W W 以高保真度重建为其 KNN 深度的加权和;即,如果点 i : 1 ≤ i ≤ n i : 1 ≤ i ≤ n i:1in 移动到新的深度 G i G_i Gi,则 N i \mathcal {N}_i Ni 中的邻居也必须进行校正,使得 G i ≈ ∑ j ∈ N i W i j Z j ′ Gi ≈ \sum_{ j∈ \mathcal {N}_i} W_{ij}Z_j^{'} GijNiWijZj。此外,必须纠正邻居的邻居,并且这几个 n n n 点的深度会传播到整个图。我们可以通过另一个二次优化直接求解最终的 Z ′ Z^{'} Z
Z ′ = arg min Z ′ ∣ ∣ Z ′ − W Z ′ ∣ ∣ 2 , s . t .   Z 1 : n ′ = G (8) \tag8 Z^{'} = \text{arg min}_{Z^{'}}||Z^{'}-WZ^{'}||^2, s.t. \space Z_{1:n}^{'} = G Z=arg minZ∣∣ZWZ2,s.t. Z1:n=G(8)

为了说明校正过程,想象一下最简单的情况,其中仅单个点( n = 1 n = 1 n=1)的深度更新为 G 1 = Z 1 + δ G_1 = Z_1 + δ G1=Z1+δ。方程 8 的新最佳深度是类似地移动所有剩余点,即 Z ′ = Z + 1 δ Z^{'} = Z + \boldsymbol 1δ Z=Z+1δ:由于 Z = W Z Z = WZ Z=WZ W 1 = 1 W \boldsymbol1 = \boldsymbol1 W1=1,必须有 W ( Z + 1 δ ) = Z + 1 δ W(Z + \boldsymbol 1δ) = Z + \boldsymbol 1δ W(Z+1δ)=Z+1δ

n > 1 n > 1 n>1 的设置中,最小二乘损失确保不同 LiDAR 深度估计之间的软扩散。方程 7 和方程 8 中的两个优化问题都可以使用稀疏矩阵求解器准确有效地求解。

从基于图的流形学习的角度来看,GDC 算法让人想起局部线性嵌入,并用地标来指导最终解决方案。图 1 生动地说明了如何使用一些稀疏 LiDAR 测量值(黄色)来校正 KITTI 数据集中汽车的 SDN(紫色)的初始 3D 点云。得到的点(蓝色)位于地面实况框内,清楚地显示汽车的轮廓。图 4 显示了 GDC(蓝色)相对于纯 SDN 深度估计的额外改进。误差(仅在非地标像素上计算)在整个图像上进行校正,其中许多区域没有 LiDAR 测量。这是因为伪 LiDAR 点云足够密集,并且我们选择足够大的 k k k(实际上,我们使用 k = 10),这样 KNN 图通常是连通的(或由几个大的连通分量组成)。对于汽车等物体,GDC 的改进要明显得多,因为这些物体通常会被四个 LiDAR 光束接触,并且可以得到有效校正。