目录

  • 1. 基于原始点云的方法
  • 1.1 PSTNET
  • 时空点云卷积:
  • 时间卷积
  • 1.2 PointRNN
  • 1.3 MoNet
  • Content encoder
  • Motion encoder
  • 1.4 MeteorNet
  • 1.5 Point Spatial-Temporal Transformer( P S T 2 PST^2 PST2)
  • Resolution Embedding(RE)
  • Spatio-Temporal Self-Attention(STSA)



对于连续的点云序列,点云在空间上是无序的,但在时间上是有序的。由于空间上的无序性,传统卷积无法直接应用于原始点云,因此时序点云特征提取方法可以分为

  1. 基于体素分割的方法
  2. 基于原始点云的方法

基于体素的方法通常是将每一帧的点云划分为多个有序区域,在每个区域内部提取特征后经过pooling操作将无序点云转换为有序点云,之后就可以使用传统卷积的方法进一步进行特征编码。

基于原始点云的方法通常首先进行点云的下采样,之后对每个采样点提取局部特征。
本文对一些论文中点云时空特征提取方法做出一些总结。

1. 基于原始点云的方法

1.1 PSTNET

标题:PSTNET: POINT SPATIO-TEMPORAL CONVOLUTION ON POINT CLOUD SEQUENCES

作者:Hehe Fan, Xin Yu, Yuhang Ding, Yi Yang & Mohan Kankanhalli

代码:https://github.com/hehefan/Point-Spatio-Temporal-Convolution

仿照传统3D卷积的概念提出了适用于连续点云的时空4D卷积。在空间上为通过相对坐标产生卷积核。输入tensor将特征序列由秒转化为小时的方法Python 对序列特征提取的方法_神经网络输出tensor将特征序列由秒转化为小时的方法Python 对序列特征提取的方法_神经网络_02,其中 将特征序列由秒转化为小时的方法Python 对序列特征提取的方法_人工智能_03 为序列长度,将特征序列由秒转化为小时的方法Python 对序列特征提取的方法_神经网络_04

对于t时刻的点 将特征序列由秒转化为小时的方法Python 对序列特征提取的方法_人工智能_05,可以通过3D卷积来提取时空局部特征,过程可以用下式描述
将特征序列由秒转化为小时的方法Python 对序列特征提取的方法_神经网络_06
传统3D卷积:输入tensor:将特征序列由秒转化为小时的方法Python 对序列特征提取的方法_点云_07,输出tensor:将特征序列由秒转化为小时的方法Python 对序列特征提取的方法_点云_08
PSTNET的方法:

将特征序列由秒转化为小时的方法Python 对序列特征提取的方法_点云_09


图1

如上图,有5帧连续点云。首先根据时间滑动步长 将特征序列由秒转化为小时的方法Python 对序列特征提取的方法_自动驾驶_10,选择出第1,2,3帧点云作为采样帧。其次在每个采样帧中采样 将特征序列由秒转化为小时的方法Python 对序列特征提取的方法_点云_11 个点(anchor points)。根据时间卷积核的大小 将特征序列由秒转化为小时的方法Python 对序列特征提取的方法_神经网络_12,将每个采样点转换到前后相邻帧中。为每个采样点在本帧以及前后相邻帧中以 将特征序列由秒转化为小时的方法Python 对序列特征提取的方法_深度学习_13 为半径搜索邻域点,构造出“point tube”。之后通过空间卷积提取每个采样点的空间局部特征 将特征序列由秒转化为小时的方法Python 对序列特征提取的方法_人工智能_14。之后时间卷积将每个滑动串口内的 将特征序列由秒转化为小时的方法Python 对序列特征提取的方法_神经网络_12 帧的空间特征编码成时间特征 将特征序列由秒转化为小时的方法Python 对序列特征提取的方法_神经网络_16

参数:

  • 将特征序列由秒转化为小时的方法Python 对序列特征提取的方法_深度学习_17:时间卷积核大小
  • 将特征序列由秒转化为小时的方法Python 对序列特征提取的方法_神经网络_18:时间卷积滑动步长
  • 将特征序列由秒转化为小时的方法Python 对序列特征提取的方法_点云_19:空间邻域半径

时空点云卷积:

