万思宇
(上海交通大学电子信息与电气工程学院,上海 200240)
3D车辆检测是自动驾驶系统的重要组成部分。自动驾驶汽车需要在三维坐标系中对障碍物进行精确检测和定位,以避免车祸的发生。现代自动驾驶汽车普遍配备高精度摄像头与深度传感器,如测距激光雷达,来提供车辆前方的准确图像以及车辆前方物体的深度信息,这些信息的具体数据形式如图1所示。
已有的车辆检测研究主要分为2类,1类是基于摄像机图像的检测,另1类是基于激光雷达的点云信息的检测。基于图像的检测算法通过提取图像特征,获得前方障碍物在图像上的位置,但由于缺乏深度信息,在三维空间中无法定位物体。基于激光雷达的点云包含每1个点的空间信息,检测算法通过提取每1个点的空间特征,再将所有点的空间特征进行回归,可以得到前方障碍物的位置与深度信息。但是,由于点云距离车辆越远越稀疏,对于较远位置的物体,检测结果的准确率有所降低。
Figure 1 Example of image and pointcloud图1 图像与点云示例
传统的基于激光雷达的点云信息的检测算法,首先通过卷积神经网络对点云中的每1个点提取特征,再通过最大池化层从所有点的特征中选出最显著的特征,最后分别通过分类与回归网络确定前方障碍物的类别与位置。在这个过程中,所有点的重要程度是一致的,但在实际检测时,这些点的重要程度可能有一定的不同。针对以上缺点,本文引入注意力机制,首先通过已有的3D车辆检测算法回归一个车辆的初始位置;然后分别计算每个点与初始中心点位置的距离,再将这些距离值送入注意力网络,通过注意力网络回归得到每个点的权重;最后将注意力网络得到的权重与每个点的特征相乘,送入最大池化层进行最大池化操作。在此过程中,通过给予车辆点较高的权重,非车辆点较低的权重,使得车辆点的特征更容易通过最大池化层得到保留。
在KITTI数据集[1]上对本文算法进行了评估,并与现有的算法进行了比较,在保证实时检测的情况下,本文算法较现有方法具有更高的准确度。
车辆检测是一个广泛研究的课题。根据数据类型不同,车辆检测算法可分为2类:基于图像的2D车辆检测和基于点云的3D车辆检测。
2D车辆检测算法的本质是基于图像目标检测。常用的图像检测框架分为2类,分为提取候选框与回归检测结果的两个步骤的神经网络算法,以及不提取候选框直接回归检测结果的一个步骤的神经网络算法。文献[2]提出的FasterR-CNN是二阶段(Two-stage)图像检测算法中广泛应用的框架。使用文献[3]提出的VGG16网络来获取整幅图像的特征图,然后通过在整张特征图滑窗回归得到候选框。然后,该算法将候选框的特征送入分类网络与回归网络中,从而得到图像中目标的类别与位置。基于Faster-RCNN,文献[4]提出了多尺度深度卷积神经网络MSCNN(Multi-Scale deep Convolutional Neural Network),它在VGG16网络中不同的卷积层上提取得到多尺度的特征信息,并通过这些多尺度特征信息得到更加准确的候选框,从而在多尺度上具有较好的性能。此外,在一步图像检测算法中,出现了SSD[5]与YOLO[6]等多种检测算法,一步图像检测算法使用默认的候选框代替生成的候选框,去除了生成候选框这一步骤,直接在默认的候选框中进行目标检测,从而具有更快的速度。
3D车辆检测算法分为基于点云的检测算法和基于立体图像的检测算法。在基于立体图像的检测算法中,文献[7]提出的3DOP算法从立体图像中提取每个点的深度信息,然后通过平面图像和深度信息生成用于检测的3D候选框。而在基于点云的检测方法中,文献[8]提出的Voxelnet算法通过在三维空间中进行三维空间滑窗从而得到三维空间中的候选体元,再将这些体元的特征送入三维分类器网络和回归网络得到最后的检测结果。而MV3D算法[9]使用前视图和鸟瞰图代替点云视图,从而减少了尺寸和计算量。文献[10]提出的另一种3D车辆检测算法则是利用了车辆的CAD模型,首先通过图像检测算法找到车辆的二维图像,再通过算法获得车辆的关键点位置,最后将车辆的关键点与CAD模型匹配进而得到车辆的空间位置。除了这些检测算法,文献[11]提出一种基于点云的端到端的3D车辆检测算法--Pointnet,得到了广泛的应用。
Pointnet与之前的基于点云的3D车辆检测算法不同,它是一种专门针对点云的检测算法。Pointnet的输入是包含点云中所有点的位置信息的数组,输出为待检测目标的分类和位置。它是一个高效的基于点云的3D目标检测算法。基于Pointnet算法,文献[12]提出了Pointnet++算法,在关注全局特征的同时针对局部特征进行了优化,从而得到了更好的检测效果。
随着智能驾驶在国内外的飞速发展,国内的车辆检测研究也在不断发展。由文献[13]可知,百度提出了Apollo智能驾驶解决方案,建立了国内最大的道路车辆驾驶数据集,同时为客户提供智能驾驶解决方案。由文献[14]可知,阿里的人工智能实验室也在智能驾驶领域做出了不少贡献,阿里推动“ET城市大脑”的实验,与各地政府建立“智慧城市”,帮助城市进入智能交通新时代。
Figure 2 Framework of 3D vehicle detection based on attention mechanism图2 基于注意力机制的3D车辆检测框架
Figure 3 Structure of Pointnet图3 Pointnet网络结构图
(1)
za=a⊙z
(2)
Pointnet的提出推动3D车辆检测算法的飞速发展。在Pointnet的基础上,本文引入了注意力机制。图2给出了基于注意力机制的3D车辆检测算法的基本框架。其中,点云输入为{Pi|i=1,2,3,…,n},Pi是1个三维数组(xi,yi,zi),代表点i在三维空间中的坐标位置,n代表点云中点的数量。对应每1组点云输出为(x,y,z,w,h,l,α),其中(x,y,z)代表待检测车辆的中心点在三维空间中的位置,(w,h,l)代表待检测车辆的车型尺寸,α代表车辆在三维空间中围绕y轴的方向。该算法分为4个部分:
(1)采用基于Pointnet网络结构对三维点云进行分割并通过回归得到车辆的初始中心点位置(x′,y′,z′);
(2)计算点云中每个点到初始中心点距离di:
di=Pi-(x′,y′,z′)
(3)
之后将di送入注意力网络中,得到每个点对应的权重wi。
(3)将di送入基于Pointnet的网络结构并提取每个点对应的特征fdi,之后对每个点的特征fdi进行加权:
f′di=fdi⊙wi
(4)
(5)
本文采用一种简化的Pointnet网络结构来提取3D点云特征。简化的Pointnet网络结构如图3所示。
输入的点云数据形式为n×3的数组,n为输入点的个数,对于每个点i(1≤i≤n),输入(x,y,z)即为该点在空间中的坐标位置。算法首先通过多层卷积神经网络,提取每个点单独的特征,将(x,y,z)维度扩展为1 024。然后通过1个最大池化层,对n×1024维的特征向量在n维上进行最大池化,找出最为显著的特征,池化得到的1×1024维向量作为该点云的全局向量。最后将全局向量送入分类与回归网络就可以得到前方障碍物的种类与位置。
通过前面的Pointnet网络,可以从每个点中提取得到1 024维特征,从而得到n×1024维的特征向量Vl,用平均池化得到的平均值Vavg来代替该点的特征。将每个点的特征送入注意力网络可得到对应的权重β1,具体计算公式如下(如图4所示):
b=tanh((WC⊗Vavg+bc)⊕Whcht-1)
(6)
β1=softmax(W′ib+b′i)
(7)
其中,Vavg为输入特征的平均值,WC,Whc与W′i是变换矩阵,bc与b′i是偏差项。
Figure 4 Structure of attention mechanism图4 注意力网络结构
为了验证基于注意力机制的车辆检测算法的有效性,本文在12 GB显存,CPU型号为Intel®CoreTMi7-6700K的台式计算机上进行实验。使用基于Python的tensorflow框架对数据集进行处理,数据源为1个专门进行智能驾驶检测的真实数据集KITTI。KITTI数据集由德国卡尔斯鲁厄理工学院和丰田美国技术研究院联合提供,是目前国际上最大的自动驾驶场景下的计算机视觉算法评测数据集。该数据集用于评测立体图像、光流、视觉测距、3D物体检测和3D跟踪等计算机视觉技术在车载环境下的性能。KITTI包含市区、乡村和高速公路等场景采集的真实图像数据,每幅图像中最多达15辆车和30个行人,还有各种程度的遮挡与截断。整个数据集由389对立体图像和光流图,39.2 km视觉测距序列以及超过200k 3D标注物体的图像组成[1]。
KITTI使用同样用于二维目标检测的Pascal标准评估三维目标检测性能。因此,KITTI数据集将根据图像平面中的边界框高度对远距离对象进行过滤。因为只有在图像平面上出现的对象才会被标记,所以不在图像平面中的对象不会算作误报。对于汽车图像,KITTI要求检测结果与标签有70%以上的三维边界框重叠方可认为检测正确。KITTI将待检测目标分为3个难度:(1)简单。最小边界框高度:40像素,最大遮挡级别:完全可见,最大截断:15%。(2)中等。最小边界框高度:25像素,最大遮挡级别:部分遮挡,最大截断:30%。(3)困难。最小边界框高度:25 像素,最大遮挡级别:难以看到,最大截断:50%。
本文从KITTI训练集中选取3 712幅2D图像与对应的点云数据集进行训练,从验证集中选取3 769幅2D图像与对应的点云数据集进行测试,最后选取Pointnet的离线测试集进行了结果测试。在KITTI上得到的最终测试结果如图5、图6和表1所示。
Figure 5 Curves of precision-recall of Pointnet图5 Pointnet的精度-召回率曲线
Figure 6 Curves of precision-recall of vehicle detection algorithm based on attention mechanism图6 基于注意力机制车辆检测算法的精度-召回率曲线
通过与Pointnet算法的对比可以看出,对于简单难度的待检测目标,基于注意力机制的车辆检测算法有着与Pointnet较为相似的结果,而对于中等难度和困难难度的待检测目标,本文算法有着优于Pointnet算法的检测结果。综合所有结果来看,本文提出的基于注意力机制的车辆检测算法的准确度相对更高,有一个较明显的提升。
Table 1 Accuracy comparison of vehicle detection algorithms表1 车辆检测算法准确度对比(离线测试集) %
从实验结果中可以发现,引入注意力机制可以较好地改善中等难度与困难难度的车辆检测结果。相比Pointnet算法,本文通过引入权重使得在将特征送入最大池化层时,一些重要的特征被保留下来。对于简单难度(较近距离)的车辆,由于其空间信息较丰富,Pointnet算法的准确度较高,基于注意力机制的检测结果没有显著的提升。对于中等难度的车辆,本文算法可以通过给予关键点权重,获得更加准确的结果。而对于困难难度(较远距离)的车辆,由于其车辆距离较远,点云过于稀疏,导致其点云数据本身不多,故引入权重的效果不佳。
本文基于注意力机制理论提出了一个基于注意力机制的3D车辆检测算法。该算法首先预估了车辆可能的中心点,然后将点云中每个点到预估中心点的距离送入注意力网络,从而得到每个点不同的权重。再将每个点的特征进行加权后送入分类与回归网络处理。该算法弥补了现有算法对于点云内所有点一视同仁的不足,通过提高部分重要点的权重得到更加准确的检测结果。本文仅在Pointnet上尝试引入了注意力机制,未来可在一些更加前沿的算法上尝试引入注意力机制,同时将研究不同的注意力机制对于检测结果的影响。