方法概述
在数据层面,我们利用车队采集的大量未标注 LiDAR 点云序列 $\mathbf{X}{-T:T}$ 以及对应的传感器位姿 $\mathbf{o}{-T:T}$。为了便于建模,将时间轴划分为历史部分 $\mathbf{X}{-T:0}, \mathbf{o}{-T:0}$ 和未来部分 $\mathbf{X}{1:T}, \mathbf{o}{1:T}$。
传统的点云预测方法通常直接以过去时刻的点云作为输入,回归未来时刻的点云坐标: $$\hat{\mathbf{X}}{1:T}=g(\mathbf{X}{-T:0})$$
本文提出了一种不同的视角:将未来时刻 $t$ 的点云 $\mathbf{x} \in \mathbf{X}_t$ 重参数化为一条射线。该射线从传感器位置 $\mathbf{o}_t$ 出发,沿方向 $\mathbf{d}$ 延伸,经过距离 $\lambda$ 后到达终点 $\mathbf{x}$,即满足: $$\mathbf{x} = \mathbf{o}_t + \lambda \mathbf{d}, \quad \mathbf{x} \in \mathbf{X}_t$$
我们的模型 $f$ 在未来时间 $t$ 选取一条通过原点且方向为 $(\mathbf{o}t, \mathbf{d})$ 的射线进行参数化。在给定历史点云和传感器位置的情况下,预测射线经过的距离 $\hat{\lambda}$: $$\hat{\lambda}=f(\mathbf{o}t, \mathbf{d}; \mathbf{X}{-T:0}, \mathbf{o}{-T:0})$$
这个公式与 NeRF 有异曲同工之妙:NeRF 预测颜色,而这里我们预测深度。
时空占用表示
我们将时空占用(Spacetime Occupancy)定义为特定时间点的 3D 位置占用状态。使用 $\mathbf{z}$ 来表示真实的时空占用,由于视线可见性的限制,这部分可能无法直接观测。
定义一个有界的 4D 体积 $\mathcal{V}$,并将其离散化为时空体素 $\mathbf{v}$。我们可以用 $\mathbf{z}[\mathbf{v}] \in {0, 1}$ 来表示体素 $\mathbf{v}$ 的占用状态,其中 $\mathbf{v}=(x, y, z, t)$。值为 1 代表占用,0 代表空闲。
通过学习一个占用预测网络 $h$(由参数 $\mathbf{w}$ 定义),我们可以根据历史点云和传感器位置来预测离散化的四维时空占用: $$\hat{\mathbf{z}}=h(\mathbf{X}{-T:0}, \mathbf{o}{-T:0}; \mathbf{w})$$
其中 $\hat{\mathbf{z}}[\mathbf{v}] \in [0, 1]$ 表示预测的占用概率。
从占用渲染深度
给定查询射线 $\mathbf{x}=\mathbf{o}+\lambda \mathbf{d}$,目标是让预测的深度 $\hat{\lambda}$ 尽可能接近真实值 $\lambda$。首先通过体素遍历计算射线与占用网格的交集。假设射线与一系列体素 ${\mathbf{v}_1...\mathbf{v}_n}$ 相交。
如果假设射线只能停在体素的边界或者无限远处,我们可以对射线空间进行离散化。将体素 $\mathbf{v}i$ 解释为射线从 $\mathbf{v}{i-1}$ 发出并在 $\mathbf{v}i$ 停止的条件概率,可以写为: $$p_i = \prod{j=1}^{i-1} (1 - \hat{\mathbf{z}}[\mathbf{v}_j]) \hat{\mathbf{z}}[\mathbf{v}_i]$$
这里的 $p_i$ 表示射线停在体素 $\mathbf{v}i$ 的概率。现在可以通过计算期望中的停止点来渲染距离: $$\hat{\lambda} = f(\mathbf{o}, \mathbf{d}) = \sum{i=1}^{n} p_i \hat{\lambda}_i$$
其中 $\hat{\lambda}_i$ 表示体素 $\mathbf{v}_i$ 的停止距离。
![图 4: 射线与体素相交示意图]
从上式可以看出,如果不考虑射线停在体素网格外面的情况,该停止距离是未定义的(将在无限远处停止)。在训练时,我们在真实的网格外部设置一个虚拟的停止点来处理这种情况: $$\hat{\lambda} = \sum_{i=1}^{n} p_i \hat{\lambda}i + \prod{i=1}^{n} (1 - p_i) \hat{\lambda}_{n+1}$$
其中 $\hat{\lambda}_{n+1} = \lambda$。
损失函数
最后,使用 L1 Loss 来训练占用预测网络: $$L(\mathbf{w}) = \sum_{(\mathbf{o}, \lambda, \mathbf{d}) \in (\mathcal{X}{1:T}, \mathbf{o}{1:T})} | \lambda - f(\mathbf{o}, \mathbf{d}; \mathbf{X}{-T:0}, \mathbf{o}{-T:0}, \mathbf{w}) |$$


