0%

SPCMNet:LearningSceneDynamics

  • 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

在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} \]