当前位置:首页 > 资讯 > 正文

PointPillar:利用伪图像高效实现3D目标检测

PointPillar:利用伪图像高效实现3D目标检测

3D点云检测的现状如何

最近几年点云的三维目标检测一直很火,从早期的PointNet、PointNet++,到体素网格的VoxelNet,后来大家觉得三维卷积过于耗时,又推出了Complex-yolo等模型把点云投影到二维平面,用图像的方法做目标检测,从而加速网络推理。

所以在点云上实现3D目标检测通常就是这三种做法:3D卷积、投影到前视图或者鸟瞰图(Bev)。

3D卷积的缺点是计算量较大,导致网络的推理速度较慢。投影的方式受到点云的稀疏性的限制,使得卷积无法较好的提取特征,效率低下。而后来研究热点转向了采用鸟瞰图(Bev)的方式,但存在的明显的缺点就是需要手动提取特征,不利于推广到其他的雷达上使用。

拨开那些花里胡哨的网络,有什么更靠谱的模型能够权衡速度和精度做三维目标检测呢?

2

横空杀出的PointPillars

这是一篇前两年的点云目标检测网络,为什么重温它是因为小编在学习百度Apollo 6.0时发现它被集成进去作为激光雷达的检测模型了。在这里给大家解析一下该网络模型,看看有啥特点!

Pointpillars的创新点在于:提出了一种新的编码方式,利用柱状物的方式生成伪图像。

Pointpillars由三大部分组成:

如下图所示:

网络结构

Pointpillars的性能表现:具有明显的速度优势,最高也可达到105Hz,且对比仅使用点云作为输入的3D目标检测的方法有精度上的提升。

3

PointPillars的详细分析

想要学习一个网络模型,不管是图像还是点云的检测:

数据处理环节:

Pointpillar设计了一套编码方式将激光雷达输出的三维坐标转换到网络输入的形式,操作如下:

(D, P, N)--> (C, P, N) --> (C, P) --> (C, H, W)

上述的转换流程流程如图所示:

生成伪图像的过程

特征提取环节:

本文中的编码器的输出特征维度C=64,除了第1个Block中汽车的步幅S=2,行人和骑自行车的人的步幅为1,第2和第3个block中采用了相同的步幅。并对3个块进行上采样,最后将3个上采样的块进行通道拼接,可以为检测头提供6C维度的特征。

数据流在下采样和上采样的过程中并不复杂:

下采样:Block1(S,4,C),Block2(2S,6,2C),和Block3(4S,6,4C)

上采样:Up1(S,S,2C),Up2(2S,S,2C)和Up3(4S,S,2C)。

如下图所示:

特征层结构

检测头模块

论文中作者使用SSD进行3D目标检测。与SSD相似,使用了2D联合截面(IoU)将先验盒和地面的真实情况进行匹配。Bbox的高度和高程没有用于匹配,取而代之的是2D匹配,高度和高程成为附加的回归目标。

损失函数部分

检测网络的损失函数一般都是有分类和回归两部分组成,分类损失用于给出目标的类别,回归损失用于给出目标的位置,而三维目标检测相比图像的二维检测多了3个参数。

3D Box由(x,y,z,w,h,l,0)进行定义:

其中分类损失:

回归损失:

通过加权和的方式得到总的损失函数:

实验仿真结果

最后我们看一下文章给出的仿真结果:

不管从速度上还是精度上相比于几种经典模型还是有一定程度的提高,但其实我们可以发现在行人等检测仍然徘徊在50%左右,和图像的目标检测动仄80%~90%的mAP还有很大的提升空间。

这里是运行源码的一份评估报告,不过源码中将车辆和行人等分开到两份配置中训练,估计是因为大小特征不一,怕合起来影响刷榜精度吧。

4

PointPillars的优缺点在哪里?

梳理一遍这个检测网络后,我们回顾对比一下其他方法,不难发现它的优势不外乎以下几点:

该网络侧重于三维数据形式的转换编码,所以在后续几个环节仍然有不少优化的空间,比如:

通过阅读开源工程,发现它提供了一个效果展现的可视化工具,和小编以前做的联合标注工具很相似,如下图所示,针对同步后的激光雷达和摄像头数据,在可视化三维点云空间的同时,将感知的结果投影到图像的透视投影视角上以及点云的鸟瞰图视角中。

最主要的是这个工具可以用于其他的检测模型,只要在右侧的配置栏提供输入输出信息即可,强烈推荐!

本文仅做学术分享,如有侵权,请联系删文。

最新文章