基于点云俯视图重映射的3D目标检测
2021-02-05吴秋霞黎玲敏
吴秋霞 黎玲敏
(华南理工大学 软件学院,广东 广州510006)
目标检测是一种基于目标几何和统计特征的分割,将目标的分割和识别合二为一,即目标检测不仅需要识别出场景中存在的物体及其类别,还要给出物体的位置,通常以最小包围盒的形式给出。在图像上给出物体的类别和最小包围盒的检测称为二维(2D)目标检测,而输出物体类别及其在三维(3D)空间中的长、宽、高、旋转角等信息的检测称为3D目标检测。
随着深度神经网络的发展,特别是Faster RCNN[1]、Mask RCNN[2]、YOLO[3]、SSD[4]等优秀目标检测框架的出现,2D目标检测的准确率已经超过了人眼。但2D目标检测只能反映出物体在图像平面的位置,缺乏深度信息以及物体的尺寸等三维空间参数,在实际应用中存在一定的局限性。例如在车辆无人驾驶、服务机器人、增强现实等场景下,需要感知目标物体的三维大小以及旋转角度等信息。将3D目标检测应用到无人驾驶车辆上,检测出场景中的目标,并通过估计实际位置,自动驾驶的车辆就可以准确地预判和规划自己的行为和路径,避免碰撞和违规,从而大大降低交通事故的发生并实现城市交通的智能化。
随着激光雷达、深度相机等3D数据采集设备逐渐平民化,3D目标检测具有巨大的研究前景和应用价值,学术界和工业界都涌起了很多关于3D目标检测的研究,解决了很多3D目标检测中的难题,3D目标检测的应用场景也日渐丰富。为了更准确地评估3D目标检测在自动驾驶场景下的准确性与安全性,由德国卡尔斯鲁厄理工学院和丰田美国技术研究院联合创办的大型自动驾驶场景下的数据集KITTI提供了BEV检测和3D检测的评估基准。在此评估基准下,学界涌现出许多优秀的3D目标检测算法。
Mousavian等[5]在2017年提出了一种结合深度神经网络回归学习和几何约束的3D目标检测和三维位置估计的算法,对车辆的三维姿态和位置进行建模,需要知道车辆在场景中的位置和车辆相对于摄像机的角度,以及车辆的尺寸大小,通过回归任务计算方位角和物体尺寸,利用投影公式计算中心点向量。Chen等[6]提出的Mono3D方法,利用Faster RCNN[1]提取特征,结合语义、上下文信息、位置先验信息以及目标形状先验信息等,计算检测框的能量损失函数,提取精确的3D目标检测框。基于RGB图像的方法,由于数据自身的限制,往往需要引用特定类别的先验几何信息或者通过双目视觉立体匹配获取深度,难以进行准确的3D定位,而且RGB图像对光照条件和色彩敏感度的要求比较高[7],因此检测准确率往往不高。
图像数据受限于空间维度的缺失,研究者更多地将目光放在能够反映物体在三维空间中的准确信息的激光点云上。由于激光点云是无序、不规则的排列结构,早期基于激光点云的3D目标检测主要是通过将点云体素化为规则网格,然后使用卷积神经网络提取特征。2015年,Wang等[8]提出的Vote3D方法,将点云体素化为规则网格,使用滑动窗口遍历整个场景并提出使用投票机制计算窗口的得分,减少了稀疏场景中的大量空白体素的卷积操作。2017年,Engelcke等[9]基于Vote3D方法的投票机制,提出了Vote3Deep,通过堆叠多层CNN逐步扩大感受野来提取多层次特征。体素化点云可以让卷积网络在点云数据上得以实现,但体素化的缺点是体素数量庞大,耗时长,因此网络会设计得比较浅,从而提取的特征表达能力较弱。
Qi等[10]提出的PointNet系列网络解决了点云无序性问题,点云特征提取能力有了较大的提高。文献[11- 13]将点云投影到非空体素网格中,采用PointNet提取体素特征,在体素特征图上使用卷积,最终通过区域候选网络(RPN)得到包围盒。Lang等[14]基于VoxelNet[11]使用PointNet学习体素特征的方法,考虑到在俯视图视角目标之间不存在重叠和遮挡,将点云划分并投影为稀疏柱状网格Pillars,使用简化的PointNet提取Pillars特征,再使用卷积网络融合不同感受野的特征。Shi等[15]将PointNet++作为主干网络,使用两阶段方法进行目标检测:第一阶段提取点云语义特征,对于所有前景点都生成一个包围盒,故可以检测到所有可能的目标框,然后使用非极大值抑制(NMS)以减少包围盒的数目;第二阶段将点的语义特征与局部空间特征结合编码为新特征,进一步修正包围盒。Yang等[16]使用PointNet++进行语义分割,并提出球形锚点框以忽略方向的困扰,使用PointNet生成3D候选框,将3D候选框体素化为固定大小的网格,提取体素的特征,再连接两个全连接层进行分类和包围盒回归。虽然PointNet能够处理不规则点云,但在大规模复杂场景中,PointNet提取的特征表达能力仍比较有限,目标识别能力较弱。
为了提高3D目标检测任务中的目标识别能力,文献[17- 18]采用级联结构融合点云和图像信息,借助RGB图像识别目标并确定目标所在区域,再基于图像目标检测结果检测包围盒。这类方法基于图像的目标检测结果会直接影响最终的3D检测,而且需要进行坐标系转换,检测速度较慢。为了减少点云的处理时间,通常会将点云编码为2D视图,以获得对稀疏3D点云更有效和紧凑的表达。文献[19]提出的BirdNet方法,将点云编码为三通道的俯视图,利用俯视图得到包围盒在俯视图上的投影,并通过估计高度预测包围盒。MV3D[20]和AVOD[21]方法用激光点云的前视图、俯视图来表示三维点云信息,在俯视图上生成3D候选框并分别在俯视图、前视图和RGB图像的特征图上进行感兴趣区域(ROI)池化,最后将这些ROI进行融合并分类和回归。MV3D和AVOD都是基于ROI的融合,是高层次特征上的融合,未能充分利用低层次细节特征。ContFuse[22]和MMF[23]方法通过连续融合层融合多尺度图像特征到多层次的俯视图特征中,并对融合特征进行目标识别和定位。ContFuse和MMF虽然融合了图像和点云的细节特征,但同时也引入了图像数据上的遮挡问题。
综上所述,原始点云保留了3D空间原始的几何信息并且没有进行任何的离散化[24],能够提取准确的空间信息,点云俯视图编码具有较好的目标识别能力,因此可以结合原始点云和点云俯视图进行准确的3D目标检测。本文在BirdNet[19]俯视图编码的基础之上,提出了结合原始点云和点云俯视图的3D目标检测方法Bird-PointNet。首先将点云编码为俯视图格式,进行目标识别和粗略定位;然后将俯视图检测结果映射回点云空间,进行精确检测,以利用图像数据目标识别能力较强和点云数据空间信息较准确的优点;最后在KITTI数据集上进行俯视图检测和3D检测实验,以验证所提出方法的可行性。
1 Bird-PointNet架构
本文提出了基于点云俯视图对目标进行粗略检测,然后使用PointNet进行精确3D目标检测的方法Bird-PointNet,该方法的网络结构如图1所示。首先将原始点云编码为由高度值、强度值、密度值表示的三通道的俯视图图像;然后将点云俯视图编码送入主体网络,即改进的Faster-RCNN中,生成汽车、行人和自行车这3个类别的2D ROI,将2D ROI沿高度方向扩展为3D ROI,取3D ROI中的点云送入PointNet网络进行后续处理,利用点云的3D空间信息估计精确的包围盒、目标类别和目标朝向等3D参数。
图1 Bird-PointNet的网络结构
1.1 俯视图
Bird-PointNet处理的视线范围为左右-40~40 m,前后0~70 m,高度-3~3 m,首先将该范围内的点云编码为俯视图。与BirdNet相同,在俯视图上,每个网格覆盖面积为0.1 m×0.1 m,因此整个检测范围的俯视图分辨率为800×700,将检测范围内的点云编码为由高度值H、强度值I、密度值D表示的三通道的俯视图图像。
第一个通道为高度值,将单元中点云高度值的最高值除以检测范围的高度,获得该单元的归一化高度值编码,即
Hi=max(HP j-Hmin)/(Hmax-Hmin),j∈Si
(1)
式中:Hi为俯视图第i个单元的高度值;Si为俯视图投影落在第i个单元的点集合;HPj为第j个点的高度值;Hmin和Hmax分别为截取场景的最低高度和最高高度,这里分别取为-3和3。
第二个通道为强度值,计算单元中点云的平均激光反射强度,获得该单元的强度值编码,即
(2)
式中,Ii为俯视图第i个单元的激光强度值,IPj为第j个点的激光强度值,ni为落在俯视图第i个单元的点数量。
第三个通道为密度值,统计每个单元中点云数量,分别将这些统计数除以密度最大的单元中的点云数量,获得该单元的归一化密度值编码,即
Di=ni/nmax
(3)
式中,Di为俯视图第i个单元的密度值,ni为落在俯视图第i个单元的点数量,nmax为俯视图所有单元中密度最大的单元的点数量。
1.2 Faster-RCNN网络
Bird-PointNet方法使用Faster-RCNN对点云俯视图进行2D目标检测,为与BirdNet保持一致,本文使用基础网络为VGG16的Faster-RCNN。其中VGG16用于生成俯视图的特征图,包括13个卷积层和4个窗口为2×2的池化层,以池化层为边界分为5个卷积模块。每经过一个池化层,特征图边长减小为前一层的一半,相应的感受野为前一层的两倍,通过5个卷积模块后,特征图分辨率为原图像的1/16,感受野为原图像的16倍,如图2所示。按照1.1节的俯视图编码方法,俯视图的精确度为0.1 m,依照先验知识,行人这种小目标在该俯视图中的分辨率大约为6×8,若使用原版的Faster-RCNN,经过4次池化后,特征图分辨率为原图的1/16,也就意味着行人在最终特征图中可能只有不到一个像素,使得行人类别的小目标难以被网络检测到。因此,本文在原版Faster-RCNN的基础上,去掉VGG16的池化层4和卷积层5,这样得到的特征图分辨率为原图像的1/8,从而有更多的特征点参与目标类别和包围盒参数的预测。
图2 VGG16池化层示意图
由于实验所用的KITTI数据集仅检测汽车、行人和自行车3个类别的目标,且在点云俯视图编码中不存在透视现象,不会出现特大目标,因此本研究无需用到原版Faster-RCNN中3种形状(长宽比分别为1:2、1:1、2:1)乘以3种尺度(8、16、32)的9个锚点框,在本研究中仍保留原版的3种形状,而尺度改为4和8,共6个锚点框,以加快检测速度。
与BirdNet不同,这里不进行目标方向的预测,因为在点云俯视图中,目标方向信息并不明显,过多的不明确参数的预测反而会降低预测的准确度。方向预测放在PointNet网络的3D预测阶段进行。
1.3 PointNet网络
Bird-PointNet方法将Faster-RCNN检测的2D目标框沿高度方向扩展,得到3D目标框,并将3D目标框中的点云送入PointNet网络进行后续处理,即在原始点云中,沿y轴方向投影落在2D目标框内的点是PointNet网络的处理数据,称为目标点集。PointNet是一个能提取无序点云特征的轻量级神经网络。将目标点集进行坐标归一化后输入PointNet网络,归一化的具体操作是将目标点集的所有点坐标减去目标点集坐标均值。PointNet的特征提取层使用点共享的多层感知机提取点特征,然后全局池化得到目标点集的全局特征。最后通过3个全连接层进行特征加权预测目标参数,包括目标的包围盒中心、包围盒大小、目标朝向与x轴的夹角。
网络最终输出的特征向量构成如图3所示。目标包围盒中心参数是一个长度为3的向量,表示包围盒中心点的三维坐标。包围盒大小参数是一个长度为4倍目标类别数的向量:1倍目标类别数长度的向量表示目标类别的独热编码,用于对包围盒进行分类,参数解析时取得分最高的类别的预设长宽高值作为包围盒大小的基础值;3倍目标类别数的向量表示预测的包围盒长宽高与每个目标类别预设长宽高的差距,用于对包围盒大小进行回归。目标朝向参数是一个长度为2倍方向分类数的向量,方向分类数指将周角即360°均分为多少个等份,其中1倍方向分类数长度的向量表示方向类别的独热编码,用于对目标朝向进行分类,确定目标朝向落在的方向区间;另外1倍方向分类数的向量表示预测的目标朝向与每个方向类别的中线的夹角,用于对方向进行回归。
图3 输出向量构成示意图
则最终的特征向量长度为
Lv=3+4Nclass+2Nheading-bin
(4)
式中,Nclass为目标类别数,Nheading-bin为等分周角的份数。
2 实验及结果分析
本文提出基于点云俯视图重映射的3D目标检测方法Bird-PointNet,既利用了基于2D目标检测的便利性,也考虑到点云到俯视图的编码存在信息损失,将2D目标检测作为3D目标检测的粗略检测阶段,再在粗略检测结果的基础之上使用PointNet进行精确检测。
现有的研究中,大多数的3D目标检测框架无法对不同大小的目标进行一次性的检测,需要为汽车类别与自行车和行人类别分别训练3D目标检测器,即目前大多数的3D目标检测器不是通用的。而Bird-PointNet与BirdNet的思路一样,都是通过训练一个网络来检测所有类别的目标,并且两者均使用Faster-RCNN来检测俯视图中的目标,因此,实验以BirdNet作为基准,分别对比在KITTI验证集和测试集上评估俯视图检测(BEV检测)和3D检测的准确率。其中,BEV检测要求预测的目标框在俯视图平面上与目标的正确标注重合,而3D检测要求预测的目标框在三维空间中与3D正确标注重合。BEV检测对目标重合度的要求低于3D目标检测,主要用于说明方法的目标识别能力。
2.1 实验数据
实验在自动驾驶场景的大型数据集KITTI上进行。KITTI基准数据集包括7 481个训练图像和点云,以及7 518个测试图像和点云,其中标记了8种目标类别,但官方只提供了汽车、行人和自行车这3个类别的3D目标检测评估基准,3D目标检测的评估包括BEV检测准确率和3D检测准确率。对于每个类别评估,按照目标大小、遮挡程度和截断水平分为容易、中等和难3个等级。根据KITTI官方的评估标准,预测的包围盒与目标正确标注的重合度达到阈值,则认为预测正确,其中汽车类别的阈值为0.7,自行车和行人类别的阈值为0.5。
2.2 验证集实验结果分析
KITTI数据集的训练集共有7 481个训练图像和点云,其中3 712个图像和点云用于训练网络,3 769个图像和点云为验证集。本文基于Ubuntu 18.04系统,采用TensorFlow框架进行实验。按照式(1)-(3)将点云编码为俯视图,输入1.2节描述的网络中,得到的结果按照官方数据集的 label 标注文件的格式写入txt文件,使用KITTI官网提供的离线评估代码评估验证集的BEV检测和3D检测结果。在本实验中,目标类别数Nclass为3,等分周角份数Nheading-bin为12。
KITTI验证集的BEV检测和3D检测的结果如表1所示,因BirdNet并未公布其在KITTI验证集的3D检测结果,故BirdNet方法仅展示其BEV检测结果。其中,BirdNet是本文的基准方法,通过点云俯视图和高度估计进行3D目标检测;本文提出的Bird-PointNet方法则通过点云俯视图和俯视图上的2D目标框重映射到3D点云空间进行3D目标检测。从BEV检测结果来看,Bird-PointNet和BirdNet均有较高的检测准确率,说明俯视图编码具有较好的目标识别和二维平面定位能力,能够比较准确地识别出目标类别和目标在俯视图中的位置,Bird-PointNet的平均准确率比BirdNet低约1.8个百分点,这主要是由不同的参数导致的。从不同类别的检测准确率对比来看,Bird-PointNet和BirdNet共同的特点是,汽车类别的检测准确率较其他两个类别明显偏高,这是由于训练数据的类别不平衡以及目标大小导致的训练方向朝汽车类偏移,这也是构建通用3D目标检测框架所需面临的一大难点,虽然Bird-PointNet和BirdNet方法通过降维并使用2D目标检测的先进经验将所有类别的检测融合到一个检测器中,但这个问题仍然存在于所有的3D目标检测框架中。由于3D检测有更严格的重合条件,故Bird-PointNet方法对每个类别的3D检测准确率均略低于BEV检测。
2.3 测试集实验结果分析
KITTI数据集的测试集共有7 518个图像和点云。如2.2节描述的实验过程,得到与label文件格式一致的测试集结果txt文件,将txt文件提交到KITTI官网进行评估,可得到KITTI测试集的BEV检测和3D检测结果。
KITTI测试集的BEV和3D检测的结果如表2所示。从表中可知:测试集与验证集的BEV检测结果基本一致,Bird-PointNet的平均准确率仍然比BirdNet低约1.8个百分点;在比BEV检测更严格的重合条件下,Bird-PointNet的3D检测准确率在合理的范围内下降,而同样使用俯视图编码的BirdNet的3D检测准确率则出现断崖式下跌。Bird-PointNet与BirdNet的差别在于BirdNet使用高度估计的方法预测3D包围盒,Bird-PointNet则通过原始点云特征预测3D包围盒。BirdNet预测的包围盒在俯视图投影与目标正确标注达到重合度阈值的情况下,3D检测的准确率达不到重合度阈值,说明俯视图编码确实损失了空间信息。Bird-PointNet通过提取对应原始点云规避了这一问题,可见本文的Bird-PointNet方法结合原始点云和点云俯视图进行准确的3D目标检测的思路是可行的。
表2 KITTI测试集目标检测性能对比
图4展示了Bird-PointNet在KITTI数据集上其中一个场景的3D检测效果。由图中可以看出,Bird-PointNet能够比较准确地识别出目标类别,并且能够较好地处理物体遮挡下的情形:道路左侧被白色小车和树木遮挡的黑色小车依然能够被准确识别出来。
(a)点云对应图像
(b)3D检测效果
3 结论
本文提出了基于点云俯视图重映射的3D目标检测方法Bird-PointNet,利用了点云俯视图编码较好的目标识别能力和原始点云准确的空间信息。在KITTI数据集上的BEV检测和3D检测实验结果表明,俯视图具有较好的目标识别能力但存在空间信息损失,Bird-PointNet能较好地还原点云俯视图损失的空间信息,避免了仅使用俯视图时3D检测准确率严重下降的情况。
Bird-PointNet是一个通用的3D目标检测框架,即一次性检测所有类别的目标,与需要为不同目标类别设计不同检测器的方法相比,Bird-PointNet不需要考虑多个检测器之间的同步问题,在实际应用中的可操作性更强。然而,作为通用3D目标检测器,Bird-PointNet仍存在不足之处,检测器的训练容易被数量较多的汽车类别主导,导致行人和自行车这些小目标的检测准确率不高,因此,如何提高小目标检测准确率是未来的研究方向。