PIXOR: Real-time 3D Object Detection from Point Clouds
Bin Yang, Wenjie Luo, Raquel Urtasun
IEEE Conference on Computer Vision and Pattern Recognition (CVPR),2018
https://github.com/ankita-kalra/PIXOR
该文章解决了在自动驾驶环境下从点云实时检测三维物体的问题。因为检测是安全的必要组成部分,所以计算速度至关重要。然而,由于点云的高维性,现有方法的计算成本很高。本文通过从鸟瞰图( BEV )中表示场景来更有效地利用3D数据,并提出PIXOR,这是一种无需处理的、单级的检测器,输出从像素级别的神经网络定向解码估计3D对象。模型的输入形式、网络架构和优化器是为了平衡高精度和实时效率而特别设计的。作者在两个数据集上验证PIXOR的效果——KITTI BEV对象检测基准数据集和大规模3D车辆检测基准数据集。在这两个数据集上,我们表明检测器在平均精度(AP)方面明显优于其他最先进的方法,同时仍以大于28 FPS的速度运行。
在过去的几年里,我们已经看到了大量利用卷积神经网络来产生精确的2D物体检测的方法,通常是从单个图像为主的模型(如Faster R-CNN和YOLO)。然而,在机器应用中,例如自主驾驶,我们对检测3D空间中的物体更为感兴趣。为了规划安全路线,这是运动规划的基础。3D对象检测的最新方法利用不同的数据源。基于相机的方法利用单目或立体图像(双目摄像机RGB+HHA)。然而,从2D图像中精确的3D估计是困难的,特别是在长距离范围内。随着廉价RGB-D传感器如微软Kinect、英特尔RealSense和苹果PrimeSense的普及,出现了几种利用深度信息并将其与RGB图像融合的方法。与单目方法相比,它们已经显示出显著的性能提升。在自动驾驶的情况下,像LIDAR(光探测和测距)这样的高端传感器更常见,因为为了安全需要更高的精确度。处理LIDAR数据的主要困难是传感器以点云的形式产生非结构化数据,每360度扫描通常包含大约10 - 5个3D点。这给现代探测器带来了巨大的计算挑战。
在三维物体检测的背景下,已经探索了不同形式的点云表示。主要的想法是形成一个结构化的表示,其中可以应用标准卷积运算。现有表示主要分为两种类型: 3D体素网格和2D投影。
3D体素网格将点云转换成规则间隔的3D网格,其中每个体素单元可以包含标量值(例如,占用率)或矢量数据(例如,根据该体素单元内的点计算的统计数据)。3D卷积通常用于从体素网格中提取高阶表示。然而,由于点云本质上是稀疏的,因此体素网格非常稀疏,很大一部分计算是冗余和不必要的,用这种表示的典型系统仅运行在1-2 FPS。
另一种方法是将点云投影到平面上,然后将平面离散为基于2D图像的表示,在此应用2D卷积。在离散化期间,手工制作的特征(或统计)被当做2D图像的像素值计算。常用的投影是范围视图(即360度全景视图)和鸟瞰图(即俯视图)。这些基于2D投影的表示更加紧凑,但是它们在投影和离散化过程中会带来信息损失。例如,范围视图投影将具有失真的对象大小和形状。为了减轻信息损失,MV3D建议将2D投影与摄像机图像融合,以带来额外信息。然而,融合模型相对于输入模态的数量具有近似线性的计算成本,使得实时应用不可行。
在这篇论文中,作者提出了一种精确的实时三维物体检测器,称之为PIXOR (ORiented 3D object detection from PIXel-wise neural network predictions),它是在点云上运行的网络。PIXOR是一种单级、无二次处理(例如YOLO和SSD)的密集物体检测器,它以高效的方式利用2D鸟瞰图(BEV)表示。我们选择BEV表示,因为它在计算上比3D体素网格更友好,并且还保留了度量空间,这使得我们的模型能够探索关于对象类别大小和形状的先验。我们的探测器在鸟瞰图中输出真实世界尺寸的精确定向边界框。请注意,这些是三维估计,但必须假设物体在地面上,因为车辆不会飞,这也是自动驾驶场景中的合理假设。
作者在两个数据集上展示了其方法的有效性。具体来说,PIXOR在所有先前的方法中,实现了KITTI鸟瞰对象检测基准的最高平均精度(AP),同时也是其中运行最快的(超过28FPS)。作者还在KITTI上提供了深入的消融研究,以调查每个模块贡献了多少性能增益,并通过将其应用于大规模TOR4D数据集来证明PIXOR的可扩展性和泛化能力。
在本文中,作者提出了一种高效的三维物体检测器,它能够在给定LIDAR点云的情况下产生非常精确的边界框。这里的边界框估计不仅包含3D空间中的位置,还包含航向角,因为准确预测这对于自主驾驶非常重要。我们利用LIDAR点云的2D表示,因为它比3D体素网格表示更紧凑,因此可以进行实时推断。图1显示了提议的3D物体检测器的概述。
由于要用标准卷积神经网络执行卷积操作,因此我们必须假设输入位于网格上。然而,3D点云是非结构化的,因此标准卷积不能直接应用在其上。一种选择是使用体素化来形成3D体素网格,其中每个体素单元包含位于该体素内的点的某些统计数据。为了从三维体素网格中提取特征表示,经常使用三维卷积。但这3DCNN的计算代价非常昂贵,并且因为LIDAR点云非常稀疏,以至于大多数体素单元都是空的。
相反,我们可以单独从鸟瞰图(BEV)中描绘场景。通过将维度从三维降低到二维,而不会丢失点云中的信息。因为我们可以将高度信息保留到颜色通道中。不仅如此,我们还有效地得到了更紧凑的表示方式,因为可以对BEV表示应用2D卷积。在自动驾驶的情况下,因为感兴趣的对象是在同一场地上,这种尺寸减小是合理的。除了计算效率之外,BEV表示还有其他优势。与前视图表示相比,由于对象不相互重叠,因此它简化了对象检测的问题。它还保留了度量空间,因此网络可以利用物体物理尺寸的先验信息。
体素化LIDAR表示的常用特征是占有率occupancy、强度intensity(也称反射率)、密度和高度特征(Multi-view 3d object detection network for autonomous driving中提到过)。在PIXOR中,作者只使用占用率和强度作为特征。作者定义感兴趣的场景的三维物理尺寸 L × W × H L × W × H L×W×H。然后,计算分辨率为 d L × d W × d H d_L×d_W×d_H dL×dW×dH的占用率特征,再计算分辨率为 d L × d W × H d_L×d_W×H dL×dW×H的强度特征。注意,作者在占用率特征中增加了两个额外的通道,以覆盖范围外的点。最终表示的形状为 L d L × W d W × ( H d H + 3 ) \frac{L}{d_L}\times\frac{W}{d_W}\times(\frac{H}{d_H}+3) dLL×dWW×(dHH+3)
PIXOR使用一个全卷积结构,设计用于密集定向的3D物体检测,并且没有使用类似于R-CNN的分支处理,相反网络在单个阶段输出像素预测,每个预测对应于3D对象估计。因此,根据定义,PIXOR的召回率是100%。多亏了完全非传统的架构,这样密集的预测可以非常有效地计算出来。就网络预测中3D对象的编码而言,作者构建了直接编码的模型,而不求助于预定义的object anchors。所有这些设计使得PIXOR变得非常简单,并且由于网络架构中的零超参数而得到很好的推广。具体来说,不需要设计object anchors,也不需要调整从第一阶段传递到第二阶段的关注区域以及相应的非最大抑制阈值。
整个体系结构可以分为两个子网络:主干网络Backbone network和头网络Header network。主干网络用于提取卷积特征并映射成输入的一般表示。它具有很高的表示能力来学习一个健壮的特征表示。头网络用于进行特定于任务的预测,在该例子中,它有一个具有多任务输出的单分支结构:对象分类和定向。
卷积神经网络通常由卷积层和池化层组成。卷积图层用于提取输入要素的过度完整表示,而池化图层用于对要素地图大小进行下采样,以节省计算并帮助创建更健壮的表示。许多基于图像的物体检测器中的主干网络通常具有16倍下采样因子,并且通常被设计成具有更少的高分辨率层和更多的低分辨率层。它对图像很有效,因为对象通常像素尺寸很大。然而,在本文的情况下,这将导致一个问题,因为对象可能非常小。当离散分辨率为0.1m时,典型车辆的尺寸为18×40像素。16倍下采样后,它仅覆盖约3像素。
一个直接的解决方案是使用更少的池化层。然而,这将减小最终特征图中每个像素的感受野的大小,这限制了表现能力。另一个解决方案是使用膨胀卷积,但这将导致在高级特征地图中出现棋盘状伪像(checkerboard artifacts)。作者的解决方案很简单,使用16倍下采样因子,但是做了两个修改。首先,在较低的级别添加更多的通道数量较少的层,以提取更多的细节信息。其次,我们采用了类似FPN的自上而下的分支,将高分辨率特征图和低分辨率特征图相结合,以便对最终的特征表示进行上采样。
从Figure2可以看出主干网络中总共有五个层块。第一块由两个卷积层组成,通道为32,步长为1。第二至第五块由残差层组成(层数分别等于3、6、6、3)。每个残差块的第一卷积具有步长2,以便对特征图进行下采样。总的来说,下采样系数是16。为了对要素图进行上采样,其添加了一条自上而下的路径,每次对要素图进行2倍的上采样。然后,通过像素求和,这与相应分辨率的自下而上的特征图相结合。使用两个上采样层,这导致最终的特征图具有四倍下采样的大小。
头网络是一个多任务网络——对象识别和方向定位。它被设计成小巧高效。分类分支输出1个通道特征图,跟sigmoid函数激活;回归分支输出线性的6通道特征图。在这两个分支之间分享权重的层数上存在权衡。一方面,我们希望更有效地利用重量。另一方面,由于它们是不同的子任务,我们希望它们更加独立和专业化。在下一章中,我们对这种权衡进行了一项调查性实验,发现两项任务的权重分配会带来稍微更好的性能。
我们将每个对象参数化为定向的bounding box b { θ , x c , y c , w , l } \{θ,x_c,y_c,w,l\} {θ,xc,yc,w,l},每个元素对应于在 [ − π , π ] [-π,π] [−π,π]范围内的航向角、对象的中心位置 ( x c , y c ) (x_c,y_c) (xc,yc)和对象的大小 ( w , l ) (w,l) (w,l)。与基于长方体的三维物体检测相比,我们省略了沿Z轴的位置和尺寸,因为在像自主驾驶这样的应用中,感兴趣的物体被限制在同一个接地面上,因此我们只关心如何在那个平面上定位它。给定这样的参数化,回归分支的表示是 { c o s ( θ ) , s i n ( θ ) , d x , d y , w , l } \{cos(θ),sin(θ),dx,dy,w,l\} {cos(θ),sin(θ),dx,dy,w,l},对于位置 ( p x , p y ) ( p_x,p_y ) (px,py) (如图3中的红点所示)。注意,航向角被分解为两个相关值,以加强角度范围约束。
在推理过程中,我们将θ解码为 a t a n 2 ( s i n ( θ ) , c o s ( θ ) ) atan2(sin(θ),cos(θ) ) atan2(sin(θ),cos(θ))。 ( d x , d y ) ( dx,dy ) (dx,dy)对应于从像素位置到物体中心的位置偏移。 ( w , l ) ( w,l ) (w,l)对应于对象大小。值得注意的是,对象位置和大小的值在现实世界的度量空间中。最后的学习目标是 { c o s ( θ ) , s i n ( θ ) , d x , d y , l o g ( w ) , l o g ( l ) } \{cos(θ),sin(θ),dx,dy,log(w ),log(l)\} {cos(θ),sin(θ),dx,dy,log(w),log(l)},它在训练集之前被标准化为具有零均值和单位方差。
与传统的多任务网络类似,其Loss的计算方式如下:
其中focal_loss为分类的损失,smooth为回归的损失。