1、本文速览
在自动驾驶的3d目标检测中,速度与精度一直是工业界部署追求的,但两者难以兼得,本文提出PointPillars模型正基于此,取得了速度与精度上的双重提高。即使仅仅使用了lidar数据,也在kitti上取得了3d和BEV视角上的SOTA pipeline。
论文:https://arxiv.org/pdf/1812.05784.pdf
代码:https://github.com/nutonomy/second.pytorch
2、背景
传统3D目标检测几个模型的比较,以PointNet,VoxelNet,SECOND为例:
? PointNet是最早将CNN卷积应用在点云检测领域,由于网络的最大迟化影响,导致点云缺失局部特征;
? VoxelNet引入端到端的特征学习,VoxelNet也基于PointNet进行设计,导致局部特征缺失。同时VoxelNet运用了 3D 卷积,计算复杂度较高,速度只有4.4 Hz;
? SECOND 将速度提升到了 20Hz,但是仍然保留了3D卷积。
PointPillar基本思想:将三维点云分为一些柱体pillars,利用PointNet提取柱体pilars特征,将特征映射为2D伪图像,对2D图像使用SSD提取目标检测框和类别。
3、PointPillars框架
PointPillars包含三个模块,Pillar Feature Net、Backbone(2D CNN)、Detection Head(SSD)。
功能简述如下:
(1)Pillar Feature Net:将点云转化为伪图像的特征编码网络,即俯视图划分H × W个网格,将网格沿Z轴提升为柱体pillar,并用pointNet提取特征转伪图像;
(2)Backbone(2D CNN):基于为图像的2D骨干特征提取网络,提取不同尺度的图像特征;
(3)Detection Head(SSD):利用SSD模型检测和回归3D框检测头。
3.1 Pillar Feature Net
(1)画网格。在俯视图xy平面上,划分H × W的均匀网格,将H × W个均匀网格沿Z轴拉伸形成pillar,xy网格的分辨率为0.16m;
(2)扩维度。原始的点云数据point有(x,y,z,r)4个维度,r代表反射率。将数据维度扩展为9维,扩展维度(x,y,z,r,x_c,y_c,z_c,x_p,y_p),其中x_c,y_c,z_c是点相对于pillar中所有点的质心偏差,x_p,y_p是对点相对于pillar中所有点的物理中心偏差;
(3)补点。每个pillar中点多于N的进行采样,少于N的进行填充0。形成(D,P,N)维度的张量,其中D=9(扩展后的数据维度), N为每个pillar的采样点数N=100,P为pillar总数目P=12000,H*W;
(4)提特征。使用PointNet提取pillar特征,PointNet由一个BatchNorm层、ReLU层、全连接层组成,维度变为(C, P, N) 张量;
(5)池化。在N这个维度上做max operation,得到(C,P)的tensor,变形得到(C,H,W)张量。(C,H,W)张量正好类似图像的维度。
3.2 Backbone(2D CNN)
(1)特征提取层。类似特征金字塔网络(FPN),至上而下逐级提取伪图像的特征,分为1/2、1/4、1/8三个尺度的特征图;
(2)特征加强层。类似于Unet网络,至下而上逐级解码不同尺度的特征图;
(3)特征图拼接。将来自不同三个尺度的特征图在通道尺度上进行拼接。此时生成维度为(H/2,W/2,6C)的张量。
3.3 Detection Head(SSD)
Anchor框匹配groundtruth框采用2D IOU匹配,直接从BEV视角进行匹配,不考虑高度信息。每个类别的检测范围、anchor框大小、正负样本匹配阈值分别为:
(1)车:x、y、z的检测范围为[(0, 70.4), (-40, 40), (-3, 1)]m,anchor先验框的长宽高设定为(1.6, 3.9, 1.5)m,阈值设置为大于等于0.65为正样本,小于0.45为负样本,中间不计算损失;
(2)行人与自行车:x、y、z的检测范围为[(0, 48), (-20, 20), (-2.5, 0.5)],行人anchor先验框的长宽高设定为(0.6, 0.8, 1.73)m,自行车的anchor先验框的长宽高设定为(0.6,1.76, 1.73)m,两类别的阈值设置均大于等于0.5为正样本,小于0.35为负样本,中间不计算损失。
4、数据增强和损失函数
4.1 数据增强
(1)类似SECOND,为所有类别和点云的ground truth 3D boxes创建了查询表;
(2)对每个样本中的车、行人、自行车分别选取15、0、8的ground truth,将这些放入当前的点云中;
(3)对所有的ground truth 3D boxes进行了增强,每个框进行旋转和平移;
(4)对所有的点云和框进行了全局增强,具体方法是:沿x轴应用随机镜像翻转,然后全局旋转、缩放和平移来加入模拟位置噪音。
4.2 损失函数
采用同SECOND相同的损失函数。框的维度定义为(x, y, z, w, l, h,θ)。
(1)定位回归损失
Xgt与xa分别表示groundtruth框与predicte框的长度,da为对角线的长度:
最终定位损失采用SmoothL1,考虑到3类别物体的框大小不会发生过多变化。
(2)分类损失
分类损失采用FcolLoss损失,FcolLoss可以有效避免样本数量不均衡产生的影响,相当于给数量少的样本更大的权重。
(3)总损失
在角度预测时候不可以区分两个完全相反的box,所以PiontPillars的检测头中还添加了对一个anchor的方向预测。这里使用了一个基于softmax的方向分类box的两个朝向信息。最终总损失如下:
其中,α= 0.25,γ=2,Npos为正样本框的数量,βloc = 2,βcls = 1, βdir = 0.2。
5、实验
模型速度和精度对比
PP代表pointpillars模型,M代表MV3D , A代表AVOD , C代表 ContFuse, V代表 VoxelNet, F代表Frustum PointNet, S代表SECOND, P+ 代表PIXOR++。从图中看出pointpillars确实能兼顾速度和精度。
pointpillars在BEV下的检测结果。
pointpillars在3D下的检测结果。
pointpillars在BEV(上图)和框投影到图像上的可视化效果。
6、结论
PointPillars是一种可以在激光雷达点云上进行端到端训练的网络和编码器。在 KITTI中,PointPillars以较快的速度展示了较高的检测性能(BEV 和3D),实验结果表明,PointPillars为3D对象检测提供迄今为止最好的激光雷达pipeline。
微信公众号关注“视觉算法学堂”,学习更多人工智能视觉技术干货!
本文暂时没有评论,来添加一个吧(●'◡'●)