文章目录
pointpillar相关的其它文章链接如下:
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的最大贡献是在VoxelNet中 Voxel的基础上提出了一种改进版本的点云表征方法Pillar
,可以将点云转换成伪图像,进而通过2D卷积实现目标检测。
2. PointPillars的网络结构
它的网络结构如下图所示:
PointPillars整个网络结构分为三个部分:
特征编码器网络(Pillar Feature Net)
:将输入的点云转换为稀疏的Pseudo image。Backbone
:处理Pseudo image得到高层的特征Detection Head(SSD检测器)
:单阶段检测器,检测和回归3D框
整体流程如下:
(D, P, N)--> (C, P, N) --> (C, P) --> (C, H, W) --> (6C, H/2, W/2) --> bbox
2.1 点云转换成伪图像(Pointcloud to Pseudo-Image)
为了使用2D卷积框架,本文首先将点云转换为伪图像的相形式。
- Pillar 方式编码
point clouds --> (D, P, N)
其中P代表选取的Pillar数量,N是每个Pillar存储的最大点云数量,D是点云的属性
,P和N都是超参数,需要根据激光雷达的线束和Pillar中点云数量设置。(论文中,xy的分辨率为0.16m,取P=12000,N=100。),pillar中的数据太多(最多保留N个点云数),则进行随机采样,如数据太少,则用 0 进行填充。
其中D为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,反应了点与几何中心点的
相对位置
。
随后使用简化版的PointNet对张量化的 每个点云
进行 BatchNorm和ReLu
操作,生成
(
C
,
P
,
N
)
(C,P,N)
(C,P,N)大小的张量,随后对通道
C
C
C进行 最大池化
的操作并输出一个
(
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算法论文
: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
Pointpillars使用了和SECOND相同的损失函数。每个三维目标检测框可以用7个变量来描述,
(
x
,
y
,
z
,
w
,
l
,
h
,
θ
)
\left( x,y,z,w,l,h,\theta\right)
(x,y,z,w,l,h,θ),其中
(
x
,
y
,
z
)
\left( x,y,z\right)
(x,y,z)表示中心,
(
w
,
l
,
h
)
\left(w,l,h\right)
(w,l,h)表示三维框的尺度,
(
θ
)
\left(\theta\right)
(θ) 表示框的朝向信息。那么检测框回归任务中要学习的参数为这7个变量的偏移量
。
总共有三个loss:定位Loss,分类Loss和角度Loss
。其中权重比例分别是
β
l
o
c
=
2
,
β
c
l
s
=
1
,
β
d
i
r
=
0.2
\beta_{loc}=2,\beta_{cls}=1,\beta_{dir}=0.2
βloc=2,βcls=1,βdir=0.2。
定位Loss
定位loss,也就是的box的loss,总共有7个值 ( x , y , z , w , l , h , θ ) \left( x,y,z,w,l,h,\theta\right) (x,y,z,w,l,h,θ),也就是说定位loss也包含了方向loss。
后面要讲的方向分类损失,是为了避免车辆难以区分正负朝向做的分类。
方向分类Loss
方向分类损失,是为了避免目标180度错误判断而引进的。
和SECOND中相同,为了避免方向判别错误,作者引入了个Softmax损失学习物体的方向分类(softmax classification loss)
。该损失记做
L
d
i
r
L_{dir}
Ldir 。
分类Loss
有关分类损失,作者也是采用了Focal Loss
,定义如下,其中
α
=
0.25
,
γ
=
2
\alpha=0.25,\gamma=2
α=0.25,γ=2,
4. 实验设置
这部分介绍了数据集、实验的设置和数据增强。
4.1 数据集
所有的实验都使用KITTI对象检测基准数据集,它包含既有激光雷达点云又有图像的样本。样本原本分为7481个训练样本和7518个测试样本。本文将官方训练分为3712个训练样本和3769个验证样本。从验证集中创建了一个包含784个样本的最小集,并对剩余的6733个样本进行了训练。
4.2 实验设置
xy的分辨率为0.16m,最大的Pillars(P):16000,单个pillar最大的点云数量为(N):32。
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:行人被误检为自行车。