由于点云在空间上是无序而不规则的,且空间和时间维度是正交的。因此可以将时间和空间解耦,先在空间上卷积,再在时间上卷积。

空间卷积
将特征序列由秒转化为小时的方法Python 对序列特征提取的方法_神经网络_20
空间上的不规则性导致我们无法直接定义空间卷积核,因此PSTNET通过相对坐标来产生卷积核。
将特征序列由秒转化为小时的方法Python 对序列特征提取的方法_人工智能_21

将特征序列由秒转化为小时的方法Python 对序列特征提取的方法_深度学习_22

其中 将特征序列由秒转化为小时的方法Python 对序列特征提取的方法_深度学习_23将特征序列由秒转化为小时的方法Python 对序列特征提取的方法_人工智能_24将特征序列由秒转化为小时的方法Python 对序列特征提取的方法_人工智能_25

将特征序列由秒转化为小时的方法Python 对序列特征提取的方法_点云_26

时间卷积

将特征序列由秒转化为小时的方法Python 对序列特征提取的方法_神经网络_27

缺点:除非增大邻域搜索半径,否则无法通过堆叠更多的层获得空间上更大的感受野。

1.2 PointRNN

标题:PointRNN: Point Recurrent Neural Network for Moving Point Cloud Processing

作者:Hehe Fan, Yi Yang

代码:https://github.com/hehefan/PointRNN

传统的RNN通过将此时刻的输入和上一时刻的状态concat在一起来融合之前时间步的信息。但是无法直接用于点云。point-rnn的目标就是根据点的坐标融合过去和现在的点云特征。即给定点云坐标及特征 将特征序列由秒转化为小时的方法Python 对序列特征提取的方法_人工智能_28将特征序列由秒转化为小时的方法Python 对序列特征提取的方法_自动驾驶_29。对于 将特征序列由秒转化为小时的方法Python 对序列特征提取的方法_人工智能_30 中的第i个点 将特征序列由秒转化为小时的方法Python 对序列特征提取的方法_深度学习_31,首先找到该点在前一帧点云 将特征序列由秒转化为小时的方法Python 对序列特征提取的方法_自动驾驶_32k个近邻。设 将特征序列由秒转化为小时的方法Python 对序列特征提取的方法_神经网络_33 是其中一个邻居点。将第i个点的特征 将特征序列由秒转化为小时的方法Python 对序列特征提取的方法_神经网络_34、邻居点上个时间的状态 将特征序列由秒转化为小时的方法Python 对序列特征提取的方法_人工智能_35、邻居点到第i个点的位移向量将特征序列由秒转化为小时的方法Python 对序列特征提取的方法_点云_36 concatenate在一起,通过FC层融合。之后通过在k这个维度pooling,得到一个单独的特征表示,为第t个时间步的状态 将特征序列由秒转化为小时的方法Python 对序列特征提取的方法_神经网络_37

将特征序列由秒转化为小时的方法Python 对序列特征提取的方法_深度学习_38

因此,PointRNN中,在第 将特征序列由秒转化为小时的方法Python 对序列特征提取的方法_自动驾驶_39 个时间步的状态更新由下式描述:
将特征序列由秒转化为小时的方法Python 对序列特征提取的方法_自动驾驶_40

1.3 MoNet

标题:MoNet: Motion-based Point Cloud Prediction Network

作者:Fan Lu, Guang Chen, Yinlong Liu Zhijun Li, Sanqing Qu, Tianpei Zou

代码:https://github.com/ispc-lab/MoNet

MoNet用于点云预测,主要分为两部分:Embedding和Inference。其中Embedding用于提取特征,分为 Content encoder和 Motion encoder。分别提取点云帧内容特征和点云帧间运动特征。

将特征序列由秒转化为小时的方法Python 对序列特征提取的方法_人工智能_41


图2

将特征序列由秒转化为小时的方法Python 对序列特征提取的方法_点云_42


图3

Content encoder

