《PointPillars: Fast Encoders for Object Detection from Point Clouds》CVPR2019
PointPillars: 用于从点云进行对象检测的快速编码器
文章目录
前言
首先说应用深度学习在点云上做object detection的两个思路,一个是3D卷积
,VoxelNet是第一个endtoend的网络, 后来SECOND对此作了改进,但是仍然3D卷积的瓶颈依旧明显;另一个是投影到BEV (Bird's Eye View)图像
做二维卷积,第二种方法虽然时间更快,但是点云的稀疏性让卷积的不实用,效率很低,所就用了 Fast Encoder
,简单来说就是对点云密度比较高的地方进行卷积, 速度提升还是很明显的。处理思路依然是3d转2d,先把3维的点云转成2d的伪图像。
- 提出一种新的encoding points的方式:Pillar。与体素不同,支柱是点组织形式,表示点云以垂直列组织。支柱是在z方向上具有无限空间范围的体素。
- fast: 62Hz ,faster version-- 105 Hz, 超过SECOND三倍。但是105Hz这样的运行时间可能会被认为是过度的,因为激光雷达的工作频率通常是20Hz。
一、网络结构
图2.网络概述。该网络的主要组成部分是Pillar Featrue Net、Backbone和SSD检测头。网络首先将原始点云转换为堆叠柱张量和柱索引张量。然后用编码器使用堆叠的支柱来学习一组特征,这些特征可以分散到卷积神经网络的2D伪图像上。通过Backbone进一步提取特征。最后将特征输入SSD检测头,预测对象的3D检测框。
Point-Pillars接受点云作为输入,并估计面向汽车、行人和骑自行车的3D盒。 它由三个主要阶段组成(图2):(1)转换的特征编码器网络 稀疏伪图像的点云;(2)将伪图像处理为高级表示的二维卷积骨干;(3)检测和回归3D检测框的检测头SSD。
二、Pillar Feature Network
Pointcloud to Pseudo-Image
为了应用二维卷积结构,我们首先将点云转换为伪图像。
对于识别Car而言,识别范围为 前后左右上下[(0, 70.4), (-40, 40), (-3, 1)]
,将点云在x-y平面上投影出 H × W 个Pillar,再沿着z轴向上拉就成了柱体,每个Pillar (栅格柱子) 的大小为 0.16 x 0.16, 可以理解为图像里的一个像素, 那么伪图像的尺寸就是 440 x 500。Pillar中的每个点特征D长度9
, D=[x, y, z, r, x_c, y_c, z_c, x_p, y_p]
,其中c下标表示与支柱中所有点的算术平均值的距离,p下标表示与支柱x,y中心的偏移量。
因为~97% 的Pillar都很稀疏, 所以需要筛选出稠密(dense)的Pillar做卷积
,每个柱子中点多于N的进行采样,少于N的进行填充0。于是就形成了(D,P,N)
D=9, N为每个pillar的采样点数(设定值),P为pillar总数目,H*W。这样点云数据就表达成了一个(D,P,N)的Tensor。
这里用了一个PointNet的简化版本,其中,对于每个点,一个线性层被应用,之后接了一个BN和一个ReLU得到尺度为(C, P, N)
的Tensor,这里特征C的长度为64
,然后经过max操作得到尺寸为(C, P)
的Tensor, 一旦编码,这些特征就会分散到原始的支柱位置,以创建(实际就是变形)一个大小为(C,H,W)
的伪图像,因为反投影的Pillar个数只有P个, 剩下的将被填充为0,其中H和W表示画布的高度和宽度。至此,我们就用一个(C,H,W)的tensor完成了点云数据的表达。
请注意,线性层可以表示为跨越张量的1x1卷积,从而产生非常有效的计算。
三、Backbone
使用2D CNN处理
主干网有两个子网:一个自顶向下的网络,以越来越小的空间分辨率和a产生特征;第二个网络,执行自上而下功能的上采样和级联。 自顶向下的骨干可以用一系列的块块(S,L,F)来表征。
分为2部分
- top-down network产生空间分辨率逐步降低的feature map
- second network做upsample和concatenation,精细化feature。
top-down部分可以描述为一系列的block(S,L,F) S代表相对pseudo-image(即feature net得到的tensor)的stride。一个block有L个3x3的2D卷积层,F代表输出的channel数目。
backbone输出的tensor为(6C,H/2,W/2)
四、Detection Head
我们使用SSD[18]设置来执行3D对象检测。 类似于SSD,我们使用2D联合交叉(IoU)将先验框与ground truth 进行匹配[4]。 边界框的高度和标高未用于匹配;相反,给定2D匹配,高度和高程成为额外的回归目标。
五、Loss Function
定位Loss
我们使用SECOND[28]中引入的相同的损失函数。 ground truth box和anchor由(x,y,z,w,l,h,θ)
定义。 ground truth与anchor之间的定位回归残差重新定义:
其中xgt 和xa分别代表ground truth和anchor。
总体定位损失为:
方向loss
由于角度定位损失不能区分翻转框,我们在离散化方向[28]Ldir上使用Softmax分类损失,使网络能够学习航向。
分类loss
focal loss通过对不同样本的loss赋予不同的权重,该权重是一个与当前样本预测概率相关的值。系数为(1-p)的变种,从而达到p越小,loss权重越大的目的,即放大hard example的loss。从而使得模型更好地适应难以分类的样本。
总损失
其中Npos是正anchor、βloc=2,βcls=1,和βdir=0.2。
Pointpillar 可以识别朝向,也就是会做是否旋转180°的处理。
参考(感谢)
https://zhuanlan.zhihu.com/p/107975261
https://zhuanlan.zhihu.com/p/102994173
https://blog.csdn.net/a_123456598/article/details/107486129