当前位置: 代码迷 >> 综合 >> Scalable Scene Flow from Point Clouds in the Real World论文笔记
  详细解决方案

Scalable Scene Flow from Point Clouds in the Real World论文笔记

热度:45   发布时间:2023-12-17 01:14:45.0

Scalable Scene Flow from Point Clouds in the Real World(2021 Google出品)
论文下载地址:https://arxiv.org/pdf/2103.01306.pdf

1.摘要

自动驾驶车辆在高度动态的环境中运行,这就需要准确地评估场景的哪些方面正在移动,以及它们将移动到哪里。一种新的三维运动估计方法称为场景流,使用连续的激光雷达扫描的3d点云数据,尽管这些方法受到现实世界带注释的LiDAR数据集较少的限制。在本论文的工作中,首先,利用Waymo Open数据集中的监督追踪标签,引入了一种新的用于场景流估计的大规模数据集。其次,作者证明了越大的激光雷达数据能达到越好的性能。再者,作者发现了以前在点云上操作的启发式算法(如下采样)会降低性能,为了解决这个问题,作者引入了FastFlow3D架构,它可以在全点云上提供实时推理。此外,作者还设计了人类可解释的度量标准,通过考虑自我运动(环境中相机的3D运动,是指估计相机相对于固定场景的运动)并提供每种对象类型的细分,更好地捕捉了现实世界的各个方面。

2.引言
由于之前的研究基于LIDAR的数据,有两个问题,有些方法中的运动矢量标签定义不明确,这是因为LIDAR从后续时间点返回的数据之间没有对应关系。相反,之前的方法必须依赖于半监督方法,使用辅助信息来对运动信号做出强有力的推断,以便帮助得到标签。这种方法局限性大。依赖于基于合成数据的预训练模型,合成数据和真实数据差异大。另外一个问题就是,以前数据集的覆盖区域小,如KITTI,这导致训练出的模型没有办法处理超过10K points的场景,但真实世界的场景通常都包含了100K-1000K个点。作者为了解决以上问题,提出了一个大规模场景流数据集来解决该领域的这些缺点。作者通过利用最近发布的大规模AV数据集的场景中,自助对目标进行密集标注跟踪来获得用于运动估计的逐点标签。通过在作者自己提出的大型数据集上工作时又发现了三个问题点:
1.场景流的学习模型在很大程度上受到数据量的限制。
2.在点云上操作的启发式方法(例如,下采样)会严重降低预测性能。这一观察结果推动了一类可在全点云场景中处理的新模型的开发。(于是开发了一个新的基线模型架构,FastFlow3D,它可以在完整点云上处理,并能够实时运行)
3.以前的评估指标忽略了不同类别对象之间显著的系统性偏差(例如,预测行人与车辆运动)

3.主要内容
3.1 场景流数据集的构建
假设标记的对象是刚性的,但对于行人这些非刚体的目标其实影响也不大,因为高帧率(10hz)可以最小化相邻帧之间的非刚性形变。并使用割线近似来计算点速度。对于在时间点t0时的每个点P0,P-1是在t-1时间点的对应点,通过下面公式计算flow的标注信息,T?是从点所属对象的轨迹标注推断的齐次变换,同时在计算T?时对自动驾驶车辆的自我运动进行了补偿,因为这将带来卓越的预测性能,因为学习后的模型不需要额外推断自动驾驶汽车的运动(大多数自动驾驶汽车都配备了IMU/GPS系统来提供此类信息),对自我运动信息的补偿可以提高评价指标的可解释性。:
在这里插入图片描述
在这里插入图片描述

3.2 场景流的评价指标

用于3D场景流的两个常用度量有两个第一个是 point-wise flow的平均L2误差,第二个是 L2误差低于给定阈值时预测的百分比。作者对label加入了按类别标签细分如行人,车辆。其次,作者基于某个阈值,将二进制标签(binary label)分配给每个反射代表运动或静止,作者选定的阈值fmin=0.5m/s,当f的绝对值大于fmin则认为在移动,以确保标记为移动的东西确实在移动。

3.3 FASTFLOW3D模型结构及损失

作者提出了一种新的模型,该模型具有良好的可伸缩性,可以在O(100K)的实时系统上运行。我们利用了这样一个事实,即激光雷达点云在z维度上是密集的,相对平坦的,但是要沿着x和y方向覆盖很大的区域(insight)。模型由三部分组成:
1).场景编码器、
2).融合两帧上下文信息的解码器(U-net)
3).获得 point-wise flow的解码器。

网络结构
1.模型输入:两个连续的点云,在这两个点云中,第一个点云要转换为第二帧的点云的坐标系。在第二帧的坐标框架中相应地提供目标注释。target annotations也是以第二帧作为坐标框架提供。原因是可以消除由自动驾驶汽车的运动而产生的表观运动。

2.场景编码器:用的时Pointpillar中feature net的变体,
在这里插入图片描述
PointPillars的大致思想如上图所示:有D=9个特征维度[x, y, z, r, x_c, y_c, z_c, x_p, y_p],x,y,z是绝对坐标。x_c,y_c,z_c是相对于自己pillar的坐标,P个柱子,每个柱子N个点,一个样本就形成了shape为(D,P,N),然后在N这个维度做max operation(max pooling)操作(用Pointnet实现),得到维度为(C,P),然后reshape得到(C,H,W)的tensor完成了点云数据的表达。但这篇文章的作者发现,对柱子中特征点的求和代替max operation操作,觉得效果要好。

3.将两个经过场景编码器后的 embeddings通过通道cat起来,随后,使用2D卷积来获得不同分辨率下的上下文信息,并合并来自连续分辨率的上下文,通过Unet实现,引入了瓶颈卷积,并用双线性上采样代替了反卷积(转置卷积)运算,所得到的U-Net解码器的特征图代表了基于网格结构的流嵌入层flow embedding。流嵌入层是来学习两个点云之间的几何关系,推断运动

4.为了获得point-wise flow,我们引入了Unpillar操作,即每个点检索对应的flow embedding网格单元(每个点去找对应的pillar),并将点特征拼接起来,然后使用多层感知器来计算流向量,输出的个数就是pillar的个数。

5.训练损失:每个雷达返回的最终预测值(每个轴的速度)和gd进行L2损失计算(MSE)。

网络结构如下所示,B-R 是t0和t1时刻的图片共享的网络层(这里共享层其实就是指的卷积核共享),带有?的输入表示权重共享编码器的各个层的级联(concatenate),Ungrid操作是通过Scatter函数进行的操作,把每个柱子映射回所有的点,从参数量为0也可以看出来不是卷积或者全连接操作。
在这里插入图片描述

  相关解决方案