给定时刻t、第 将特征序列由秒转化为小时的方法Python 对序列特征提取的方法_神经网络_43 层的点云坐标 将特征序列由秒转化为小时的方法Python 对序列特征提取的方法_点云_44 和特征 将特征序列由秒转化为小时的方法Python 对序列特征提取的方法_人工智能_45,首先使用 Furthest Point Sampling(FPS)从 将特征序列由秒转化为小时的方法Python 对序列特征提取的方法_点云_44 采样出 将特征序列由秒转化为小时的方法Python 对序列特征提取的方法_人工智能_47 个点 将特征序列由秒转化为小时的方法Python 对序列特征提取的方法_点云_48。对于 将特征序列由秒转化为小时的方法Python 对序列特征提取的方法_点云_48 中的每一点 将特征序列由秒转化为小时的方法Python 对序列特征提取的方法_深度学习_50,在 将特征序列由秒转化为小时的方法Python 对序列特征提取的方法_点云_44 中使用KNN方法找出它的k个邻居点 将特征序列由秒转化为小时的方法Python 对序列特征提取的方法_神经网络_52,相对坐标 将特征序列由秒转化为小时的方法Python 对序列特征提取的方法_自动驾驶_53以及相对距离 将特征序列由秒转化为小时的方法Python 对序列特征提取的方法_人工智能_54。将以上三种特征和这k个点的内容特征 将特征序列由秒转化为小时的方法Python 对序列特征提取的方法_人工智能_55 concat在一起产生一个点的空间局部融合特征。之后将所有点的空间局部融合特征输入到MLP中,pooling得到第 将特征序列由秒转化为小时的方法Python 对序列特征提取的方法_神经网络_12 层的内容特征 将特征序列由秒转化为小时的方法Python 对序列特征提取的方法_点云_57

Motion encoder

用于提取连续两帧点云的运动信息。输入为 将特征序列由秒转化为小时的方法Python 对序列特征提取的方法_神经网络_58将特征序列由秒转化为小时的方法Python 对序列特征提取的方法_点云_59。对于 将特征序列由秒转化为小时的方法Python 对序列特征提取的方法_点云_48 中的每一点 将特征序列由秒转化为小时的方法Python 对序列特征提取的方法_深度学习_50,在 将特征序列由秒转化为小时的方法Python 对序列特征提取的方法_人工智能_62 中使用KNN方法找出它的k个邻居点 将特征序列由秒转化为小时的方法Python 对序列特征提取的方法_神经网络_52。使用与Content encoder相似的策略来提取两帧之间的运动特征。之后输入到MLP中,pooling得到第 将特征序列由秒转化为小时的方法Python 对序列特征提取的方法_神经网络_12 层的运动特征 将特征序列由秒转化为小时的方法Python 对序列特征提取的方法_深度学习_65

1.4 MeteorNet

标题:MeteorNet: Deep Learning on Dynamic 3D Point Cloud Sequences

作者:Xingyu Liu, Mengyuan Yan, Jeannette Bohg

代码:https://github.com/xingyul/meteornet

文章中关键模块是Meteor Module,输入是序列点云 将特征序列由秒转化为小时的方法Python 对序列特征提取的方法_深度学习_66,输出是S中每个点 将特征序列由秒转化为小时的方法Python 对序列特征提取的方法_神经网络_67的特征向量 将特征序列由秒转化为小时的方法Python 对序列特征提取的方法_自动驾驶_68。第一步是找到点 将特征序列由秒转化为小时的方法Python 对序列特征提取的方法_神经网络_67 在第t帧和附近帧的邻居点来构成一个时空局部区域 将特征序列由秒转化为小时的方法Python 对序列特征提取的方法_自动驾驶_70。假设 将特征序列由秒转化为小时的方法Python 对序列特征提取的方法_人工智能_71是其中一个邻居,点 将特征序列由秒转化为小时的方法Python 对序列特征提取的方法_神经网络_67

  • 当帧之间对应关系比较重要时,将两个点的特征两个点时空位置的差异concat之后输入进MLP 将特征序列由秒转化为小时的方法Python 对序列特征提取的方法_深度学习_73

将特征序列由秒转化为小时的方法Python 对序列特征提取的方法_人工智能_74

  • 当帧之间对应关系不重要时(如语义分割),将将特征序列由秒转化为小时的方法Python 对序列特征提取的方法_自动驾驶_75两个点时空位置的差异concat之后输入进MLP 将特征序列由秒转化为小时的方法Python 对序列特征提取的方法_深度学习_73
    将特征序列由秒转化为小时的方法Python 对序列特征提取的方法_自动驾驶_77

对于局部区域 将特征序列由秒转化为小时的方法Python 对序列特征提取的方法_人工智能_78

将特征序列由秒转化为小时的方法Python 对序列特征提取的方法_点云_79



  • Direct grouping
    直接使用半径 将特征序列由秒转化为小时的方法Python 对序列特征提取的方法_点云_80 来构建邻域,半径 将特征序列由秒转化为小时的方法Python 对序列特征提取的方法_点云_80 随帧的差异 将特征序列由秒转化为小时的方法Python 对序列特征提取的方法_点云_82
  • Chained-flow grouping
    通过scene flow的方法估计出第t帧的点 将特征序列由秒转化为小时的方法Python 对序列特征提取的方法_神经网络_83 在第t-1, t-2, … 帧的位置 将特征序列由秒转化为小时的方法Python 对序列特征提取的方法_神经网络_84,分别以每帧的估计位置为中心以半径 将特征序列由秒转化为小时的方法Python 对序列特征提取的方法_点云_80

1.5 Point Spatial-Temporal Transformer(将特征序列由秒转化为小时的方法Python 对序列特征提取的方法_神经网络_86)

标题:Spatial-Temporal Transformer for 3D Point Cloud Sequences

作者:Yimin Wei, Hao Liu, Tingting Xie, Qiuhong Ke, Yulan Guo

代码:无

将特征序列由秒转化为小时的方法Python 对序列特征提取的方法_神经网络_86

  • Spatio-Temporal Self-Attention(STAT)
  • Resolution Embedding(RE)

将特征序列由秒转化为小时的方法Python 对序列特征提取的方法_神经网络_88



将特征序列由秒转化为小时的方法Python 对序列特征提取的方法_人工智能_89 采用了encoder-decoder的结构。encoder包含了一个backbone、一个RE模块和一个STSA模块。decoder包含了多个Feature Propagation(PointNet++)层。

输入为点云序列 将特征序列由秒转化为小时的方法Python 对序列特征提取的方法_神经网络_90,首先使用FPS在 将特征序列由秒转化为小时的方法Python 对序列特征提取的方法_点云_91 中采样m个种子点。在 将特征序列由秒转化为小时的方法Python 对序列特征提取的方法_神经网络_90上用一定半径 将特征序列由秒转化为小时的方法Python 对序列特征提取的方法_人工智能_93 搜索这m个种子点的邻居点。之后使用两个 Set Abstraction(PointNet++)层来提取局部特征 将特征序列由秒转化为小时的方法Python 对序列特征提取的方法_神经网络_94

Resolution Embedding(RE)

RE模块用于提高每帧中点的分辨率,主要包含一个feature block和一个resolution block。feature block用于进一步提取语义特征,resolution block用于进一步提取空间邻域信息。

将特征序列由秒转化为小时的方法Python 对序列特征提取的方法_自动驾驶_95



  • Feature block
    将特征序列由秒转化为小时的方法Python 对序列特征提取的方法_人工智能_96 再用一个Set Abstraction 层得到 将特征序列由秒转化为小时的方法Python 对序列特征提取的方法_深度学习_97
  • Resolution block
    将特征序列由秒转化为小时的方法Python 对序列特征提取的方法_人工智能_96 在空间维度上分为 将特征序列由秒转化为小时的方法Python 对序列特征提取的方法_神经网络_99将特征序列由秒转化为小时的方法Python 对序列特征提取的方法_深度学习_100,再将它们再特征维度上concat得到 将特征序列由秒转化为小时的方法Python 对序列特征提取的方法_自动驾驶_101。之后通过MLP进一步提取特征 将特征序列由秒转化为小时的方法Python 对序列特征提取的方法_自动驾驶_102

Feature block 和 Resolution block 的结果通过MLP和softmax产生注意力权重 将特征序列由秒转化为小时的方法Python 对序列特征提取的方法_自动驾驶_103,最终特征为二者加权和 将特征序列由秒转化为小时的方法Python 对序列特征提取的方法_神经网络_104
将特征序列由秒转化为小时的方法Python 对序列特征提取的方法_深度学习_105

Spatio-Temporal Self-Attention(STSA)

STSA模块用于融合帧间特征并且捕获时空邻域信息。将第i帧的空间特征 将特征序列由秒转化为小时的方法Python 对序列特征提取的方法_自动驾驶_106

未完待续。。。