FlowNet3D - Learning Scene Flow in 3D Point Clouds[CVPR2019]
[论文链接] | [代码链接]
本文作者提出了一个端到端估计场景流的网络结构——FLowNet3D。在FLowNet3D中引入了两个新的点云学习层:(1)学习联系两帧点云的flow embedding层;(2)学习将特征从一个点集传播到另一个点集的set upconv层。
FlowNet3D主要包含以上三个模块:(1)set conv层学习点云中点的特征,并对点云进行下采样;(2)flow embedding层学习两帧点云的几何联系以预测流;(3)set upconv层对点云进行上采样并使用学习的方式传播点特征。
FlowNet3D的结构如上图所示。首先是对点云的特征进行分层学习,这部分网络与PointNet++的结构类似。输入为个点的点云:。为点坐标,为点特征。输出为个点的点云:。首先用FPS算法从输入点云采样个区域(以某个点为中心,以某个半径划定的范围),然后对每个区域使用如下的方法学习局部特征:
是一个非线性函数,用一个多层感知机实现,MAX是逐元素的最大池化。
然后使用flow embedding层混合两个点云并计算场景流。由于点云的无序性,所以论文采用的方法是先在t+1帧中找到多个soft对应点再对其加权平均。这样可以聚合几何特征相似性和点的空间联系来编码点的运动。flow embedding层的输入为一对点云:和。该层对第一帧的每个点学习一个flow embedding:。每个点的原始坐标也被传递到输出,flow embedding层的最终输出为:。
计算的操作与set conv层类似,对于第一帧的点,首先找到第二帧中所有在某个半径范围内的点。该点流的embedding的计算过程如下:
这里利用MLP 来学习权重,加权所有潜在流向量。另外一个可行的方案是通过计算特征距离()来关联点的特征,再通过MLP学习,但在消融实验中证明第一个方法具有更好的效果。计算的flow embedding还会利用一些set conv层下采样,这样可以使得结果在空间上有更好的平滑性。
最后,在set upconv层利用中间点将flow embedding上采样插值回原始点云。这一步过程与set conv类似,假设源点云为,目标点云为。对于目标点云的每个点,其特征由它在源点云中邻近点的特征聚合得到。这里用MLP学习如何对源点云中邻近点的特征进行加权,得到目标点云中点的特征。
最终FLowNet3D的结构包含4个set conv层,一个flow embedding层,四个set upconv层和一个线性流回归层。对于set upconv层,使用skip connection来连接set conv层的特征。每个可学习层使用MLP和Linear-BatchNorm-ReLU层实现函数,网络的详细结构如下表: