谢 岩,刘广聪
(广东工业大学 计算机学院,广东 广州 510006)
近年来,随着计算机视觉的发展和电脑算力的增强,前沿的科学家开始关注和研究自动驾驶这门新兴科技,通过自动驾驶系统的发展改善恶劣的交通环境,提高车辆行驶的安全性和可靠性,减少人为因素造成的交通事故和交通意外. 基于视觉的智能车辆导航的研究可以追溯到1870年代早期, 但由于当时的硬件水平还比较低, 而图像处理是需要大量计算, 研究人员将花费太多精力在硬件平台的设计、实现和测试上. 然而,随着计算机硬件的飞速发展,这个问题已经得到了很好的解决. 在智能车辆导航的复杂和挑战任务中,最重要的问题之一是视觉道路检测.
自动驾驶若类比成人驾驶,人是通过眼睛来获取周围环境的信息,然后通过大脑处理后做出相应的转向和加减速. 那么自动驾驶就是通过利用车辆上的各种传感器,比如毫米波雷达、摄像头、激光雷达等来获取环境信息,然后通过中心处理器来判断下一步应该执行的操作. 其中,摄像头在环境感知中起着非常大的作用,提供了丰富的信息,有着独一无二的优势. 在2012年,Hinton等[1]将卷积神经网络AlexNet很好地应用在Image Net数据集上,从此,神经网络、深度学习、图像识别开始进入了高速发展的阶段.
Wu等[2]设计了一种新的浅层残差神经网络,来执行诸如分类、检测或语义分割等任务. 在这种方法中,每个任务都要学习一组不同的参数. 因此,联合推理在这种模型中是不可能的,难以满足实时性的要求.
Hariharan等[3]设计了一个同时检测和分割的神经网络模型(SDS),与传统的语义分割不同,这个网络模型需要单独的对象实例. 然后,使用分类特定的自上而下的图形基础预测来完善自下而上的区域建议. 然而该系统依赖目标检测器,并且没有充分利用在分割过程中获得的丰富图像特性.
郭继舜等[4]提出的面向自动驾驶的语义分割和目标检测技术,提出了一种混合增强网络Mix Net,通过共用前端网络提取底层语义信息,有效减少了总模型体积以及运行时的算力要求. 但其模型性能耗时达到208 ms,慢于本文模型,并且无法达到实时性要求.
在这样的背景下,模型以提高算法的实时性为首要目的. 首先,对图像进行预处理,然后通过编码器对图像进行特征提取,所提取的特征会用来同时处理三类任务,即分裂、目标检测和语义分割. 通过共享编码区的方式来提升算法的实时性. 同时在语义分割模块中加入带孔空间金字塔池化层,从而提升其性能.
本文贡献点:(1) 提出通过共享编码区提取图像特征,从而实现语义分割、目标检测和分类任务,降低模型检测实时性;(2) 在语义分割任务模块中,加入了带孔空间金字塔池化层,在不太影响实时性要求的情况下,提高语义分割任务的精度.
本编码器结构使用了一种高效率的前馈结构,用于目标检测、图像分类和语义分割的联合预处理.这3个任务共享一个编码器,并且有3个分支,分别对应着3个不同的任务,每个分支都为给定的任务实现一个对应的解码器. 此结构可以实现端对端神经网络训练[5].
编码器的任务是对图像进行预处理,提取包含所有图像信息的丰富抽样特征,以实现精准的检测、语义分割和图像分类任务. 编码器由神经网络的卷积层和池化层组成. 本实验中使用了VGG16[6]和ResNet网络[7]结构作为预训练权重. 其中VGG16编码器使用了它全部的卷积层和池化层,但是没有使用它的全连接层. 还有一种版本是使用了全部的VGG网络层,只抛弃了最后的一个softmax层,对于这种方法,使用了1x1卷积来替换掉原来的全连接层,这种方法使得编码器可以处理任意大小的输入图像. 而对于ResNet网络,实验中实现了ResNet101版本,使用了所有层除了最后的softmax层. 在实验阶段将对比两种网络的精确度和实时性.
在AlexNet[1]发展之后,目前大多数的图像分类方法都利用了深度学习. 残差网络[8]可解决训练深层神经网络出现的梯度消失和梯度爆炸问题,是目前最好的神经网络结构. 在道路环境内容的分类中,深层神经网络也得到了广泛的应用[9]. 在本文中,使用分类来完成语义分割和车辆检测,基于编解码器模型的车道识别与车辆检测算法如图1所示.
图1 基于编解码器模型的车道识别与车辆检测算法图Fig.1 Algorithm diagram of lane recognition and vehicle detection based on code-model
在典型的图像分类任务中,输入以一个对象为特征,通常集中在图像的显著位置. 对于这种任务,使用非常小的输入大小是合理的. 另一方面,街景包含大量的小尺度物体. 为了利用这些物体提供的特征,使用高分辨率输入至关重要. 若输入图像的大小为1248×348, 有效地应用了特征生成器对于每个图像的空间位置. 最后生成39×12的像素特征,每个特征对应的空间区域的大小为32×32像素. 为了利用这个特性, 首先应用1×1卷积与30个滤波器. 这一层充当瓶颈层,其主要目的是降低维数.
由于深度学习在分类任务中取得了极大的成功,卷积神经网络的分类器也可以很好地应用在语义分割任务上. 早期的方法是利用卷积神经网络去实现滑动窗口搜索[10-11]. FCN(Fully Convolutional Networks)[12]提出了一种基于卷积网络的端对端语义分割模型. 转置卷积[13]被用来实现进行上采样以提高低分辨率的特征样本. 有许多基于FCN的语义分割模型被提出. 这里将使用基于VGG16和Resnet101网络的语义分割模型,并在此基础上加入带孔卷积,在不降低分辨率的情况下增加接受域的范围.
2.2.1 全卷积网络
一个典型的卷积神经网络可能由一系列卷积层组成,随后是全连接层,最终运行softmax激活函数,对一个与分类任务相似的任务来说这是一个很好的体系结构. 但是如果提出目标在这张照片中的位置是在哪里时,上述的卷积神经网络就很难解决这个问题,因为全连接层是无法保留空间信息的,但随着FCN网络提出,如果用1×1卷积层来替换全连接层就可以解决这个问题,因为这样可以保留图像中的空间信息. 另外,由于卷积运算、全卷积网络可以处理任何大小的图像,在具有全连接层的经典卷积网络中,输入的大小受到全连接层的限制,通过相同的卷积层序列传播大小不同的图像,使最终的输入扁平化,对于不同的图像大小将有不同的输出.
全卷积网络实现了计算机视觉应用领域的最新成果,如语义级别的图像分割. 全卷积网络利用3种特殊技术:(1) 以1×1的卷积层替代全连接层;(2) 利用转置卷积层进行上采样;(3) 跳跃连接,跳跃连接使网络可以使用来自多分辨率尺度的信息,因此网络能够做出更精确的分割决策.
全卷积网络中的1×1卷积层是通过以逐层卷积层替换一个全连接层来实现的,这将产生输出值,张量将继续维持四维的状态而不是二维的,因此空间信息将被保留. 可以使用转置卷积来创建全卷积网络的解码器,转置卷积本质上是一个反向卷积,其中前向和反向传播被调换,因此称它为转置卷积,由于所做的只是调换前向传播和反向传播的顺序,其数学计算实际上和之前做的完全一样,因此可微性质保留下来,而训练与之前的神经网络完全相同. 如果将编码器的输出解码回原始图像尺寸,一些信息却已丢失,跳跃连接是轻松保留信息的一种方式,跳跃连接工作的方式是使一层的输出与一个非相邻层连接,将来自编码器的池化层的输出与当前层的输出相结合,最终的结果弯曲传递到下一层,这些跳跃连接使网络可以使用来自多分辨率的信息,因此网络能够做出精确的分割决策,见图2所示.
图2 跳跃连接Fig.2 Skip Architecture
2.2.2 带孔卷积
在传统的语义分割中,图像输入到神经网络中经过卷积神经网络的特征提取,再经过池化层来降低图像尺度的同时增大感受野. 但由于语义分割任务是对图像逐像素级的分类,所以输出大小要和输入大小相同,所以还需要通过上采样来将经过特征提取缩小了的图像恢复原大小. 全卷积网络就是应用了转置卷积来完成的,因此传统的语义分割大多数是先通过池化层缩小图像以增大感受野,再通过上采样恢复图像大小. 但图像在经过缩小到放大的过程中难免有图像细节信息的丢失,尤其是池化层操作. 所以有了带孔卷积的发明.
如图3所示,带孔卷积中有个重要的参数叫做rate,这个参数表示带孔的数量. 如图3(a)所示,其rate=1. 其含义是原图不丢失任何信息进行卷积,就是传统的的卷积核进行卷积操作. 如图3(b)~(c)所示,可以看到其红点代表原来的卷积核,浅蓝色的网格用0来填充,从而进行卷积. 采用带孔卷积的好处是可以在不缩小图片尺寸的情况下来提取图像特征,变相地增加了图像的感受野. 带孔卷积主要是解决图像分辨率和感受野之间的矛盾.
但其缺点是无法很好地对小物体进行分割,因为在其卷积核中填充0还是会丢失部分图像特征信息. 因此提出多尺度图像特征提取.
图3 带孔卷积Fig.3 Atrous Convolution
2.2.3 带孔空间金字塔池化层
在目标检测任务中,一般卷积层后面接着就是全连接层,而全连接层都是有固定特征值的,所以在检测任务的输入端通常是固定大小的. 但是检测的物体尺寸通常是变化的,传统的手段是通过改变输入图像的尺寸,但是这样会改变检测物体的横纵比例,使检测精度降低. 所以有人提出空间金字塔池化层[14]. 其作用就是将任意尺寸的输入图都能够转化为固定大小的输出特征,一般用在最后一层池化层.空间金字塔池化层如图4所示.
图4 空间金字塔池化层Fig.4 Spatial Pyramid Pooling
这里提出的带孔空间金字塔池化层是在上述的基础上加入了带孔卷积的思想,在对不同尺度上的图像特征进行采样时可以有效提高精度. 通过不同rate的带孔卷积可以有效地提取到多尺度图像空间信息. 如图5所示,其带孔空间金字塔层是包含了一个1x1的卷积核和3个3×3的rate分别为6、12、18的带孔卷积核,通过这样的方式可以更好地提取出并行多尺度图像特征.
图5 带孔空间金字塔池化层Fig.5 Atrous Spatial Pyramid Pooling
传统的利用深度学习进行目标检测的方法分为两步,首先生成区域建议[15],然后使用卷积神经网络进行评分[16]. 在对区域建议生成的图片使用卷积神经网络,可以提升准确率[17],最近端对端神经网络也被提出用来进行物体检测[18-19]. 端对端神经网络的优势是在于它的训练时间和预测时间都要短,所以端对端神经网络更加适合用在那些实时性要求高的地方. 实验中将采用端对端神经网络来实现车辆检测功能.
解码器的第一步是生成边界框的初略估计. 然后通过1×1卷积层和400个过滤器来产生39×12×400的张量. 这个张量在继续和1×1的卷积层进行卷积操作,最后生成39×12×6的输出,这就是最后的预测结果. 其中前两个通道构成图像的检测结果,它们的值表示的是包围框的置信度,剩余的4个通道是表示检测物体的包围框的坐标.
为验证方法的有效性,对车道道路和车辆目标进行检测. 实验中的训练和测试数据利用KITTI数据集. 实验平台为锐龙1700处理器,内存16 G,显卡为NVIDIA GTX1080TI,软件为cuda7.0,Tensorflow1.4.
其中KITTI数据集包括了289张训练图案和290张测试图像. 分辨率为1248×384,它包含了3种不同类别的道路场景. 训练图像如图6所示.
在测试阶段,使用KITTI视觉基准[20]进行测试,对于语义分割模块使用KITTI道路基准[21]来评测其性能, 其中使用到MaxF1和平均精度进行评分. 对于分类我们使用KITTI目标检测基准[22]去评测分类解码器,采用平均精度和召回率进行评分.
关于参数设定,使用了Adam优化函数[23]和学习率设置为1×10-5. 权值衰弱为1×10-4,Dropout为0.5,用于目标检测和分类中.
图6 训练集原始图像和标注图像Fig.6 Training original image and label image
语义分割结果如表1所示,使用了3种不同的预训练权重来比较. 可以看出Resnet网络的精度最好,但是由于其网络结构较深,其时间和VGG16网络相比并不占优势,VGG16网络的精度时间比最佳. 语义分割显示如图7~8,绿色部分预测为车道,阈值超过0.5的标记为绿色.
图7 城市标记车道结果Fig.7 Result map of urban lane marking
图8 城市非标准车道结果图Fig.8 Results of urban non-standard lanes
表1 语义分割检测结果Tab.1 Semantic segmentation detection results
分类检测结果如表2所示,这里比较了VGG16和Resnet101这2种方法,可以看出在平均精度上2种方法相差不大,在速度上VGG16网络因其较浅的神经网络结构有一定的优势.
表2 分类检测结果Tab.2 Classification test results
表3 联合检测速度结果Tab.3 Results of joint detection speed
本文提出一种基于编解码器模型的车道识别和车辆检测的联合算法,能够通过相同的编码器提取公共图像特征来完成3种不同任务,从而提高运行速度. 同时可以进行端对端的任务训练,在KITTI数据集上运行良好. 从最终检测结果来看,VGG16作为预训练网络的速度精度均优于Resnet101网络. 下一步的研究目标分为两个方面,一是通过采用不同的空间金字塔池化层来进一步提高语义分割的精度,二是继续提高任务的实时性.