3D点云目标检测-PointPillars算法解析

前言

  点云中的物体检测是许多机器人应用(如自动驾驶)的重要方面。PointPillars提出了点柱思想采用一个新颖的编码器,利用点网络来学习点云在垂直点柱中的特征表示,进一步采用2D的卷积网络(任何标准的2D 卷积检测架构)进行点云特征提取,避免了很重的3D卷积,该方法的单检测头、更快的版本可以达到105hz的速度。这些基准表明,Pointpillar 是一种适合点云中目标检测的编码方式。

   代码仓库: https://github.com/open-mmlab/OpenPCDet
         https://github.com/open-mmlab/mmdetection3d
   论文连接: https://arxiv.org/abs/1812.05784

论文主要思路

在这里插入图片描述   PointPillars主要分为Pillar Feature Net 、Backbone和Detection Head等三大部分。其中Pillar Feature Net主要用于将点云特征体素化,并且将体素点云特征编码为稀疏的伪图像特征。Backbone主要对伪图像特征进行更高维度的编码,得到最终特征。Detection Head部分进行anchor分配,并根据head特征解析出最终的3D目标预测框。

Pillar Feature Net(点柱特征编码网络)

  点柱特征编码主要用于将点云数据转为伪图像数据,假设点云数据中的任一点(x,y,z,r),点云在x方向上点柱个数为W,在y方向上点柱个数为H,则生成的伪图像输出特征维度(B,64,H,W)。其中64代表特征通道。

体素化

  体素化过程中,输入点云为(Nc,4),其中Nc 为点云的点数,由于点云数据在规定范围内的数量各帧数据不一定相等,因此设置一个最大点个数Nmax ,以便后续在cuda核上进行数据处理。
  将点云数据在x-y平面上进行均匀离散化,平均切分点云。由于x方向上点柱个数为W,y方向上点柱个数为H,对每个点进行点柱归类,得出各点柱在伪图像中的索引(索引为(B,Z,Y,X)维度上)、各点柱内部32个点的坐标信息(32为点柱内的点最大数量)、各点柱存在的有效点个数。
  由于特征编码阶段使用mlp进行特征编码,使用H*W个pillars处理时存在很多空点柱,属于无效信息。因此为减少MLP的参数量,定义出一个num_voxelmax ,在进行体素特征生成步骤中,记录所有有效点柱,将存储的索引维度进一步转为(num_voxelmax ,4)、点柱特征转为(num_voxelmax ,32,4),点柱有效点数量转为(num_voxelmax )。进一步对体素内的数据进行去中心化和去重心化操作,生成10通道的维度特征,其中通道10分别代表(x,y,z,I,xc,yc,zc,xp,yp,zp)。
即(xc,yc,zc)为点柱内各点相对于当前点柱几何中心的偏移,(xp,yp,zp)为点柱内各点相对于当前点柱内有效点重心的偏移。至此完成体素化操作,最终输出有效点柱数量转为(1 )、点柱相对于伪图像的索引(num_voxelmax ,4)(相对于(B,Z,Y,X)各维度 ) 、点柱输入特征为(num_voxelmax ,32, 10 ) 。

特征编码

  特征(num_voxelmax ,32, 10 ) ,特征编码使用简化的(MLPsimple=Linear + BN + ReLU),对每个点使用MLPsimple,生成一个(num_voxelmax ,64,32)的特征。其中64代表特征通道数,32代表每个pillar中的最大点数。此时将特征维度进行升维,主要防止维度过小后续池化卷积会将梯度损失掉,因此先进行升维。再对pillar中的点维度进行最大池化操作,获取pillar中最代表性的特征,得到(num_voxelmax ,64)的特征。

点柱特征映射(伪图像生成)

  通过点柱特征(num_voxelmax ,64)、点柱位于伪图像索引(num_voxelmax ,4)、有效点柱数量(1)将点柱特征映射到伪图像对应的像素位置,其余部分补0,生成最终的伪图像稀疏特征。(B,64,Y,X),其中B表示输入batch中的当前id,64代表特征通道维度。

Backbone

backbone 部分结构图如下所示:
在这里插入图片描述
  backbone部分采用可以采用任意的2d骨干网,而文章采用类似FPN的格式,使用一个自上而下,另一个自下而上进行特征的编码与融合,最终输出一个伪图像编码特征(B,384,Y/2,X/2),完成特征提取过程。

Detection Head

  检测头部分属于解耦头,其中包括类别分类头(B,18,Y/2,X/2)、box回归头(B,42,Y/2,X/2)、方向分类头(B,12,Y/2,X/2)三部分。
  分类头通道18代表63,即每个伪图像特征每个像素存在6个anchor(因为3个类别,每个类别存在2个方向的anchor)。
  box回归头通道42代表6
7,每个伪图像特征每个像素存在6个anchor,每个anchor对应的预测框需要预测7个值( x, y, z, l, w, h, rt)。
  方向分类头通道12代表6*2,每个伪图像特征每个像素存在6个anchor,每个anchor对应的预测框需要预测2个值( 0度或者90度的anchor框)。
box框回归损失使用smoothL1损失函数:
在这里插入图片描述
  其中,da 表示anchor框底部的对角线长度;(xgt , ygt ,zgt ,wgt ,lgt ,hgtgt)为标注的gt目标框,(xa , ya ,za ,wa ,la ,haa)为anchor的信息。网络预测结果(Δx, Δy, Δz, Δl, Δw, Δh, Δθ)为相对于anchor数据的偏移。
  对于方向分类,使用softmax和多类别交叉熵损失函数(CE)进行方向损失函数的约束。
  为了缓解正负样本分类不平衡问题,采用focal loss进行类别标签约束。
在这里插入图片描述
其中pa 表示该anchor的类别,α=0.25,γ = 2,为focal loss的权重数据。
  正负样本划分时,判断anchor和gt之间的iou的大小来划分正负样本,大于0.6的部分代表正样本,小于0.45的部分代表负样本。在回归阶段只会考虑正样本的数据,分类则都会考虑。

总结

  文章将点云数据转为点柱形式,以伪图像特征进行特征编码,避免了复杂的3D卷积的影响,提高了3D目标检测的速度,代码实现中还有不少细节值得解析,如为了防止角度抖动,增加的角度回归时的方向偏移值、 进行iou计算时所用到的部分面积求解相关数学公式。(叉乘、点乘相关数学性质!)
  本人水平有限,若存在错误,请各位指正!

  • 21
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值