基于尺度感知CNN 的实时车辆检测算法∗
2020-10-09郑秋梅王风华孙燕翔马茂东
郑秋梅 曹 佳 王风华 孙燕翔 马茂东
(中国石油大学(华东)计算机与通信工程学院 青岛 266580)
1 引言
随着人们对自动驾驶和交通监控系统的日益关注,车辆检测已成为计算机视觉领域中的研究热点。目前卷积神经网络(CNN)在车辆检测任务中取得广泛应用。然而由于车辆在场景中的位置离视点远近的原因导致车载或交通视频中包含的车辆尺寸变化较大,而传统CNN 对不同空间尺寸车辆的鲁棒性表现不足,致使识别率不理想。为进一步提高对不同尺寸实例对象检测的鲁棒性及准确率,文献[1~3]通过利用具有多个分辨率的输入图像使网络适合所有尺寸或融合CNN 多层特征图谱中提取的特征使网络适合不同尺寸[4~10]。但这些方法引入了昂贵计算开销,降低了车辆检测的实时性。
为提高检测速度,YOLO[9~10]和SSD[7]将目标检测转换为回归问题,但这种基于网格的范式因其太强的空间约束使得对小目标检测效果欠佳。因此,现有的方法大多采用候选区域结合CNN 实现目标检测,如Fast R-CNN[1]和Faster R-CNN[11],但通常使用的RoI池[1]只是复制特征值以适应预设特征长度,扭曲了小物体的原始结构。而且,在训练过程中,填充复制值不仅导致前向传播表示不准确,还会积累反向传播中的错误,妨碍网络对小尺寸车辆的正确检测。因此本文提出尺度感知的ROI 池化层,为小尺寸车辆生成精确的特征图谱,而不需要额外的空间和时间负担。
同时,针对不同尺寸车辆之间类内距离通常很大,使得网络难以使用相同的权重集来表示具有不同大小的对象这一问题。本文提出一种用于车辆检测的多分支决策网络,每个分支被设计为最小化特征的类间距离,因此比现有网络更有效地捕捉具有各种比例对象的区分特征。本文首先利用尺度感知RoI 池来保存小尺寸物体的原始结构。然后将经过池化层融合的特征馈送到分支决策网络,从而提出尺度感知的卷积神经网络算法(SAVD)。实验证明,本文算法较于现有算法[2、4、9~13]有更高的识别率,并对不同尺寸实例对象有更好的鲁棒性。
2 基于尺度感知CNN 的实时车辆检测算法(SAVD)
2.1 算法的整体框架
本文首先将整个图像提供给几个卷积和所提出的尺度感知的ROI池化层(SAROI池),以生成丰富的特征表示。其中,SAROI池化层采用双线性内核的反卷积来扩大小尺寸提案的特征区域,避免用复制值表示小目标。同时,SAROI 池化层应用于CNN 的多个层次,并将不同卷积层的特征进行级联,以融合低层细节信息和高层语义信息来检测对象[6],生成一组卷积特征图。然后利用区域建议网络(RPN)[4,11]将先前的卷积网络的特征映射作为输入并生成固定数量的anchor 提议。对于每个anchor 建议,SAROI 池化层提取出特征向量。在此基础上,根据建议的大小将SAVD 划分为两个规模特定子网络的分支,减轻了不同尺寸规模对象类内变化较大的训练负担,并提高大尺寸物体和小尺寸物体的检测精度。最后,将分支的检测结果通过门函数融合到最终的检测结果中。双线性核反卷积和分支决策网络是轻量级运算,前者只处理小的建议而不扩大到整个特征图,后者处理的建议数与传统的检测方法相同。本文算法整体框架图1所示。
2.2 特征提取
丰富的特征表示由该阶段的网络生成,利用了CNN 网络的卷积层和尺度感知ROI 池化层。然后利用不同卷积层的级联(多特征映射连接,图1 表示为“concat”),将其输入到后来的RPN 和分支决策网络中。
图1 尺度感知CNN的实时车辆检测算法整体框架
传统两阶段检测算法,如Faster R-CNN[11],为满足分类网络的输入要求,通过ROI 池化层[1]将每个建议指定为固定大小的特征向量。ROI 池将每个建议划分为U×V个子窗口,并使用最大池为每个子窗口提取一个值,以便输出具有固定大小。若提案小于U×V,则复制提案的某些部分以填充额外空间将其扩大为U×V。但它破坏小物体的原始结构及上下文信息。在网络训练中,填充复制值不仅会导致前向传播表示不准确,而且还会积累反向传播中的错误。导致网络对小尺寸车辆的检测不具有鲁棒性。
尺度感知ROI 池(SAROI 池)可以在保持小尺寸对象的原始结构的同时将建议调整到指定大小。存在如下三种情况。1)若建议大小大于指定大小,则将在每个子窗口中提取最大值作为原始的RoI 池策略。2)若建议的大小小于指定大小,则采用双线性内核的反卷积操作来放大建议,从而从小提议中提取具有区分性特征。反卷积内核的大小由提议大小和预定义的池化层大小动态确定。3)若建议的宽度大于指定的宽度且建议的高度小于指定的高度时,SARoI 池化层使用反卷积操作放大该建议的高度将该建议的宽度拆分成多个子窗口,并将每个子窗口的最大值用作最具有区分性的特征值。用如下公式来表述上述三种情况:令为第k 个建议中SAROI池化层的第j 个输出。则:
反向传播:通过反向传播将导数转移到SARoI池中以训练网络。对应于输入变量xi的损失函数L的偏导数为
其中i*表示反卷积之后每个子窗口中最大值的位置。表示反卷积关于损失的导数。损失从连接到SAROI池的后续层中传播。
2.3 区域建议网络(RPN)
由于背景对象总是占多数,因此过滤候选池对于构建有效的车辆检测系统至关重要。为此,本文利用改进后的小型RPN 网络提取候选框以及消除背景区域。将特征映射划分为64×36 个网格,而对于每个网格,生成一组anchor boxes 或初始对象框,其固定大小为32×32,64×64,128×128,256×256 和512×512,并且不同的长宽比为1∶2,2∶1 和1∶1。与Faster R-CNN 不同,本文直接使用anchor boxes 来提出候选对象,而不使用额外的全连接(fc)层。SAROI 池将每个anchor box 中将特征向量指定至固定大小,然后这些特征向量被馈送到多分支决策网络中,文献[14]表明,使用这个简单但有效的提议网络,大约98%的背景区域可以被丢弃,从而显著提高速度。
2.4 分支决策网络
通常交通或车载视频中车辆尺寸变化较大,为进一步提高检测精度,本文提出的分支决策网络是两个规模特定子网络的集合,其分别检测较大尺寸和较小尺寸的车辆。每个分支由一个卷积层和一个全连接层构成,然后连接两个分类器:用于分类与边界框回归。最后,两个子网络的检测结果通过门函数进行加权融合。
在双分支决策网络中,本文使用训练集中所有对象尺度的中值作为参考阈值,将提案分解为大分支或小分支。在训练过程中,为了使两个分支在中间尺度上共享样本的一部分并且增加每个分支的训练样本的大小,在每次训练迭代中动态地改变分割提议的阈值。使用高斯模型模拟阈值变化,所有对象的尺度的中值是高斯模型的平均值。如此,一些具有接近于所有对象尺度的中值的尺度的建议在训练过程中有机会被分类为大的和小的分支。在测试中,只使用中值来分割提议。最后定义门函数,以自适应加权内置子网络的输出。令wl和ws分别表示大尺寸和小尺寸子网计算的输出权重。令提议高度为h,则wl与ws计算如下:
2.5 网络训练
本文模型使用随机梯度下降进行端到端训练。为使训练过程稳定,首先利用较小的学习率来训练RPN,然后利用较大的学习速率来训练整个网络。首先将学习率设置为0.0001,进行10k 次迭代,权重衰减为0.0005,来训练RPN。然后,将学习率设置为0.0005 来训练整个网络,在40k 和70k 迭代时将其减少0.1 倍,并在75k 迭代后停止学习。后续实验测试本文算法基于PVA[15]网络及VGG[16]网络,为加速训练并减少过拟合,使用在ImageNet[17]上训练的VGG 中的卷积层或在Pascal VOC[18]上训练的PVA 的权重来初始化RPN。最后,利用VGG和PVA 中fc 层的训练权重来初始化多分支决策网络的完全连接层,其他层由随机噪声初始化。
在测试中,对于每个输入图像,本文将多分支网络输出结果融合在一起使用非极大值抑制(NMS)来优化结果。并使用软化非极大值抑制(soft-NMS)来提高遮挡车辆的定位精度,即选择几个具有较高可信度的包围盒,并对它们的坐标取平均值。
3 实验结果与分析
3.1 数据集和评价指标
实验车辆检测数据集选用KITTI[19]、DETRAC[20]数据集。KITTI是一种广泛使用的车辆检测算法基准。它包含不同场景中的各种比例的车辆。包括7481 张用于训练的图像和7518 张用于测试的图像。根据大小、遮挡和截断等情况,将这些目标车辆分为三个难度级别:容易、中等和困难,文献[19]定义了这些难度级别。
DETRAC 是由摄像机安装在北京的交通杆上,并在阳光明媚、多云、雨夜等不同光线下拍摄的,包含较大空间尺寸变化的车辆实例的高速公路数据集,它包含两个场景:稀疏和拥挤场景,并分为汽车、公共汽车和货车三类。若平均包含每帧超过15辆车则视为拥挤的场景;否则,为稀疏场景。
实验采用公认的平均精度Average Precision(AP)和交联合(IoU)指标[18]度量来评估车辆检测的性能,它已经广泛应用于各种车辆检测算法[18~19]的评估。AP 是基于数据集中的IOU 计算得到的。其中IoU 为真实值手工标注的边框同模型的预测边框的交比上两者的并。在上述两个数据集中,IoU 为0.7,即,只有检测边界框和手工标注的真值边界框之间的重叠大于或等于70%被认为是正确的检测。
3.2 实验结果分析
本文将提出的SAVD 算法在KITTI数据集上的所有三个难度级别上评估本文算法的识别性能。实验中,SAVD算法框架基于PVA网络[15]和VGG网络[16],在PVA 网络中,SAROI 池的内核大小设置为6×6,在VGG 网络中设置为7×7。整个训练集用于训练我们的模型,并使用同一组测试数据在相同配置的计算机上对其它几种方法进行比较。
表1 表明,SAVD 算法在中等级别的情况下比其它二阶段检测算法[2、4、11~13]有更高的精度并且大幅提高运行速度。而对比一阶段检测算法[9~10],如YOLO 和YOLO V2,虽然运行速度有所降低,但检测精度明显高于一阶段检测算法[9~10]。SAVD 算法更能有效平衡检测精度与运行速度。在保持较高的检测精度前提下满足实时性要求,因此本文算法在识别性能上表现更优。
为研究SAVD 算法在不同尺度车辆上的检测性能。实验在DETRAC数据集上进行,并分别在稀疏和拥挤的场景下进行评估。该数据集包含有较大的尺寸变化的车辆,如图3 所示。车辆根据其尺寸分为三类:高度大于15像素、小于39像素的车辆属于“小”类;高度在39 像素至66 像素之间属于“中”类别;高度大于66 像素属于“大”类别。将每个视频分成两部分,分别选取前70%作为训练数据,其余30%作为测试数据,为避免检索相似的图像,在视频中每七帧提取一帧作为训练/测试图像。
表1 基于KITTI数据集,车辆检测实验结果对比表
表2 基于DETRAC数据集,车辆规模分析实验对比表(晴天)
表2 表明,本文SAVD 算法基于PVA 网络显示了在不同场景下所有车辆尺度上的改进。与其他大小尺寸的车辆相比,小型车辆对象的改进更为显著,因为传统方法方法的ROI池化层通过填充复制值使得小尺寸车辆发生扭曲,而本文算法避免了这一点。此外,本文算法在拥挤场景中相比于其他算法对于中小尺寸车辆识别率更高。表明本文算法在复杂场景下识别效果表现更为鲁棒。
为评估SAVD 框架中不同成分对检测性能的影响,本文在KITTI 数据集上对SAVD 进行控制实验。由于没有为KITTI 的测试集提供标注数据,本文按照文献[4]将训练集分为训练集和验证集,并将输入图像调整为576×1920。
表3 基于KITTI基准,SAVD框架中不同成分控制实验结果对比表
表3 表明,首先,与仅基于PVA 网络的MSCNN算法相比,增加本文所提的SARoI池化层显著提高了检测精度,同时没有引入额外的运算时间。从表中看出,对“中等”和“困难”难度级别的检测率有显著提高,表明由SARoI池恢复的高分辨率语义特征对于检测小对象有很大助益。其次,增加具有两个分支的分支决策网络进一步提高了检测精度,同时保持了检测速度。最后,经Soft-NMS 处理后提高了“困难”这一难度级别的检测率,“困难”类中包括许多遮挡和模糊的车辆,从而表明其对遮挡和模糊的车辆具有鲁棒性。
在图2 和图3 中,我们在KITTI 数据集和DETRAC 数据集的图像上可视化了由SAVD 算法检测到的车辆。结果表明,该算法在模糊、多雨、遮挡等不同情况下,对不同方向、不同尺度的车辆具有鲁棒性。
图2 基于KITTI数据集,SAVD实验效果图
图3 基于DETRAC数据集,SAVD实验效果图
4 结语
本文为实时精准检测具有较大尺寸差异的车辆,提出基于尺度感知CNN 的实时车辆检测算法(SAVD)。为提高小尺寸实例对象的识别率,SAVD算法提出基于尺度感知的ROI池化层,借此保留小尺寸对象的上下文信息。同时,为最小化具有较大尺度变化的对象之间的类内距离,使网络对各种实例尺寸车辆具有鲁棒性,本文提出分支决策网络,将大规模子网络和小规模子网络结合为一个统一的架构,并使用本文设计的加权机制将两个子网络的输出进行融合。上述操作是轻量级技术,无需额外的计算工作量。实验证明,相比于其他算法,SAVD 算法有更高的识别率,比其它两阶段检测算法识别速度更快,满足实时性要求。