FlowNet3D - Learning Scene Flow in 3D Point Clouds[CVPR2019]

FlowNet3D - Learning Scene Flow in 3D Point Clouds[CVPR2019]
[论文链接] | [代码链接]
FlowNet3D - Learning Scene Flow in 3D Point Clouds[CVPR2019]
\qquad本文作者提出了一个端到端估计场景流的网络结构——FLowNet3D。在FLowNet3D中引入了两个新的点云学习层:(1)学习联系两帧点云的flow embedding层;(2)学习将特征从一个点集传播到另一个点集的set upconv层。
FlowNet3D - Learning Scene Flow in 3D Point Clouds[CVPR2019]
\qquadFlowNet3D主要包含以上三个模块:(1)set conv层学习点云中点的特征,并对点云进行下采样;(2)flow embedding层学习两帧点云的几何联系以预测流;(3)set upconv层对点云进行上采样并使用学习的方式传播点特征。
FlowNet3D - Learning Scene Flow in 3D Point Clouds[CVPR2019]
\qquadFlowNet3D的结构如上图所示。首先是对点云的特征进行分层学习,这部分网络与PointNet++的结构类似。输入为nn个点的点云:pi={xi,fi}p_i=\{x_i,f_i\}xiR3x_i \in \mathbb{R}^3为点坐标,fiRc (i=1,...,n)f_i \in \mathbb{R}^c\ (i=1,...,n)为点特征。输出为nn'个点的点云:pj={xj,fj}p'_j=\{x'_j,f'_j\}。首先用FPS算法从输入点云采样nn'个区域(以某个点为中心,以某个半径划定的范围),然后对每个区域使用如下的方法学习局部特征:
fj=MAX{i xixjr}{h(fi,xixj)}. f'_j=\underset{\{i|\ ||x_i-x'_j||\leqslant r\}}{MAX}\{h(f_i,x_i-x'_j)\}.
h:Rc+3Rch:\mathbb{R}^{c+3}\rightarrow\mathbb{R}^{c'}是一个非线性函数,用一个多层感知机实现,MAX是逐元素的最大池化。

\qquad然后使用flow embedding层混合两个点云并计算场景流。由于点云的无序性,所以论文采用的方法是先在t+1帧中找到多个soft对应点再对其加权平均。这样可以聚合几何特征相似性和点的空间联系来编码点的运动。flow embedding层的输入为一对点云:{pi=(xi,fi)}i=1n1\{p_i=(x_i,f_i)\}_{i=1}^{n_1}{qj=(yj,gj)}j=1n2\{q_j=(y_j,g_j)\}_{j=1}^{n_2}。该层对第一帧的每个点学习一个flow embedding:{ei}i=1n1, eiRc\{e_i\}_{i=1}^{n_1},\ e_i \in \mathbb{R}^{c'}。每个点的原始坐标也被传递到输出,flow embedding层的最终输出为:{oi=(xi,ei)}i=1n1\{o_i=(x_i,e_i)\}_{i=1}^{n_1}

\qquad计算eie_i的操作与set conv层类似,对于第一帧的点pip_i,首先找到第二帧中所有在pip_i某个半径范围内的点qiq_i。该点流的embedding的计算过程如下:
ei=MAX{j yjxir}{h(fi,gj,yjxi)} e_i=\underset{\{j|\ ||y_j-x_i||\leqslant r\}}{MAX}\{h(f_i,g_j,y_j-x_i)\}
这里利用MLP hh来学习权重,加权所有潜在流向量dij=yjxid_{ij}=y_j-x_i。另外一个可行的方案是通过计算特征距离(dist(fi,gj)dist(f_i,g_j))来关联点的特征,再通过MLP学习,但在消融实验中证明第一个方法具有更好的效果。计算的flow embedding还会利用一些set conv层下采样,这样可以使得结果在空间上有更好的平滑性。

\qquad最后,在set upconv层利用中间点将flow embedding上采样插值回原始点云。这一步过程与set conv类似,假设源点云为{pi={xi,fi}i=1,..,n}\{p_i=\{x_i,f_i\}|i=1,..,n\},目标点云为{xjj=1,..,n}\{x'_j|j=1,..,n'\}。对于目标点云的每个点xjx'_j,其特征由它在源点云pip_i中邻近点的特征聚合得到。这里用MLP学习如何对源点云中邻近点的特征进行加权,得到目标点云中点的特征。

\qquad最终FLowNet3D的结构包含4个set conv层,一个flow embedding层,四个set upconv层和一个线性流回归层。对于set upconv层,使用skip connection来连接set conv层的特征。每个可学习层使用MLP和Linear-BatchNorm-ReLU层实现函数hh,网络的详细结构如下表:
FlowNet3D - Learning Scene Flow in 3D Point Clouds[CVPR2019]