论文笔记:Point Cloud Forecasting as a Proxy for 4D Occupancy Forecasting(1)
方法
车队会记录大量未标注的序列LiDAR点云X−T:T\textbf{X}_{-T:T}X−T:T,同时记录每一帧的传感器位置o−T:T\textbf{o}_{-T:T}o−T:T,我们将X−T:0\textbf{X}_{-T:0}X−T:0和o−T:0\textbf{o}_{-T:0}o−T:0记录为历史部分,X1:T\textbf{X}_{1:T}X1:T和o1:T\textbf{o}_{1:T}o1:T记录为未来部分
标准的点云预测办法ggg,将过去点云作为输入,来预测未来点云:X^1:T=g(X−T:0)\hat{\textbf{X}}_{1:T}=g(\text{X}_{-T:0})X^1:T=g(X−T:0)(1)(1)(1)
我们的方法将未来LiDAR点云x∈Xt,t=1...T\textbf{x} \in \textbf{X}_t, t = 1 ... Tx∈Xt,t=1...T重参数化成一条射线:该射线从传感器位置ot\textbf{o}_tot出发,沿方向d\textbf{d}d,经过距离λ\lambdaλ后到达终点x\textbf{x}x:x=ot+λd,x∈Xt\textbf{x} = \textbf{o}_t + \lambda \textbf{d}, \textbf{x} \in \textbf{X}_tx=ot+λd,x∈Xt(2)(2)(2)
我们的方法fff在未来时间ttt选取一条通过原点和方向(ot,d)(\textbf{o}_t, \textbf{d})(ot,d)进行参数化的射线。然后在给定过去点云X−T:0\textbf{X}_{-T:0}X−T:0和传感器位置o−T:0\textbf{o}_{-T:0}o−T:0的情况下,预测射线经过距离λ^\hat{\lambda}λ^:λ^=f(ot,d;X−T:0,o−T:0)\hat{\lambda}=f(\textbf{o}_t, \textbf{d}; \textbf{X}_{-T:0}, \textbf{o}_{-T:0})λ^=f(ot,d;X−T:0,o−T:0)(3)(3)(3)
公式(3)与Nerf类似,Nerf预测颜色,本文预测深度
Spacetime (4D) occupancy
将spacetime occupancy定义为特定时间点的3D位置占用状态。使用z\textbf{z}z来表示真实的spacetime occupancy,由于视线可见性的限制,可能无法直接进行观测。给定一个有界时空4D volume V\mathcal{V}V,该volume被离散为时空voxel v\textbf{v}v。可以使用z[v]∈{0,1},v=(x,y,z,t),v∈V\textbf{z}[\textbf{v}] \in \{0, 1\}, \textbf{v}=(x, y, z, t), \textbf{v}\in \mathcal{V}z[v]∈{0,1},v=(x,y,z,t),v∈V(4)(4)(4)来表示时空voxel grid V\mathcal{V}V中voxel v\textbf{v}v的占用状态,该状态可以是占用(1)或者空闲(0)。
我们通过学习一个占用预测网络hhh(由w\textbf{w}w进行定义),根据历史点云和传感器位置来预测离散化的四维时空占用:z^=h(X−T:0,o−T:0;w)\hat{\textbf{z}}=h(\textbf{X}_{-T:0}, \textbf{o}_{-T:0}; \textbf{w})z^=h(X−T:0,o−T:0;w)(5)(5)(5),其中z^[v]∈R[0,1]\hat{\textbf{z}}[\textbf{v}] \in \mathbb{R}_{[0, 1]}z^[v]∈R[0,1]表示预测的占用
Depth rendering from occupancy
给定射线query x=o+λd\textbf{x}=\textbf{o}+\lambda \textbf{d}x=o+λd,目标是预测λ^\hat{\lambda}λ^与真实λ\lambdaλ尽可能接近。我们首先通过voxel遍历计算其与占用grid的交集(Fig 4)。假定射线和列表voxels{v1...vn}\{\textbf{v}_1... \textbf{v}_n\}{v1...vn}相交。假设射线只能停在voxel的边界或者无限远处,从而对射线空间进行离散化,我们将voxel vi\textbf{v}_ivi解释为从voxel vi−1\textbf{v}_{i-1}vi−1发出的射线在voxel vi\textbf{v}_ivi停止的条件概率,可以写为:pi=∏j=1i−1(1−z^[vj])z^[vi]p_i = \prod_{j=1}^{i-1} (1 - \hat{\textbf{z}}[\textbf{v}_j]) \hat{\textbf{z}}[\textbf{v}_i]pi=∏j=1i−1(1−z^[vj])z^[vi],其中pip_ipi表示射线停在voxel vi\textbf{v}_ivi的概率。现在可以通过计算期望中的停止点来渲染距离λ^=f(o,d)=∑i=1npiλ^i\hat{\lambda} = f(\textbf{o}, \textbf{d}) = \sum_{i=1}^{n}p_i\hat{\lambda}_iλ^=f(o,d)=∑i=1npiλ^i,λ^i\hat{\lambda}_iλ^i表示voxel vi\textbf{v}_ivi的停止距离。
从上式可看出不考虑射线停在voxel grid外面的情况,该停止距离未定义(将在无限远处停止)。在训练时,在真实的grid外部设置一个虚拟的停止点:
λ^=f(o,d)=∑i=1npiλ^i+∏i=1n(1−pi)λ^n+1\hat{\lambda} = f(\mathbf{o}, \mathbf{d}) = \sum_{i=1}^{n} p_i \hat{\lambda}_i + \prod_{i=1}^{n} (1 - p_i) \hat{\lambda}_{n+1}λ^=f(o,d)=∑i=1npiλ^i+∏i=1n(1−pi)λ^n+1,其中λ^n+1=λ\hat{\lambda}_{n+1} = \lambdaλ^n+1=λ.
Loss function
使用L1 loss来训练occupancy prediction network:
L(w)=∑(o,λ,d)∈(X1:T,o1:T)∣λ−f(o,d;X−T:0,o−T:0,w)∣L(\mathbf{w}) = \sum_{(\mathbf{o}, \lambda, \mathbf{d}) \in (\mathcal{X}_{1:T}, \mathbf{o}_{1:T})} \left| \lambda - f(\mathbf{o}, \mathbf{d}; \mathbf{X}_{-T:0}, \mathbf{o}_{-T:0}, \mathbf{w}) \right|L(w)=∑(o,λ,d)∈(X1:T,o1:T)∣λ−f(o,d;X−T:0,o−T:0,w)∣