陈佳琪, 苏治宝, 赵熙俊, 索旭东
(1.中国北方车辆研究所,北京100072;2.智能移动机器人(中山)研究院,中山528436)
无人驾驶关键技术主要分为环境感知、导航定位、路径规划、决策控制4个方面.道路检测是环境感知中的重要研究方向之一,是实现自主行驶的关键组成部分[1].道路检测是指利用车辆本身搭载的传感器对于前方环境进行感知,划分出可通行的道路区域,为后续的局部路径规划提供依据.传统的道路检测算法依靠视觉传感器采集的图像信息进行可通行区域检测,主要分为基于图像纹理特征的检测算法[2-4]、基于图像颜色特征的检测算法[5-6]和基于分类器的检测算法[7-8]3类.然而,由于图像数据对于环境光十分敏感,同时光强度的快速变化也会导致采集图像的严重失真,因此基于视觉传感器的道路检测算法的鲁棒性较差.基于机器学习的视觉道路识别算法尽管在一定程度上能够降低环境光对于检测结果的影响,但仍然难以应用于例如晨昏、夜间等实际的驾驶环境.
激光雷达(LiDAR)是以激光为信号源,通过接收反射光得到周围环境的3D点云数据.每个点云数据包含空间位置(x,y,z)和反射强度(intensity)信息.相比于视觉传感器,利用激光雷达进行道路检测的优势一方面在于不依赖于外部信号,具有受环境和光线影响小的特点,另一方面能够获取丰富的三维空间信息,为利用结构关系进行检测提供了可能.
全卷积神经网络(Fully Convolutional Networks, FCN)是图像领域的一种成熟的端到端(end-to-end)分割网络,能够有效实现像素级的语义分割任务.本研究将在全卷积神经网络的基础上,设计针对于点云的道路检测网络算法,并借助KITTI公开数据集进行训练和测试.
尽管激光雷达点云能够有效表示环境的三维结构,但由于点云的无序性,FCN网络无法直接对其进行学习.3D正态分布变换(3D-NDT)算法[9]是基于统计学特征的点云配准方法.该算法提出利用三维栅格化方法解决点云无序性的问题.考虑到FCN网络在处理二维图像数据上的优势,我们将点云进行二维压缩后再进行栅格化处理.如图1所示,首先建立一个平行于LiDAR的x-y平面的二维网格,将每个激光点进行投影,然后提取每个网格单元中的统计学信息.
图1 点云数据处理流程
基于全卷积神经网络的道路检测网络结构如图2所示.
图2 基于全卷积神经网络的道路检测网络结构
该网络可以分为输入层、编码层、全卷积层、解码层、输出层5部分.
1)输入层.针对道路检测任务,在每个栅格中提取点云数量、平均反射率、平均点云高度、点云高度标准差、最大点云高度和最小点云高度6个特征.
2)编码层.利用了降采样(Subsampling)网络对于原特征图进行编码,降低FCN网络的内存需求.卷积(Convolution)部分的卷积核为3×3,步长为1,填充策略为零填充,激活函数为ELU;降采样部分采用了窗口为2×2、步长为2的最大池化层.
3)全卷积层.通过使用扩展卷积(Dilated Convolutions)[10]实现网络在不明显提高卷积层数的基础上扩大网络的感知域,提高网络对于稀疏点云投影图的学习能力.扩展卷积部分的卷积核为3×3,步长为1,填充策略为零填充,激活函数为ELU;卷积部分的卷积核为1×1.
4)解码层.利用最大反池化层进行上采样(Upsampling),得到与输入层大小相同的输出图.卷积部分的卷积核为3×3,步长为1,填充策略为零填充,激活函数为ELU;利用Softmax回归输出道路检测结果的概率图.
5)输出层.返回语义分割结果图,即图像中的每个值代表其对应网格单元是否为可通行道路区域.
采用Adam优化算法[11]对FCN网络进行训练,初始学习率为0.01,学习衰减率为2.如式(1)所示,以二值交叉熵为损失函数:
(1)
式中:W和H为输出层的宽度和高度;N为批量尺寸,设置为25;y为FCN网络预测的道路区域的概率.
为了提高模型泛化能力,防止出现过拟合,在每个扩展网络层之间添加空间丢弃层(Spatial Dropout 2D)[12],丢弃比例为0.25.FCN网络使用以Tensorflow为后端的Keras框架实现,并在内存为16GB的Nvidia Tesla T4上进行训练.
KITTI Road and Lane Estimation Benchmark数据集[13]中含有289个训练集和290个测试集数据,包含城市无标记道路(uu)、城市有标记道路(um)、城市有标记多车道道路(umm)3类典型驾驶场景.每个场景包含彩色图像、灰度图像、训练标签、激光雷达点云、相机雷达校准参数等多种信息.
在本研究中,如表1所示,对于3类训练集数据分别进行随机采样,各选取10份数据作为验证集.训练集用于训练FCN网络权值,验证集用于评估每次训练的效果,测试集用于对于模型泛化误差的评估.
表1 KITTI数据集信息与划分
如图3所示,KITTI数据集提供的训练标签是在透视图的基础上手工标注的.因此,需要将激光雷达点云(图3(a))与标签数据(图3(c))进行融合,以确定每个激光点是否属于道路区域,进而得到特征图的标签.
图3 KITTI数据集信息
针对上述问题,一种常用的方法是对于图片进行逆透视变换(Inverse Perspective Mapping, IPM),即将由于透视效应存在使得原本平行的事物在图像中呈现相交的直线重新变为平行的操作.然而,IPM算法的前提假设是平坦无障碍的平面.在本研究的问题中,如图4所示,激光雷达和视觉传感器会采集车辆前方超过30 m的环境数据,显然会有大量情况不满足上述假设,从而导致获取的标签信息错误.另一种方法是依靠激光雷达和视觉传感器之间的位置关系,将点云数据投影至透视图中,以确定激光点的标签类型.
图4 IPM投影误差
在获取标签数据后,需要对于点云进行压缩和栅格化处理.本研究将网格覆盖区域限定为以车辆前方6 m为中心的宽20 m、长40 m的矩形区域,每个网格大小设置为0.1 m×0.1 m.本研究采用多数票规则获得每个栅格的标签,即栅格中大多数点云的标签决定该栅格的标签.考虑到FCN网络的训练,网格区域的标签采用one-hot编码规则[14].
在道路检测任务中,一般将道路区域记为正类(Positive),其他区域记为负类(Negative).根据样本的实际类别与分类器预测结果的组合,数据可以分为4类:判断为正类的正类数据(True Positive)、判断为负类的负类数据(True Negative)、判断为正类的负类数据(False Positive)和判断为负类的正类数据(False Negative).在此基础上,道路检测问题的混淆矩阵(Confusion Matrix)如表2所示.
表2 混淆矩阵
利用混淆矩阵的4个指标,可以得到评价道路检测算法的常用指标:精确率、召回率、假阳性率和F值.精确率(Precision)指的是正类集合中被预测为正类的实例数量在所有预测为正类的实例数量中所占比例.召回率(Recall)指的是正类集合中预测为正类的实例数量在总体集合中正类实例总数中所占比例.假阳性率(FPR)指的是负类集合中预测为正类的实例数量在总体集合中负类实例总数中所占比例.综合考虑精确率和召回率两个指标,可以得到F值(F1-measure)指标.
,
(2)
,
(3)
,
(4)
.
(5)
本研究算法在KITTI数据集下测试,并采用将带标签激光雷达点云数据投影至相机图像的方法进行结果展示.图5、图6、图7分别展示了模型在3类不同场景下的检测情况.
图5 城市无标记道路检测结果
图6 城市有标记道路检测结果
图7 城市有标记多车道道路
从总体上看,模型对于各类道路场景具有较强的鲁棒性,在有标记道路和有标记多车道道路上检测效果较好,在无标记道路上检测结果较差,噪点较为明显.对于场景中出现的障碍物,尽管有部分车身和障碍物表明包含有道路点,但这并不会显著影响对于道路的检测.从点云俯视图上来看,此类点由于具有相同的x和y的值,因而不会扩大道路范围.
表3为采用基于全卷积神经网络的道路检测模型在KITTI数据集上的测试结果.在各类场景下,道路检测的平均精确率为80.65%,平均召回率为77.01%,平均假阳性率为0.58%,平均F值为78.40%.
表3 KITTI数据集测试结果
尽管采用3类数据同时进行训练,但模型对于三类道路的检测能力有所不同.从精准度和假阳性率来看,模型对有标记多车道道路的检测更好,即检测为车道的部分可通行的概率更高;而从召回率来看,模型对有标记道路的检查更好,即检测为车道的部分与真实车道的重合率更高.综合考虑以上指标,模型对于有标记道路的检测能力最高.
分析原因,车道线相比普通路面的反射率更高,提高了模型对于道路的检测效果.为了进一步提高模型对于道路检测的准确度,可以考虑对于无标记道路进行单独训练,通过激光雷达或相机检测当前环境是否存在车道线而决定使用何种模型进行道路检测.
从耗时来看,各类场景下的平均检测耗时为93.6 ms.尽管耗时接近百毫秒,但考虑到检测范围为车辆前方6 m至46 m,所以认为该模型能够满足实时检测的要求.为了进一步提高算法效率,可以考虑使用性能更高的GPU进行模型的预测.
激光雷达采集到的点云信息是不均匀的,密度随着距离增加而减小.因此,不同的感知范围将影响感知结果.表4为不同感知范围对于模型评价指标的影响.
表4 不同距离模型检测效果
由表4可知,该模型在23 m以内表现最好,之后随着距离的增加检测能力有一定下降.但在38 m的范围内F1-measure的值都超过了82%,具有较强的检测能力.为了处理更远距离的道路检测问题,可以考虑采用累计的点云进行训练和预测.
针对无人驾驶中的道路检测问题,本研究提出了一种基于全卷积神经网络和点云的道路检测算法.算法通过点云构建、标签获取、网络训练、模型预测等步骤对于车辆前方道路进行检测,并在KITTI数据集上进行了效果测试.结果表明,道路检测算法的平均精确率为80.65%,平均召回率为77.01%,平均假阳性率为0.58%,平均F值为78.40%,平均检测耗时为93.6 ms,前方38 m范围内均有较强的检测能力,对于各类场景具有较强的鲁棒性.算法在识别精度、计算耗时、感知范围和稳定性上能够满足对于车辆前方道路的检测要求.