目录
1.2. Contributions2. PointPillars Network
2.1. Pointcloud to Pseudo-Image 点云转换成伪图像
7.2. Per Box Data Augmentation 增强
正文
Abstract
最近的文献表明有两种类型的编码器;
- 固定编码器往往速度很快,但牺牲了准确性
- 而从数据中学习的编码器更准确,但速度更慢。
在这项工作中,我们提出了一种新的编码器PointPillars,它利用PointNets来学习以垂直列(柱子)组织的点云的表示。虽然编码的特征可以用于任何标准的二维卷积检测架构,但我们进一步提出了一个精益下游网络。
1 Introduction
激光雷达使用激光扫描仪来测量到环境的距离,从而生成稀疏的点云表示。
早期的工作集中在使用3D卷积[3]或将点云投影到图像中[14]。
最近的方法倾向于从鸟瞰(abird’seyeview(BEV))的角度观察激光雷达点云[2,11,33,32]。
这种俯视视角优点。
- 首先,BEV保留对象的缩放。
- 其次,BEV中的卷积保留了局部范围信息。
缺点:由于鸟瞰视图的稀疏性,直接应用卷积神经网络是不切实际且效率低下的。
解决这个问题的一个常见方法是将地平面划分成一个规则的网格,例如10×10厘米,然后对每个网格单元中的点执行手工制作的特征编码方法[2,11,26,32]。
硬编码的特征提取方法不能推广到新的配置,于是在Qi等人开发的PointNet设计的基础上。[22],VoxelNet[33]是第一个真正进行端到端学习的方法之一。Voxelnet将空间划分为体素,对每个体素应用点网,然后使用三维卷积中间层来巩固垂直轴,然后使用二维卷积检测结构。
在这项工作中,我们提出了PointPillars:一种用于三维物体检测的方法,该方法只需要2D卷积层就可以实现端到端的学习。PointPillars使用了一种新的编码器,它学习点云柱子(垂直柱子)上的特征,以预测对象的3D定向框。这种方法有几个优点。
首先,通过学习特征而不是依赖于固定的编码器,PointPillars可以利用点云所代表的全部信息。
此外,通过在支柱上而不是在体素上操作,不需要手动调整垂直方向的装箱。
最后,支柱是快速的,因为所有的关键操作可以被表述为二维卷积,这是非常有效的计算在GPU上。学习特性的另一个好处是,PointPillars不需要手动调整就可以使用不同的点云配置,如多个激光雷达扫描,甚至雷达点云。
1.1. Related Work
1.1.1使用CNNS进行目标检测
一系列论文[24,7]主张用两个阶段的方法来解决这个问题。
在第一阶段,区域提案网络(RPN)建议候选提案,这些候选建议在被第二阶段网络分类之前被裁剪和调整大小。
在单阶段体系结构中,一组密集的锚定框被回归并在一步内分类成一组预测,提供了一个快速而简单的体系结构。 在这项工作中,我们使用单阶段方法。
1.1.2激光雷达点云中的目标检测
PointNet,用于从无序点集学习,它提供了一个完整的端到端学习的路径。
VoxelNet[33]是最早在激光雷达点云中部署点网进
PointPillars Network行目标检测的方法之一。在他们的方法中,将PointNets应用于体素,然后由一组3D卷积层,一个2D骨架和一个检测头对其进行处理。但速度慢。
Frustum PointNet 使用PointNets对视锥中的点云进行分割和分类,该视锥是将对图像的检测投影到3D中生成的。与其他融合方法相比,Frustum PointNet拥有较高的基准性能,但其多阶段设计使端到端学习变得不切实际。
1.2. Contributions
2. PointPillars Network
网络概述:网络的主要组成部分是支柱功能网络、主干和SSD检测头(详见第2节)。 原始点云被转换成一个堆叠的柱张量和柱指数张量。 编码器使用堆叠的柱子来学习一组特征,这些特征可以被分散到二维伪图像中,用于卷积神经网络。 检测头使用主干的特征来预测物体的三维包围盒。
PointPillars接受点云作为输入,并估计面向汽车、行人和骑自行车者的3D框。 它由三个主要阶段组成(图2):(1)将点云转换为稀疏伪图像的特征编码器网络; (2)2D卷积主干将伪图像处理为高级表示;(3)检测并回归3D框的检测头。
2.1. Pointcloud to Pseudo-Image 点云转换成伪图像
我们用L表示点云中的一个点,坐标为x,y,z。 |
首先,点云在x-y平面上被离散成一个均匀间隔的网格,生成一组柱子P,|P|=B。(注意,柱子是一个在Z方向上具有无限空间范围的体素,因此不需要一个超参数来控制Z维中的合并。) 然后,每个支柱中的点用r, xc, yc, zc, xp, yp装饰(增强),其中r是反射率,c下标表示到支柱中所有点的算术平均值的距离,p下标表示从支柱X,Y中心的偏移(有关设计细节,请参见第7.3节)。 增强的激光雷达点L现在是D=9维。 |
由于点云的稀疏性,这组柱子大部分是空的,而非空的柱子通常只有很少的点。例如,在0.162m2空间,来自HDL-64E速度差激光雷达的点云有6K-9K的非空柱,其范围通常在KITTI中用于大约97%的稀疏度。利用这种稀疏性,对每个样本的非空柱数(P)和每个柱的点数(N)都施加限制,以产生大小(D,P,N)的稠密张量。如果样本或柱子包含太多的数据,无法在张量中容纳,则随机采样数据。相反,如果样本或柱的数据太少,无法填充张量,则应用零填充。
接下来,我们使用简化的PointNet,其中,对于每个点,都应用线性层,然后是Batch-Norm [10]和ReLU [19],以生成一个(C,P,N)大小的张量。 接下来是对通道的最大操作,以创建大小为(C,P)的输出张量。 请注意,可以将线性层公式化为张量上的1x1卷积,从而实现非常有效的计算。
一旦编码,这些特征就会被分散回到原始的柱子位置,以创建一个大小为(C、H、W)的伪图像,其中H和W表示画布的高度和宽度。
2.2. Backbone 主干
主干网有两个子网络:一个自顶向下的网络以越来越小的空间分辨率产生特征,第二个网络执行自顶向下特征的上采样和级联。自上而下的主干网可以由一系列块Block(S,L,F)来表征。 每个块的步幅为S(相对于原始输入伪图像进行测量)。一个块具有L3x3 2D转换层,具有F个输出通道,每个通道后跟BatchNorm和ReLU。该层内部的第一个卷积具有步幅S / Sin,以确保该块在收到步幅Sin的输入Blob后在步幅S上运行。块中的所有后续卷积都步长为1
首先,使用带有F最终特征的转置2D卷积,将特征上采样,从初始步幅Sin向上(Sin,Sout,F)到最终步幅Sout(两者都再次测量到原始伪图像的WRT)。 接下来,将Batch Norm和RELU应用于上采样特征。 最终的输出特性是来自不同步幅的所有特性的串联。
2.3. Detection Head 探测头
我们使用单镜头检测器(SSD)[18]设置来执行3D物体检测。
与SSD相似,我们使用2D联合截面(IOU)[4]来匹配先验框与地面真实情况。 没有使用边界框的高度和标高进行匹配; 相反,给出一个2D匹配,高度和仰角成为额外的回归目标。
3. Implementation Details
3.1. Network
有权重均使用[8]中的均匀分布随机初始化,来代替预先训练我们的网络。
编码器网络具有C=64维度的输出特征。除了第一个block的步幅(汽车为S=2,行人/骑自行车的人为S=1)以外,汽车和行人/自行车的主干是相同的步幅。
这两个网络由三个块组成,
即Block1((S, 4, C)、Block2((2S, 6, 2C)和Block3(4S,6,4C)。
每个块通过以下上采样步骤上采样:
Up1(S,S,2C),Up2(2S,S,2C)和Up3(4S,S,2C)。
然后将UP1、UP2和UP3的特征级联在一起,为检测头创建6C特征。
3.2. Loss
我们使用与SECOND [28]中介绍的相同的损失函数。 地面真值框和锚点由(x,y,z,w,l,h,θ)定义。 地面真值(ground truth)和锚点(anchors )之间的本地化回归残差定义为:
由于角度定位损失不能区分翻转框,因此在离散化方向上用Softmax分类损失Ldir学习航向[30]。
其中是锚的类概率。 我们使用原始的论文设置α=0.25和γ=2。 因此,损失总额为:
where Npos is the number of positive anchors and βloc = 2, βcls = 1, and βdir = 0.2.
为了优化损失函数,我们使用Adam优化器,其初始学习率为2 * 10−4,每15个epoch衰减学习速率0.8倍,并训练160个epoch。 我们使用2个批次的验证集和4个测试提交量。
4. Experimental setup
4.1. Dataset
样本最初分为7481个训练样本和7518个测试样本。对于实验研究,我们将官方训练集分成3712个训练样本和3769个验证样本[1],而对于我们的测试提交,我们从验证集中创建了一个784个样本的最小集合,并对剩余的6733个样本进行训练。
4.2. Settings
除非在实验研究中有明显的变化,否则我们使用XY分辨率:0.16m,最大柱数(P):12000,每个柱的最大点数(N):100。
我们使用与[33]相同的锚点和匹配策略。每个类锚点由宽度、长度、高度和Z中心描述,并在两个方向上应用:0度和90度。锚与地面真理匹配使用2DIOU与以下规则。一个正匹配要么是地面真相框的最高值,要么高于正匹配阈值,而一个负匹配低于负阈值。所有其他锚在损失中被忽略。
在推断时,我们采用轴对齐非最大抑制(NMS),重叠阈值为0.5IOU。 与旋转NMS相比,这提供了类似的性能,但速度要快得多。
Car X,Y,Z范围分别为[(0,70.4),(-40,40),(-3,1)]米。 车锚的宽度、长度和高度分别为(1.6,3.9,1.5)m,Z中心为-1 m。 匹配使用正负阈值0.6和0.45。
Pedestrian & Cyclist. x,y,z范围分别为[(0,48),(-20,20),(-2.5、0.5)]米。 行人锚点的宽度,长度和高度为(0.6、0.8、1.73)米,z中心为-0.6米,而骑自行车的锚点的宽度,长度和高度为(0.6、1.76、1.73)米,z中心为- 0.6米 匹配使用正阈值和负阈值0.5和0.35。
4.3. Data Augmentation数据增强
首先,按照SECOND [28],我们为所有类别的地面真实3D框以及这些3D框内的关联点云创建一个查找表。 然后,对于每个样本,我们分别为汽车,行人和骑自行车的人随机选择15、0、8个地面真实样本,并将其放入当前点云中。 我们发现这些设置比建议的设置执行得更好[28]。
接下来,对所有地面真值框分别进行增强。每个框都旋转(从[-π/ 20,π/ 20]均匀绘制)并平移(从N(0,0.25)分别绘制的x,y和z)以进一步丰富 训练集。
最后,我们执行了两组全局增强,它们共同应用于点云和所有框。首先,我们沿x轴应用随机镜像翻转[30],然后进行全局旋转和缩放[31,28]。 最后,我们使用从N(0,0.2)得出的x,y,z进行全局平移,以模拟定位噪声。
5. Results
6. Realtime Inference
首先,根据图像中的距离和可见度对点云进行加载和滤波(1.4ms)。然后,点组织在柱子和装饰(2.7毫秒)。然后,将点柱张量上传到GPU(2.9ms),编码(1.3ms),分散到伪图像(0.1ms),由主干和检测头处理(7.7ms)。最后,在CPU(0.1ms)上应用NMS,总运行时间为16.2ms。
Encoding.
Slimmer Design.
我们发现使用较少的参数并不影响检测性能。 通过在编码器中使用单个点网,我们将PyTorch的运行时间减少了2.5ms,而不是像[33]中那样使用2个顺序点网。 第一个块维度被降低到64,以匹配编码器输出大小,这将运行时间减少了4.5ms。 最后,通过将上采样特征层的输出维数减少一半至128,我们又节省了3.9ms。
TensorRT
The Need for Speed.
PointPillars可以在精度损失有限的情况下达到105Hz。虽然可以说这样的运行时间是过多的,因为激光雷达通常工作在20赫兹,但有两个关键的事情要记住。首先,由于Kitti地面真值注释的伪影,只有10%的激光雷达投影到前像中的点被利用。然而,一个可操作的AV需要查看整个环境并处理完整的点云,这大大增加了运行时间。
蓝色圆圈表示只使用激光雷达的方法,红色方块表示使用激光雷达和视觉的方法。 柱栅尺寸分别为{0.122,0.162,0.22,0.242,0.282}m2,最大柱数分别为16000,12000,12000,8000,8000。
7. Ablation Studies
7.1. Spatial Resolution 空间分辨率
较小的柱子允许更精细的定位并导致更多的特征,而较大的柱子更快,因为较少的非空柱子(加快编码器)和较小的伪图像(加快CNN骨干)。
7.2. Per Box Data Augmentation 增强
在我们的实验中,最小限度的盒子增强效果更好。 尤其是,行人的检测性能随着更多盒子的增加而显着下降。
7.3. Point Decorations
编码器获取原始激光雷达返回值:X,Y,Z和反射率R,并添加从柱点簇中心(ΔXC,ΔYC,ΔZC)(如VoxelNet[33]中所做的那样)和从柱中心(ΔXP,ΔYP)的距离(我们的贡献)。柱子偏移量(ΔXP,ΔYP)编码每个柱子局部坐标系中的点位置。它们独立于其他点,因此以补充x和y中的2D卷积的方式标准化了点的局部上下文。我们没有包括Z柱偏移量,因为这是所有点的恒定偏移量。
7.4. Encoding
8. Conclusion
本文介绍了一种新型的基于激光雷达点云的深度网络和编码器PointPillars。 我们表明,在Kitti挑战中,PointPillars以更快的速度提供了更高的检测性能(BEV和3D MAP),从而主导了所有现有的方法。 我们的结果表明,PointPillars是迄今为止最适合于激光雷达三维目标检测的体系结构。