赖坤城,赵 津,刘 畅,刘子豪,王玺乔
(1.贵州大学机械工程学院,贵州 贵阳 550025;2.贵州大学现代制造技术教育部重点实验室,贵州 贵阳 550025)
车辆目标检测作为自动驾驶、智能交通研究领域的核心技术,一直受到相关研究人员重点关注。传统车辆检测算法主要利用视觉传感器,但是容易受到光照条件和天气情况的影响,同时也因为视野有限,存在检测盲区,缺乏获取全局信息手段等不足[1]。近年来,激光雷达传感器的不断完善,相对于传统视觉摄像头,激光点云能更加清晰、快速地感知周边环境,并且受光照、天气情况的影响较小,因此激光雷达在无人驾驶扮演着越来越重要的角色[2-3]。
传统的三维激光雷达障碍检测方法有:DBSCAN 聚类算法[4],k-means 聚类算法[5],欧式聚类算法[6]等。虽然传统方法检测速度快,但是检测精度不高并且无法获取准确的分类信息。因此越来越多的研究者采用深度学习的方法来解决三维点云目标检测的问题。2017年,Qi C[7]等人提出的 PointNet 是直接应用在点云数据上的深度学习网络,该网络通过多层感知机提取点云全局特征进而实现分类、语义分割和目标识别等任务,而在同年Qi C[8]等人在PointNet的基础上提出了优化版本PointNet++,在网络结构中增加了层级的点云区域特征提取子网络,提高了分类的精确率。随后Zhou Y[9]等人提出了一种端对端的三维点云检测框架VoxelNet,利用体素特征编码层提取被体素化后的点云特征,再利用三维卷积层和RPN网络进行目标分类和回归。Yan Y[10]等人在文献[9]的网络基础上添加稀疏卷积层的方法,提高了网络的整体检测速度以及检测效果。但上述点云分类更适合在较小的场景下使用,而在大场景下的点云分类效果并不是理想,并且内存资源消耗较大。而Beltran J[11]等人提出的 BirdNet 网络和 Wirges S[12]等人提出 TopNet网络均提出直接将三维点云投影到地面,再对点云目标进行检测与识别。Yang B[13]等人提出的PIXOR 网络首先利用体素化后的点云构建鸟瞰图,再采用大分辨率特征图来进行精确的目标分类和回归。虽然这几种算法适合在大的场景下使用,但是检测速度与精度仍然较差。因此为了解决现有激光雷达点云目标检测效果、实时性差问题,本文在YOLOV3[14]目标检测框架的基础上提出一种基于注意力机制的车辆点云检测算法,首先通过传统三维点云数据处理方式,对获取的激光点云进行预处理并生成识别所需的鸟瞰图,再利用注意力机制[15]与YOLOV3相结合的方式构成点云鸟瞰图检测器,同时为了进一步提高网络的检测精度,利用Complete Intersection over Union(CIoU)loss[16]和Focal loss[17]改进检测器的损失函数。实验结果显示本文所提出的检测算法对点云目标车辆具有较高的检测精,并且满足实时检测的需求。
基于注意力机制的车辆点云检测算法,是在YOLOv3基础上改进而成的。YOLOv3 算法是基于YOLO、YOLOv2算法的改进算法,其在检测速度和精度上均有很大的提高。但其损失函数的设计仍然存在不足,并且网络的特征表达能力还可进一步提高。因此本文在YOLOv3主干网络的每个残差模块中的相邻两个卷积层之间加入了通道注意力和空间注意力模块从而构成新的残差模块,再利用 CIoU loss 和 Focal loss 来设计目标检测器的损失函数,以进一步提高模型的特征表达能力和检测精度。检测网络框架如图1所示。
图1 基于注意力机制的车辆点云检测算法框架
本实验采用 Velodyne VLP-16 线激光雷达,该型号雷达在垂直方向上有16线的激光束,且视角范围为-15°~+15°,垂直角分辨率为2°;水平方向上视角为0°~360°,水平角分辨率0.1°~0.4°;激光雷达在采集三维数据时有效测量范围在100 m左右,每一步的旋转可在空间上采集16个点的三维数据,每秒最多可搜集 30 万点云数据。
在获取激光雷达点云后,需要对其进行处理,主要是由于:激光雷达获取点云数据时往往会受到环境变化的影响而产生大量点云噪声。大量的噪声不仅会加大计算量而导致点云处理速度缓慢,并且会影响目标网络识别精度。因此为了减少计算量,本文采用 VoxelGrid 算法对三维点云数据进行下采样,即减少点云的数量。该算法的优点主要是在保证原有点云的形状特征下,去除一些离散点云,并且也能为后续的目标检测提供高质量的点云图像。根据经过多次测试对比,本文选取表现较好的 0.2 m 的立方体进行下采样。点云下采样前后结果如图2所示。
图2 VoxelGrid算法结果对比图
车辆的环境感知通常只对路面上的障碍物感兴趣,因此还需要对下采样后点云数据进行地面和非地面分割,去除对于目标识别无价值的地面点。本文采用的是Ray Ground Filter算法,即射线坡度阈值的面分割算法。该算法的核心是以射线(Ray)的形式来组织点云。同一射线扫描到路面与障碍物时前后点云的高度存在一定的差异,将某一点与射线上前后两点之间的高度差和该点的高度值作为判断依据,通过判断前后两点的坡度是否大于我们事先设定的坡度阈值,从而确定该点是否为地面点。具体实现步骤如下:
①以射线的形式来组织点云,16 线激光雷达点云水平角分辨率为 0.2°,水平角度为360°,可分为1800份。然后计算每条射线上的点到激光雷达旋转中心的直线距离,并且对同一夹角的射线上的点云按照半径的大小进行排序。计算公式如公式(1)所示:
(1)
②判断当前点云与前后点云高度差是否在坡度阈值内,若大于阈值,则进行分割去除地面。反之则保留点云。地面与非地面分割结果如图3所示。最后将处理过后的点云转换成鸟瞰图,同时为满足识别网络的训练需求将鸟瞰图大小像素设置为512×160,主要包含激光雷达中心点正前方40 m×12 m。
图3 地面与非地面分割示意图
YOLOv3采用了Darknet-53网络结构作为主干网络,该网络结构包含有53个卷积层,每个卷积层包含卷积运算、批归一化处理和 Leaky ReLU 激活函数,并且它借鉴了残差结构Residual Network的做法,在一些层之间设置了捷径链路(shortcut connections)。由于融合了低维特征的细节信息和高维特征的语义信息,Darknet-53 网络在保持精度不变的情况下,提高了检测的速度,网络结构如图4(a)所示。
图4 Darknet-53算法框架示意图
在目标检测网络中能提取到目标关键信息对目标分类尤为重要,因此为了让检测网络更加关注鸟瞰图中的车辆目标点云,受到注意力机制的启发,将通道注意力模块和空间注意力模块加入到特征提取网络中。注意力模块对卷积神经网络所获得的特征图的每一层或每一通道乘以不同的权重,而权重的大小则是用来表示该层或该通道中的特征对于关键信息的关联程度和重要程度。因此权重越大,则表示特征信息对于关键信息越重要,关联程度越高;权重越小,则表示特征信息对于关键信息越不重要,关联程度越低。
在通道注意力模块中,保证平面维度上权重一致,在通道维度上学习不同的权重。图5(a)为通道注意力模块结构示意图。首先对特征图采用全局平均池化和全局最大池化的方式以聚焦特征信息,再利用多层感知器MLP得到两个 的通道注意力矩阵,最后将两个通道注意力矩阵进行对应元素相加和激活,得到最终的通道注意力矩阵 。再经过特征加权操作为特征图F增加通道注意力,得到重新筛选的特征图继续向下传播。而与通道注意力模块不同的是,空间注意力模块更关注哪些位置有关键特征,在通道维度上保证权重相同,而在平面维度上学习到不同的权重,这是对通道注意力的补充。首先对特征图F在通道轴上应用平均池和最大池运算,将得到两个空间注意力矩阵并进行维度拼接,最后利用size为7×7的卷积层对维度拼接后矩阵生成新的空间注意力矩阵。同样再经过特征加权操作为特征图 增加空间注意力得到新的特征图继续向下传播。本文将两种注意力模块加入前面一节提到的Darknet-53网络中,改进后结构如图5(b)所示。
图5 注意力机制模块
YOLOv3的损失函数主要分为三个部分:①边界框坐标预测损失;②边界框置信度损失;③分类预测损失。在计算边界框坐标预测损失时采用的是Intersection over Union(IoU)损失函数,该函数是目标检测任务中最常用的指标(即交并比),主要用于反映模型生成的预测选框和真实选框之间的重叠程度如图6所示,计算表达式如式(2)所示;A为真实框,B黑色为预测框,中间两框重叠面积则为即A∩B,最外的虚线框为包裹两框的最小面积即A∩B。但是在实际计算过程中会出现一些问题,例如:两个框没有相交,那么IoU=0,如图6(a)所示,这时会使得梯度函数为0,而导致卷积神经网络无法进行学习。另外还有可能会出现IoU值相等,但是却无法精确地反映矩形框大小、形状的问题,如图6(b)、(c)所示。
图6 边界框重叠示意图
(2)
于是为解决上诉的问题,本文将采用CIoU损失函数以替代原有的计算方式。不仅考虑了预测框与真实框之间的重叠和距离问题,还考虑了两矩形框之间的相似度问题。计算公式如式(3)所示:
(3)
式中,b,bgt分别代表了预测框和真实框的中心点;ρ代表的是计算两个中心点间的欧式距离;c代表能够同时包含预测框和真实框的最小闭包区域的对角线距离;α是权重函数,计算表达式如式(4)所示;ν用来度量长宽比的相似性,计算表达式如式(5)所示:
(4)
(5)
为了增强网络对困难样本的判别能力,本文采用 Focal loss对边界框的置信度损失进行计算。
Lobj=-a1×(y-y*)γ×ylogy*-a2×(y-y*)γ×(1-y)log(1-y*)
(6)
式中,y,y*分别代表预测值和真实值;α2和α2取1;γ取0.5。
对于分类损失,采用二进制交叉熵,如式(4)所示。
Lcls=C×logC*-(1-C)log(1-C*)
式中,C,C*分别代表预测值和真实值。
则总的Loss可以表示为:
(7)
式中,i代表尺度;LCIoU边界框坐标预测损失;Lobj边界框的置信度损失;Lcls分类预测损。
本文将车载激光雷达收集到的激光点云作为数据集,并通过PCL(Point Cloud Library)点云库将点云数据bag文件转换成训练目标检测网络所需的鸟瞰图。然后使用labelImg图像标注工具进行人工标注以及生成训练网络模型所需的 xml 文件,其中训练类别包含3类:汽车、卡车和公交车,对应标签为Car、Truck和Bus。本次训练模型共生成5000张图片,其中训练集包含图像 4500张,测试集500张。
实验条件:ubuntu16.04,64位操作系统,学习网络框架PyTorch,代码运行环境为Python3.6.2,在搭载CUDA10.1 Tesla P100 16G GPU的实验配置下完成。在网络训练时使用YOLOv3的预训练权重pt文件,将其中的权重值分配到对应类别层中。采用预训练模型可避免重新训练花费大量时间,同时也能够得到更加稳定的检测效果。另外为加快训练速度并防止过拟合,在训练期间将参数冲量常数设置为0.9,权值衰减系数设置为 0.0005,批量大小设置为 16,学习率设置为0.001,迭代轮次设置为300。
YOLOv3 和 优化后的YOLOv3 在经过 300个 epoch 的训练后,训练的 loss 曲线如图7所示,随着训练次数的增加,Loss函数的损失值迅速下降,在训练20次左右后损失值下降逐渐变缓,最终两条曲线在训练250次时候损失值趋于稳定。改进后的损失函数收敛速度明显快于改进前,并且损失值比改进前降低了4,最终损失值维持在3 左右。
为了对算法进行定量评价,截取了数据中的 500帧以测试算法的可靠性。本文采用准确率(Precision,P)、召回率(Recall,R)、平均准确度(Average Precision,AP)以及检测速度(Detection Rate,DR)四个指标对网络进行性能评估,准确率和检出率定义如下:
(7)
(8)
图7 YOLOv3改进前后Loss对比曲线
式中,TP表示模型正确检测的目标数量;FP表示模型误检的目标数量;FN 表示模型漏检的目标数量。通过结合注意力机制的算法,并对 YOLO V3 损失函数进行改进,在以512×160分辨率输入下,改进网络对三类目标车辆点云的检测平均精度达到了92.5 %,召回率达到了98.1 %,并且测试单张点云鸟瞰图检测所需平均时间为 33 ms,即每秒检测图片的速度为 30 f/s。对比优化前的算法在检测时间相同的条件下,平均检测精度提高了10 %,召回率提高了2.3 %,测试结果如表1所示。
表1 三类车辆点云检测结果
为测试本文算法的准确性和有效性,采用某品牌电控车作为实验平台,在贵阳某城区进行数据采集和试验,如图 8所示。该实验平台主要配备有激光雷达Velodyne、单目相机、GPS定位模块等传感器。实验车速控制在 25 km/h 左右,雷达扫描频率设置为 10 Hz,所实验道路环境简单且路面平整、无较大起伏。 同时以16 G内存、8G GPU的计算机作为实验平台,并在 ROS 下进行编程。此时基于注意力机制的车辆点云检测算法每一帧的运行耗时在50 mm左右,图9为车辆点云检测可视化检测结果,其中图9(a)为激光雷达所获取的点云图,图9(b)为处理后的点云鸟瞰图,图9(c)为检测结果图。
图8 实验平台车
从图8中可以看到将三维点云处理并且投影到二维平面后,点云数据在Z轴方向上的信息完全丢失,只能从图中看出车辆的大致轮廓,增加了识别的难度,但采用深度卷积神经网络的方式,仍然能够对二维的点云目标进行准确地识别和分类。另外为了测试该算法的鲁棒性能,我们还检测了几种目标车辆的行驶情况:(1)目标车辆位于实验平台车辆前方,且行驶方向相反;(2)目标车辆位于实验平台车辆后方,且行驶方向相同;(3)目标车辆位于实验平台车辆后方,且行驶方向相反;检测目标包含轿车、卡车以及公交车三类车辆目标,三种行驶情况检测效果分别如图10(a)、10(b)、10(c)所示。
图9 车辆点云检测结果
从图10不难发现卡车与轿车的点云在鸟瞰图中非常相似,但是通过在网络中添加注意力机制和改进网络损失函数的方式,保证了该检测网络具有良好的鲁棒性,最终实现了在不同行驶状态下对目标车辆的检测仍然具有较高检测精度。
本文提出了一种基于注意力机制的车辆点云检测算法,首先采用传统三维点云数据处理方式,获取激光点云鸟瞰图并输入优化后的YOLO V3网络中。再利用注意力机制对各个尺度的特征进行权值的重新分配,使网络能够自动学习特征层与通道之间的相关性和重要性,同时为了进一步提高网络预测框的回归精度,利用CIOU loss和Focal loss对检测算法的损失函数了进行了优化设计。实验结果表明改进后的点云目标检测网络对三类目标车辆点云的检测平均精度达到了92.5 %,召回率达到了98.1 %,相比优化前的算法平均检测精度提高了10 %,召回率提高了2.3 %。并在实车实验测试中,该点云检测算法在不同的测试场景下检测性能表现良好,具有较好的实时性和鲁棒性。
图10 道路车辆检测示意图