文章目录[隐藏]
0. 前言
- 英文标题:PointPillars: Fast Encoders for Object Detection from Point Clouds
- 发表单位:nuTonomy,一家从麻省理工学院分离出来的创业公司开发的无人驾驶出租车公司。
- 发表时间:2019年5月7日
- 论文地址:https://arxiv.org/abs/1812.05784
- 源码链接:https://github.com/nutonomy/second.pytorch
点云中的目标检测是许多机器人应用(如自动驾驶)的一个重要部分。最近有两种主要的点云编码类型:固定编码器往往速度快,但牺牲了准确性,而从数据中学习的编码器更准确,但较慢
。本文,提出了一种新的点云编码器:PointPillars,它利用PointNets来学习由点云组成的垂直柱(柱子)
。这种编码功能可以用于任何标准的二维卷积检测体系结构。大量的实验表明,PointPillars在速度和准确性方面都大大优于以前的编码器。
性能
:fast: 62Hz , faster version-- 105 Hz, 超过SECOND三倍。但是105Hz这样的运行时间可能会被认为是过度的,因为激光雷达的工作频率通常是10-20Hz。
1. 介绍
随着计算机视觉深度学习方法的巨大进步,大量的文献研究了将视觉检测技术应用于激光雷达点云中的目标检测,虽然两种模式上由很多的相似的地方,但有两个关键的区别:1)点云具有稀疏性,而2d图像具有稠密性;2)点云是3D,而图像是2D的。
所以,点云中的目标检测不适合使用标准的图像卷积流程
( image convolutional pipelines)。
早期的方法聚焦于使用3D卷积和尝试把点云投影到图像中进行处理,下面两篇论文就分别使用了这两种方法。
3D卷积方法
:M. Engelcke, D. Rao, D. Z. Wang, C. H. Tong, and I. Posner.V ote3deep: Fast object detection in 3d point clouds using efficient convolutional neural networks. InICRA, 2017.2。
点云投影方法
:B. Li, T. Zhang, and T. Xia. V ehicle detection from 3d lidar using fully convolutional network. InRSS, 2016.2
最近的一些方法尝试从鸟瞰图来解决目标检测问题,这种俯视图的方法提供了几个优点,如缺乏尺度模糊性和几乎没有遮挡
。
鸟瞰图方法:
- X. Chen, H. Ma, J. Wan, B. Li, and T. Xia. Multi-view 3d object detection network for autonomous driving. InCVPR, 2017.1,2,5,6,8
- J. Ku, M. Mozifian, J. Lee, A. Harakeh, and S. Waslander. Joint 3d proposal generation and object detection from view aggregation. InIROS, 2018.1,2,5,6,7
- B. Yang, W. Luo, and R. Urtasun. PIXOR: Real-time 3d object detection from point clouds. InCVPR, 2018.1,2,6,8
- Y . Zhou and O. Tuzel. V oxelnet: End-to-end learning for point cloud based 3d object detection. InCVPR, 2018.1,2, 3,4,5,6,7,8
然而,鸟瞰图往往是非常稀疏的,这使得直接应用卷积神经网络不切实际和低效的。一个常见的解决这个问题的方法是将地平面划分成一个规则的网格。这样的方法可能是次优的,因为硬编码的特征提取方法可能不能推广到新的配置。为了解决这些问题,有人在PointNet上构建设计开发,VoxelNet 是首个真正在这个领域进行端对端学习的方法
。VoxelNet将空间划分为体素,对每个体素应用一个PointNet,然后使用3D卷积中间层来合并垂直轴,随后将其应用于二维卷积检测架构。
Pointnet
:C. R. Qi, H. Su, K. Mo, and L. J. Guibas. Pointnet: Deep learning on point sets for 3d classification and segmentation. InCVPR, 2017.2,3VoxelNet
:Y . Zhou and O. Tuzel. Voxelnet: End-to-end learning for point cloud based 3d object detection. InCVPR, 2018.1,2, 3,4,5,6,7,8
虽然VoxelNet的性能很好,但4.4 hz的推断时间还是太慢了,无法实时部署。最近的SECOND方法提高了VoxelNet的推理速度,但三维卷积仍然是一个瓶颈。
SECOND
:Y . Yan, Y . Mao, and B. Li. SECOND: Sparsely embedded convolutional detection.Sensors, 18(10), 2018.1,2,3,5,6, 7,8
本文推出了PointPillars方法:一种3D目标检测方法,仅使用二维卷积层就能实现端到端学习
。PointPillars使用了一种新颖的编码器,它可以学习点云的柱子(垂直柱)上的特性,从而预测面向3D的目标,这种方法有以下几个优点
:
- 通过学习特性而不是依赖于固定的编码器,PointPillars可以利用点云所代表的全部信息.
- 通过在柱子上而不是体素上操作。
- 这种方式非常高效,因为所有的关键操作都被表述为2D卷积,这在GPU上也是非常的高效。
- 学习特性的另一个好处是PointPillars不需要手工调优就可以使用不同的点云配置。
PointPillars在KITTI数据集中也做了测试,同时使用了BEV和3D的方法测试了汽车、行人和自行车的检测性能。
1.1 相关工作
(1)CNNs用于目标检测
从Girshick等人的开创性工作开始,卷积神经网络(CNN)架构是图像检测中最主流的技术。
R. Girshick, J. Donahue, T. Darrell, and J. Malik. Rich feature hierarchies for accurate object detection and semantic segmentation. InCVPR, 2014.2
随后的一些文章中,主张采用两阶段解决目标检测的问题。第一阶段
,区域生成网络 (RPN, region proposal network)提取候选proposals。第二阶段
,经过裁剪和调整的proposals由第二阶段进行分类。
RPN网络把一个任意大小的图片作为输入,输出一系列的矩形object proposals,每个object proposals都带一个目标得分。
在单阶段方法中,所有的操作在一个阶段完成
。最近Lin等人论证了他们所提出的焦损失函数( focal loss function)
,无论是在精度和运行时间方面,使用单阶段方法会优于两阶段方法。
T.-Y . Lin, P . Goyal, R. Girshick, K. He, and P . Dollár. Focal loss for dense object detection.PAMI, 2018.2,5
在这篇文章中,使用的是正是单阶段检测方法。
(2)激光点云中的目标检测
本质上点云中的目标检测是一个的三维问题。很自然人们会联想到使用3D卷积,然而3D卷积的速度很慢。最近的大多数方法都是通过将3D点云投影到地平面或图像平面来提高运行时间,然后就可以通过标准的图像检测体系的技术进行检测了,这种方法被MV3D、AVOD、PIXOR和Complex YOLO所采用。
其中一个具有代表性的为PointNet,它提供了一个完整的端到端的方案,VoxelNet是第一个将PointNet应用于激光了雷达进行目标检测的方法。然而VoxelNet的速度很慢,对于单帧点云需要225ms的推断时间(4.4Hz)。
最近的SECOND方法虽然对VoxelNet方法进行了改进,它的性能和速度(20hz)都有很大的提高,但是它仍然使用的是开销很大的3D卷积技术。
本文的motivation其实就是跟着VoxelNet 和 SECOND 的思路做下去
。VoxelNet 的方法是直接用体素做3D卷积,SECOND 用了稀疏的卷积,而这篇文章则使用了pillar的方式,很讨巧地转成了2维卷积。从而做到加深网络,增加了速度和准度。
1.2 贡献
- 本文提出了一种新颖的点云编码器和网络PointPillars,可以直接对点云进行操作,并且支持端到端3D物体检测网络的训练。
- 将pillars应用于稠密的2D卷积,能够在62Hz下进行推理,比其他方法快2-4倍。
- 本文在KITTI数据集上进行实验,并且表现出了在BEV和3D方法上最好的的结果。
- 本文进行了一些消融实验,展示了它强大的检测性能。
2. PointPillars的网络结构
它的网络结构如下图所示:
它主要有3个主要阶段:
- 特征编码器网络:一种将点云转换为稀疏的伪图像。
- 深度的2D卷积结构(Backbone)
- SSD检测器
2.1 点云转换成伪图像(Pointcloud to Pseudo-Image)
为了使用2D卷积框架,本文首先将点云转换为伪图像的相形式。
按照点云数据所在的X,Y轴(不考虑Z轴)将点云数据划分为一个个的网格,凡是落入到一个网格的点云数据被视为其处在一个pillar里
。每个点云用一个9维的向量表示,分别为
(
x
,
y
,
z
,
r
,
x
c
,
x
y
,
z
c
,
x
p
,
y
p
)
(x,y,z,r,x_c,x_y,z_c,x_p,y_p)
(x,y,z,r,xc,xy,zc,xp,yp)。
x
,
y
,
z
,
r
x,y,z,r
x,y,z,r:表示点云的真是坐标和反射强度;
x
c
,
y
c
,
z
c
x_c,y_c,z_c
xc,yc,zc:表示点云所处Pillar中所有点的
几何中心
;x
p
,
y
p
x_p,y_p
xp,yp:为
x
−
x
c
,
y
−
y
c
x-x_c,y-y_c
x−xc,y−yc,反应了点与几何中心点的
相对位置
。
假设每个样本中有
P
P
P个非空的pillars,每个pillar中有N个点云数据,那么这个样本就可以用
(
D
,
P
,
N
)
(D,P,N)
(D,P,N)张量来表示。
为了保证每个pillar中有N个点云数据:如果每个pillar中的点云数据超过
N
N
N 个,那么就随机采样至
N
N
N个;如果每个pillar中的点云数据少于
N
N
N个,少于的部分就填充为0。
然后使用简化版的PointNet对张量化的每个点云
进行BatchNorm和ReLu操作,生成
(
C
,
P
,
N
)
(C,P,N)
(C,P,N)大小的张量,随后对通道进行最大池化的操作并输出一个
(
C
,
P
)
(C,P)
(C,P)的张量。为了获得为图像的特征,坐着将
P
P
P转化为
(
H
,
W
)
(H,W)
(H,W),最后获得
(
C
,
H
,
W
)
(C,H,W)
(C,H,W)的伪图片。
BatchNorm
:S. Ioffe and C. Szegedy. Batch normalization: Accelerating deep network training by reducing internal covariate shift.
CoRR, abs/1502.03167, 2015.4ReLU
:V . Nair and G. E. Hinton. Rectified linear units improve restricted boltzmann machines. InICML, 2010.4
2.2 主干(Backbone)
Backbone部分与Voxelnet类似,它有两个子网络,其中一个网络
不断缩小特征图的分辨率,同时提升特征图的维度,因此获得了三个不同分辨率的特征图。另一个网络
对三个特征图进行上采样至相同大小,然后进行concatenation。之所以选择这样架构,是因为不同分辨率的特征图负责不同大小物体的检测。比如分辨率大的特征图往往感受野较小,适合捕捉小物体(在KITTI中就是行人)。
2.3 SSD
本文使用了SSD算法用于3D目标检测,与SSD类似,IoU部分也是2D的形式,高度信息不参与到匹配中,相反,高度信息是一个额外的回归目标。
下面简单介绍一下SSD算法:
SSD算法论文
:W. Liu, D. Anguelov, D. Erhan, C. Szegedy, S. Reed, C.-Y . Fu, and A. C. Berg. SSD: Single shot multibox detector. In ECCV, 2016.2,4SSD和YOLO一样,都是one-stage的经典构架
。SSD这个目标检测网络全称为Single Shot MultiBox Detector,重点在MultBox上,这个思想很好地利用了多尺度的优势,全面提升了检测精度,之后的YOLOv2就借鉴了SSD这方面的思路才慢慢发展起来。
3. 实现细节
这部分描述了网络参数和优化了的损失函数。
3.1 Network
而不是预先训练我们的网络,所有的权值被初始化随机使用均匀分布。
C
=
64
C=64
C=64
- Car的
S
=
2
S=2
S=2,行人和自行车的
S
=
1
S=1
S=1
- 两个自网络都有3个blocks,
B
l
o
c
k
1
(
S
,
4
,
C
)
,
B
l
o
c
k
2
(
2
S
,
6
,
2
C
)
,
a
n
d
B
l
o
c
k
3
(
4
S
,
6
,
4
C
)
Block1(S, 4, C), Block2(2S, 6, 2C), and Block3(4S, 6,4C)
Block1(S,4,C),Block2(2S,6,2C),andBlock3(4S,6,4C)。
3.2 Loss
总共有三个loss:定位loss、方向loss和分类loss。
与SECOND使用了类似的损失函数。Ground truth boxes and anchors的定义为
(
x
,
y
,
z
,
w
,
l
,
h
,
θ
)
(x,y,z,w,l,h,\theta)
(x,y,z,w,l,h,θ)。其中
(
x
,
y
,
z
)
(x,y,z)
(x,y,z)为中心,
w
,
h
,
l
w,h,l
w,h,l为尺寸数据,
θ
\theta
θ为方向角。那么检测框回归任务中要学习的参数为这7个变量的偏移量。
和SECOND中相同,为了避免方向判别错误,作者引入了个Softmax损失学习物体的方向。该损失记做
L
d
i
r
L_{dir}
Ldir 。
有关分类损失,作者也是采用了Focal Loss,定义如下:
4. 实验设置
这部分介绍了数据集、实验的设置和数据增强。
4.1 数据集
所有的实验都使用KITTI对象检测基准数据集,它包含既有激光雷达点云又有图像的样本。样本原本分为7481个训练样本和7518个测试样本。本文将官方训练分为3712个训练样本和3769个验证样本。从验证集中创建了一个包含784个样本的最小集,并对剩余的6733个样本进行了训练。
4.2 实验设置
xy的分辨率为0.16m,最大的Pillars(P):12000,单个pillar最大的点云数量为(N):100。
NMS的IoU为0.5。
Car的x,y,z范围为: [(0, 70.4), (-40, 40), (-3, 1)],它的anchor的宽度、长度和高度为:(1.6, 3.9, 1.5),z中心点为-1m。匹配时正阈值为0.6,负阈值为0.45。
行人和自行车的范围为: [(0, 48), (-20,
20), (-2.5, 0.5)]。行人的anchor的宽度、长度和高度为: (0.6, 0.8, 1.73),z中心为-0.6m,自行车的anchor的宽度、长度和高度为: (0.6, 1.76, 1.73),z中心为-0.6m。匹配的正负阈值分别为0.5和0.35。
4.3 数据增强
(这一部分需要结合代码加深理解。。。)
数据增强对于KITTI基准测试的良好性能至关重要。和SECOND一样,首先给所有的3D box内的点云创建一个索引查找表。
所有的gt box都会执行下面的数据增强操作:
- 自转和平移:每个box都单独做自转和平移。
- 随机的镜像翻转(x轴)和尺度缩放:随机镜像翻转x轴,然后进行全局旋转和缩放。
- 定位噪声:x,y,z都带一个随机噪声N(0,0.2)
5. 结论
(1)定量分析
所有检测结果均使用KITTI官方评估检测指标进行测量,这些指标包括:鸟瞰图(BEV)、3D、2D和平均方向相似度(AOS,average orientation similarity)。BEV和3D指标不考虑方向,方向使用AOS的方式进行评估
,table1、table2和table3分别为bev、3D和AOS的方式进行评估。
(2)定性分析
Figute是带有检测框的检测结果。
Figure4a:一个标准的检测;
Figure4b:展示了行人很容易与环境中狭窄的垂直特征(如杆子或树干)混淆;
Figure4c:表明在gt框中,没有被标注的框也被检测出来了;
Figure4d:行人被误检为自行车。
版权声明:本文为CSDN博主「非晚非晚」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/QLeelq/article/details/121641162
暂无评论