- He P, Emami P, Ranka S, et al. Learning Scene Dynamics from Point Cloud Sequences[J]. International Journal of Computer Vision, 2022: 1-27.
- Q1 CCF-A
- University of Florida ,CS
主要是做序列点云的场景流估计以及预测任务。之前的场景流估计一般都是t-1帧预测t帧,两帧之间的联系。本文定义了序列多帧联系的场景流估计问题。并且基于这个问题,提出了一些序列学习的方法。
- Intra-Frame Feature Pyramid (IFFP):依照了PointPWC-Net的结构,由于不能直接对点云进行传统卷积,使用了PointConv层进行卷积处理。并且通过多次FPS采样卷积中心,构建了多个金字塔式特征。
- Inter-Frame Spatiotemporal Correlation (IFSC): 为了能找到时空联系,很自然我们希望使时间维度上的receptive field能够尽可能覆盖到整个序列。因此借鉴了传统序列模型的LSTM结构,使用了一个 recurrent cost volume 结构来保存一定的时间信息。
- Multi-scale Coarse-to-Fine Prediction: 两个帧的特征+cost volume的特征生成最低级(粗粒度)的预测点,然后通过Pointnet++的特征上采样传播逐渐生成细粒度特征。
Recurrent Cost Volume
PointPWC-Net(2020)提出的可学习的相继两个点云的matching cost:找到\(p_t^j\)在上一帧中的邻域,并且计算邻域所有点与其的特征差和坐标差。
\[ \operatorname{Cost}\left(p_{t}^{j}, p_{t-1}^{i}\right)=\phi_{\mathrm{MLP}}\left(c_{t-1}^{i}-c_{t}^{j}, x_{t-1}^{i}, x_{t}^{j}\right) \]
然而这种点对点的matching cost对异常点特别敏感。
FlowNet3D(2019)的flow embedding层则是点对集合的matching cost,其通过聚合邻域的特征一定程度上解决了这个问题。其先通过ball query找到邻域,然后计算邻域每个点对中心点的matching cost,并且使用max pooling进行邻域聚合。然而这种聚合的坏处就是会丢失一些运动信息。
本文提出了一种 集合对集合的matching cost。这种从点对点到集合对集合的变化,有点像2003年Chui and Rangarajan在传统点云匹配问题上的softmax到softassign cost的改变。具体对点\(p_t^j\)的matching cost定义如下:
\[ \begin{aligned} \operatorname{CV}\left(p_{t}^{j}\right) &=\sum_{p_{t}^{k} \in M\left(p_{t}^{j}\right)} \omega_{M}\left(p_{t}^{k}, p_{t}^{j}\right) \\ & \times \sum_{p_{t-1}^{i} \in N\left(p_{t}^{k}\right)} \omega_{N}\left(p_{t-1}^{i}, p_{t}^{k}\right) \operatorname{Cost}\left(p_{t-1}^{i}, p_{t}^{k}\right)\\ \omega_{M}\left(p_{t}^{k}, p_{t}^{j}\right)&=\operatorname{MLP}\left(c_{t}^{k}-c_{t}^{j}\right) \\ \omega_{N}\left(p_{t-1}^{i}, p_{t}^{k}\right)&=\operatorname{MLP}\left(c_{t-1}^{i}-c_{t}^{k}\right) \end{aligned} \]
其中 \(M\) 为空间邻域,\(N\) 为时空邻域(即在t-1帧的空间邻域),可以通过ball-query和KNN得到。上式即对于点\(p_t^j\),先计算其空间邻域的特征差,然后对于空间邻域的每一个点,计算其时空邻域的特征差。两者累积相乘得到最终的cost volume。
下面来看cost volume怎么利用在Recurrent记忆元上。
在RCV中,输入是当前帧的点坐标\(C_t\)和特征\(X_t\)。内部保留了\(C_{t-1}\)来记录最近的点信息,同时利用两个隐状态\(H_{t-1}\)和\(M_{t-1}\)来作为记忆元存储。记忆元的更新方法如下:
\[ \operatorname{CV}\left(\boldsymbol{P}_{t} ; \boldsymbol{P}_{t-1}\right)=\operatorname{CV}\left(\boldsymbol{C}_{t}, \boldsymbol{X}_{t} ;\boldsymbol{C}_{t-1},\left\{\boldsymbol{H}_{t-1}, \boldsymbol{M}_{t-1}\right\}\right) \]
即计算t帧点云内所有点关于t-1帧的cost volume。其中t-1帧的特征用隐状态表示。
定义了算子之后,接下来隐状态的更新和LSTM类似。\(I\),\(F\),\(O\)分别为输入门,遗忘门,输出门。
\[ \begin{aligned} I_{t} &=\sigma_{I}\left(C V_{I}\left(\boldsymbol{C}_{t}, \boldsymbol{X}_{t} ; \boldsymbol{C}_{t-1}, \boldsymbol{H}_{t-1}\right),\right.\\ F_{t} &=\sigma_{F}\left(C V_{F}\left(\boldsymbol{C}_{t}, \boldsymbol{X}_{t} ; \boldsymbol{C}_{t-1}, \boldsymbol{H}_{t-1}\right),\right.\\ O_{t} &=\sigma_{O}\left(C V_{O}\left(\boldsymbol{C}_{t}, \boldsymbol{X}_{t} ; \boldsymbol{C}_{t-1}, \boldsymbol{H}_{t-1}\right)\right.\\ \hat{\boldsymbol{M}}_{t-1} &=C V_{M}\left(\boldsymbol{C}_{t}, \text { None } ; \boldsymbol{C}_{t-1}, \boldsymbol{M}_{t-1}\right), \\ \hat{\boldsymbol{H}}_{t} &=\tanh \left(C V_{H}\left(\boldsymbol{C}_{t}, \boldsymbol{X}_{t} ; \boldsymbol{C}_{t-1}, \boldsymbol{H}_{t-1}\right)\right), \\ \boldsymbol{M}_{t} &=F_{t} \odot \hat{\boldsymbol{M}}_{t-1}+I_{t} \odot \hat{\boldsymbol{H}}_{t}, \\ \boldsymbol{H}_{t} &=O_{t} \odot \boldsymbol{M}_{t}, \end{aligned} \]