1.模型结构
Pointpillars接收点云作为输入,计算输出带方向的3D目标框,模型结构可以分为三个部分:
(1)Pillar Feature Net:将输入的点云转换为稀疏伪图像;
(2)2D Backbone:使用2D的CNN Backbone处理伪图像,得到2维特征图;
(3)SSD Detection Head:使用SSD检测头,检测和回归3D边界框。
1.1 Pointcloud to Pseudo-Image
为了使用2D CNN backbone,首先需要将3维点云信息转为2D的伪图像。
(1)针对一帧输入点云图,在鸟瞰图下对平面进行网格化分割,z方向不进行分割,得到个柱形分割,这样分割出来的柱子叫做pillar;
(2)为了使最终得到整齐的特征图,提取非空的个pillar,在每个pillar中采样个点,当点数大于时进行随机采样,当点数小于时则用补齐,论文中取;
(3)对柱子中的每个点取9个维度,其中为该点的坐标值,为反射率,为该点到pillar内所有点的平均值的距离,为该点到网格中心点的距离,这样每个点都编码成了个维度。
这样一个点云样本就表示成尺寸的张量,其中为pillar的个数,为每个点的维度,为每个pillar中点的个数,得到点云的pillar表示的张量。
(4)得到点云的pillar表示的张量后,需要对其进行特征提取,使用简化的PointNet,对每个pillar中的点使用多层感知机(线性全连接层+BN+Relu)从维学习出维,张量尺寸变为,论文中,随后对每个pillar使用Max Pooling,得到尺寸的特征图,。
(5)对尺寸的特征图,P展开为,得到形式的特征表示。
1.2 Backbone
Backbone包含2个子网络:
(1)a top-down network ,用于生成不同尺度的特征图,网络由一系列的Block(S,L,F)组成,S为stride,L为3×3的卷积,F为输出通道,每个Block都包含BatchNorm和ReLU;网络包含3个Block:Block1(S,4,C),Block2(2S,6,2C),Block3(4S,6,4C)。
(2)a second network,通过上采样(deconv)和拼接操作得到特征图,top-down网络的每个Block的输出都会进行上采样,Up中为输入stride、 为输出stride,F为输出通道,top-down的每个Block对应的上采样操作:Up1,Up2,Up3,使用2D转置卷积得到上采样特征图,随后对特征图进行BN和ReLU操作,所有特征图拼接,得到最终的特征图。
1.3 Detection Head
使用SSD作为检测网络。将预选框与ground truth进行2D IoU 匹配,Bounding box的高和海拔不参与匹配,但会对高和海拔进行回归。
2. 损失函数
采用与SECOND相同的损失函数,包括定位回归损失、heading损失、分类损失。
2.1 位置回归损失
Ground truth boxes和anchors定义:,表示box的位置、长宽高和heading方向。定位回归残差定义:
表示ground truth,表示模型预测结果,,定位损失:
2.2 heading损失
heading损失使用离散方向softmax分类损失。
2.3 目标分类损失
目标分类损失使用focal loss:
为一个anchor的类别概率,设置,。
2.4 损失函数
最终的损失函数为:
为激活的anchor数,设置,,。
3.训练策略
训练优化器:Adam optimizer
学习率:初始学习率为,每15个epoch学习率衰减,衰减因子为0.8。
训练总epoch:160