改进的Corner Net-Saccade车辆检测算法

2021-07-14 05:34梁礼明蓝智敏钱艳群
关键词:角点沙漏残差

梁礼明,熊 文,蓝智敏,钱艳群

(江西理工大学 电气工程与自动化学院,江西 赣州 341000)

车辆检测是目标检测领域的重要研究分支,准确实时检测目标车辆能有效缓解交通监控压力和减少车辆违规行为的发生[1],而这依赖于先进的车辆检测技术。

自从Krizhevsky等[2]在ImageNet 2012图像识别挑战赛上首次证明了机器学习到的特征可以超越传统手工设计[3-4]的特征后,基于深度学习的方法在目标检测领域中得到大量应用,这些方法大致可分为基于区域的方法和基于回归的方法两大类。基于区域的方法,如Ren等[5]采用区域建议网络(RPN)提取感兴趣区域,并对此区域加以分类实现端到端的目标检测,但是检测速度离实时性检测要求还有一定的差距。基于回归的方法,如Redmon等[6]和Liu等[7]均将目标检测问题作为回归问题来分析,相比基于区域的方法检测速度要快很多,但是此类算法提取目标特征鲁棒性较差,无法将前景区域与背景区域完全区分开来,从而导致检测精度不够高的问题。上述方法皆需要预先设计锚点框(anchor box),通过计算锚点框与目标对象的交并比(IoU)来筛选出重叠程度大的锚点框,基于这些锚点框最后实现目标的位置类别检测,处理效率较高。但是此举又引入了诸多问题,首先锚点框的引入会带来众多超参数和设计选择的难题,如锚点框的尺寸和锚点框的长宽比选择等,其次锚点框数量巨大,可能会造成正负样本不平衡,并最终导致模型训练收敛速度慢,检测精确率低。

针对锚点框算法带来的问题,Law等[8]使用新型特征嵌入方法和角点池化层(corner pooling layer)建模目标的左上角点和右下角点的信息,从而准确匹配属于同一目标对象的关键角点,并通过角点准确定位目标边框以及识别目标类别[9],但是该算法存在网络参数冗余度高、检测速度过慢的问题。Law等[10]提出的CornerNet-Saccade引入类似人眼的注意力机制来提高检测速度,其通过目标位置估计阶段获得含有目标位置的大致区域信息后,从图像中裁剪出含有目标的区域进行目标关键点精确检测。由于裁剪出的图像像素量大为减少,背景复杂度降低使得更加有利于精确查找待检测目标。CornerNet-Saccade在检测速度和精确率上有着一定的优越性,但是在车辆检测应用中存在着明显的误检和漏检现象。

本文针对CornerNet-Saccade存在的问题,提出一种改进的CornerNet-Saccade车辆检测算法。改进后的算法可有效解决原算法存在的误检和漏检问题,并进一步提高车辆检测的精确率和速度。

1 Corner Net-Saccade算法原理

1.1 堆叠沙漏网络

CornerNet-Saccade采用简化后的堆叠沙漏网络(Stacked Hourglass Networks)[11]作为检测网络。单个沙漏网络模块仿照残差网络[12]的结构进行组建优化,并通过3个跳跃连接结构使得特征融合层能共享其他层特征信息。按其组建阶数的不同(可查看下采样次数判断其阶数)可分为1、2、3、4阶等,将多个沙漏网络模块进行堆叠便形成了最终的特征提取网络。CornerNet-Saccade采用3个3阶的沙漏网络模块按串联结构拼接而成。单个沙漏网络模块结构如图1所示。

图1 单个沙漏网络模块结构图

其中灰色矩形表示残差单元;灰色矩形含有方向向下的箭头区域表示残差单元进行下采样操作;灰色矩形含有方向向上的箭头区域表示残差单元进行上采样操作;带加号的圆形区域表示特征融合层;橙色矩形表示卷积模块。

图1中,输入图像在单个沙漏网络模块中分别进行3次下采样和3次上采样,其中下采样操作采用步长为2的卷积进行特征降维,相比传统的池化降维方式,其保留了更多的目标有效信息;上采样操作采用近邻插值法恢复相应网络层的特征图大小。每次下采样后均使用一个残差单元对目标特征进行提取,然后通过上采样恢复原始特征图大小,最后融合大小与通道一致的各层特征图,输出多尺度的目标特征信息。堆叠沙漏网络采用自顶而下和自底而上的设计方式,能有效解决特征网络多次采样后目标特征丢失严重的问题,且更利于捕获全局和局部的目标特征信息,对后续检测目标角点回归目标边界框提供有效的目标特征。在单个沙漏网络模块中各层输出特征图大小及通道数的变化情况如表1所示。

表1 各层输出特征图大小及通道数

续表(表1)

从表1中可知网络的输入特征图和输出特征图在大小和通道上均相同,通过堆叠多个沙漏网络模块可实现目标特征的深度提取。

1.2 角池化层输出预测模块

沙漏网络的输出连接2个预测模块,分别用于左上角点和右下角点的预测。2个预测模块皆通过角点池化层(左上角池化层和右下角池化层)分别输出heatmap(角点位置预测)、embedding(角点分组)以及offset(角点坐标误差修订)。不同于传统的最大池化层(max pooling)通过滑动窗口提取局部窗口像素的最大值,角点池化层(corner pooling)通过递归方式在图像中每个水平方向和垂直方向对每个像素位置做最大池化操作。假设特征图中位置(i,j)处为目标的左上角点,则应满足下列2个关系式:

其中:yt和yl分别为左上角池化层的输入特征图;特征图的大小为h×w;ytij和ylij分别为yt和yl特征图中位置(i,j)处的特征向量,特征向量的长度为目标类别数量;在特征图yt中,对位于垂直方向上的特征向量向上做最大池化操作后得到的所有响应向量表示为tij;在特征图yl中,对位于水平方向上的特征向量向左做最大池化操作后得到的所有响应向量表示为lij。最后将式(1)和式(2)相加得到的结果传送到最后的预测模块,右下角池化层和左上角池化层类似。预测模块将角池化层的输出和沙漏网络的输出信息相加后作为预测模块的输入,预测模块输出值主要用于确定角点位置信息、角点坐标误差计算以及对角点分组操作。

1.3 注意力机制

人类能够迅速地选取视野中的关键部分,选择性地将视觉处理资源分配给这些视觉显著的区域。在计算机视觉领域,理解和模拟人类视觉系统的这种注意力机制,得到了学界的大力关注,并显示出了广阔的应用前景[13]。CornerNet-Saccade引入注意力机制减少图像像素的计算量,提高算法的检测速度。详细地,堆叠沙漏网络的3个特征融合层输出不同尺度的attention maps(64×64、32×32、16×16),基于多尺度下的attention maps粗略地提取图像中含有的目标位置信息,并回归出目标的大致边界框。在目标边界框经soft-nms处理后,在高分辨率原始图像中裁剪出含有目标的区域,裁剪区域由于可能含有多个目标,并且部分目标裁剪过后存在残缺的情况,还需消除距离裁剪边界较近的边界框。后续只需要对裁剪后的区域进行目标角点的精确检测,最后将角点位置坐标信息映射回原图以此回归出目标的边界框。完整的检测流程如图2所示。

图2 检测流程

2 改进的Corner Net-Saccade车辆检测算法

2.1 算法流程

本文算法在CornerNet-Saccade的基础上进行改进,通过引进密集-残差单元重建堆叠沙漏网络,增强网络对车辆特征多元信息的提取能力,同时降低网络参数以提高车辆检测速度;其次在多尺度下的车辆位置信息提取阶段增加更小尺度的attention maps(8×8)以改善特小目标车辆的检测效果。具体流程如图3所示。

图3 本文算法流程框图

首先对原始图像进行4倍的下采样(下采样率R=4)操作以满足网络端口对输入图像大小的要求;然后将下采样后的图像输入到改进后的堆叠沙漏网络中进行车辆特征提取,并初步获得车辆的位置信息。由于背景图像中车辆目标大小迥异,将会对车辆检测的精度产生极大影响,针对此问题,在网络车辆特征提取过程中,将网络输出的特征图经核大小为3的卷积层(Conv)和非线性激活层(Relu)处理后,再采用核大小为1的卷积层进行特征降维,经Sigmoid激活函数归一化后得到4种不同大小的attention maps,从而获得多尺度下的车辆位置信息;最后基于上个步骤获得的车辆位置信息,从原始输入图像种裁剪出含有目标车辆的图像区域后,再次输入到堆叠沙漏网络中回归出车辆的检测框。

2.2 改进后的堆叠沙漏网络

2.2.1 密集-残差单元

优化神经网络的方法普遍基于反向传播的思想,即根据损失函数计算的误差通过梯度反向传播的方式,指导深度网络权值的更新优化,但是会存在随着网络的加深出现梯度消失和梯度爆炸的现象,从而导致网络性能退化的问题[14]。为了减少网络学习能力和表征能力受网络层数的限制,He等[12]提出残差网络(Resnet)较好地避免了此类问题的发生。CornerNet-Saccade采用2层残差单元作为堆叠沙漏网络模块的基本组成单元,其结构如图4所示。

图4 残差单元结构

图4中,上方<*>表示卷积层的输入通道;K表示卷积核大小;下方<*>表示卷积层输出通道;蓝色区域表示批处理归一化层BN;灰色区域表示非线性激活函数层Relu;带加号的圆形区域表示特征融合层。

残差单元的引入使得堆叠沙漏网络不会受网络深度的限制而出现训练困难的问题,通过堆叠多个残差单元结构提高了网络特征提取能力,其中的特征融合层可增加图像中细节信息的传递,有利于提高车辆检测的精确率。但是这种残差单元结构由于采用了2个核大小为3×3的卷积层导致存在参数冗余度较高的问题,且残差单元的输出对部分卷积层的特征重用率不高。首先将原残差单元改为参数量更少的3层瓶颈残差单元,其次,借鉴Huang等[15]的层间密集连接结构,将残差单元主路上第一个非线性激活函数层输出通过一个核大小为1×1的卷积层和批处理归一化层连接到特征融合层上,这种连接方式保证了卷积层之间的最大信息流通,进而提高对车辆尺度和特征多元信息的提取能力,最终构建成如图5所示的密集-残差单元。

图5 密集-残差单元结构

2.2.2 改进后的堆叠沙漏网络结构

堆叠沙漏网络中的残差单元作为特征提取的基本模块,其内部结构、连接方式的不同对网络性能会产生较大地影响。本文通过引入密集-残差单元对堆叠沙漏网络重建,使网络性能达到最优。在改进后的堆叠沙漏网络中,单个沙漏模块采用对称连接方式拼接密集-残差单元,每边顺序连接5个密集-残差单元对车辆特征进行反复提取,同时对称边采用特征融合的方式提高车辆特征重用率,3个沙漏模块之间为串联关系。考虑到CornerNet-Saccade在车辆检测上存在明显的误检和漏检问题,尤其是对小目标车辆检测时,误检和漏检现象更为突出。基于此问题,在每个沙漏网络模块中分别增加一次下采样和上采样,并融合采样过程中的特征信息,使得新增的特征融合层能输出更小尺度的attention maps(8×8),其中8×8大小的attention maps相比原16×16大小的attention maps在小目标检测时具有更高的车辆细粒度识别能力,且在提取车辆更高级的语义信息上具有一定的优越性。改进后的堆叠沙漏网络结构如图6所示。

图6(a)中,3个沙漏模块串联构成了整个特征提取网络。其中C为新增特征融合层,输出特征图大小为8×8;绿色虚线框A包含了最后一个沙漏网络模块中的4个特征融合层,其输出特征图经系列操作后生成多尺度的attention maps,具体过程如图6(b)所示。本文方法通过融合大小与通道数一致的特征信息,结合网络底层局部信息和高层全局语义信息对车辆的多种特征进行高效提取,可有效减少车辆检测中出现的误检和漏检现象。

图6 改进后的堆叠沙漏网络结构及流程框图

2.3 车辆检测框的回归

在二维平面中确定目标车辆的检测框有多种表示方法,本文采用4个要素(xt,yt,xb,yb)回归出车辆的检测框。其中,xt和yt表示目标车辆左上角点位置信息;xb和yb表示目标车辆右下角点位置信息。在堆叠沙漏网络的输出端经角池化层处理后得到多个目标车辆的角点位置信息,由于角点位置信息是基于下采样后的图像中计算得到的,还需将角点位置信息映射回原始图像中。此外在一副图像中得到的角点位置信息繁多,需对角点位置信息进行分组操作,以确定属于同一目标车辆的左上角点和右下角点。

2.3.1 角点位置预测分支

假设原始图像大小为W×H,角点位置预测分支的大小为×C,R表示下采样率,C表示车辆类别数,本文中设置R=4和C=1。该分支经sigmoid激活函数归一化后,×C大小的特征图上每一点表示该位置下含有车辆目标角点的概率值。

式中,σ值为平衡正负样本系数,本文设置σ值为车辆目标短边的0.2倍,对于角点位置预测分支,损失函数采用下式计算。

式中:α和β为超参数,本文分别设置值为2和4;Pxyc为真值热图中位置(x、y)处某个目标车辆的角点预测值。

2.3.2 角点坐标误差修订预测分支和角点分组预测分支

由于堆叠沙漏网络的输入图像大小和输出图像大小均为原始图像的1/R,在真值热图中预测到的目标车辆角点映射回原始图像中存在坐标误差的情况。假设原始图像位置(x、y)处存在第k个目标车辆,其在真值热图中的坐标偏差为

在网络训练时,角点坐标误差修订项采用smoothL1损失,即

式中:N为图像中目标车辆个数;Pk为预测值的坐标偏差。

在角点分组预测分支中,旨在确定属于同一目标车辆的一对角点,对每个角点生成一个嵌入向量(embedding vector),如果一对角点属于同一目标车辆,则这对角点的嵌入向量距离应足够近,反之,则应非常远。本文采用式Lpull距离损失和式Lpush距离损失分别反映角点之间的距离远近,即

式中:etk和ebk分别表示图像中第k个目标车辆的左上角点嵌入向量和右下角点嵌入向量;ek为etk和ebk的均值。

网络训练时,完整的损失函数采用带有惩罚项的组合损失函数Lloss,即

3 实验分析

3.1 数据集和实验平台

本次实验选用公开的KITTI数据库[16]和实验室自制数据库对模型进行训练和评估,其中KITTI数据库包含了多个场景采集的真实图像数据,每幅图像含有的车辆数多达15辆,并伴有不同程度的遮挡和截断。自制数据库为从网上搜集的4 000张含车辆图片。根据实验需要只保留KITTI数据库中类别为小汽车(Car)的标签文件,处理后得到6 684张图片,同时将KITTI数据库和自制数据库改为PASCAL VOC2007数据格式,训练集和测试集按3∶1比例划分。

本次实验的仿真平台是PyCharm,使用Py-Torch深度学习框架,计算机配置为Intel®CoreTMi7-6700H CPU,16G内存,Nvidia GeForce GTX 2070 GPU,操作系统为Ubuntu 16.04.2。网络参数配置如下:最大迭代次数为500 000步;批量大小设置为8;采用学习率衰减的方式训练,初始学习率为0.000 25,网络迭代400 000步时,学习率下调10倍。

为了降低网络过拟合的风险,此次实验采用图像增广技术(如水平翻转、色彩抖动、亮度和饱和度的调整等)来扩大训练数据集的规模。

3.1.1 KITTI数据库测试

本文选择Faster R-CNN[5]、YOLOv3[6]、SSD[7]、CornerNet[8]、CornerNet-Saccade[10]与 改 进 的CornerNet-Saccade车辆检测算法进行实验数据对比,所有算法均在KITTI数据库中进行训练和测试。鉴于本次实验研究为二分类问题(含背景),采用平均精确率AP(average precision)以及检测速度FPS(frames per second)作为算法性能评价指标。Precision(精确率)与Recall(召回率)计算方式如下。

式中:TP表示小汽车被正确预测的数目;FP表示背景被预测为小汽车的数目;FN表示小汽车被预测为背景的数目。

表2列出了不同算法在KITTI数据库上的实验结果,可以看出在前3种皆采用锚点框的算法中,YOLOv3的综合性能最佳。从网络结构角度考虑,YOLOv3由于采用残差连接的网络结构,较好地解决了由网络深度带来的网络性能退化的问题,同时网络层之间实现了特征信息的融合,构成的特征金字塔[17]结构更有利于车辆检测和分类。后3种算法均采用了关键点代替锚点框的方法,降低了模型训练时其性能出现较大波动的可能性,在精度方面要远好于前3种算法。其中CornerNet实现的AP仅为90.45%,比CornerNet-Saccade和本文算法分别低0.79%和2.11%,但相比前3种性能最佳的YOLOv3,AP提升了0.61%,这表明了采用关键点代替锚点框的方法在车辆检测任务中具有一定的优势性。

表2 不同算法在KITTI数据库上的实验结果

本文所提算法在KITTI数据库上实现了92.56%的AP和40 FPS的检测速度,在平均精确率和实时性上达到了最好的平衡。由于本文在网络中采用参数量更少的瓶颈残差单元作为特征提取的基本模块,检测速度快于大多数算法,同时引入Dense Block的层间密集连接结构改善残差单元的特征提取能力并增加更小尺度的attention maps以提高小目标车辆检测的精度,使得本文算法获得最高的AP值。实验结果表明了本文所提算法更能适用于车辆检测任务,并能在保证检测速度的同时实现高精度的检测效果。

以小汽车的Recall为横坐标,小汽车的Precision为纵坐标,绘制出不同算法在KITTI数据库上的PR曲线如图7所示,其中各算法对应的PR曲线下的面积为AP。通过比较图7中各算法对应的PR曲线下的面积,本文算法的综合性能要优于其他算法。

图7 不同算法在KITTI数据库上的PR曲线

3.1.2 自制数据库测试

为了验证本文算法模型的泛化性能和改进方法的有效性,将目标检测通用算法Faster RCNN[5]、YOLOv3[6]、SSD[7]、CornerNet[8]、Corner-Net-Saccade[10]与本文算法在自制数据库上做实验对比,同时为了更加直观地比较原算法和本文算法的性能差异,另单独对比2种算法的性能衡量指标。其中自制数据库中测试集有1 000张含车辆(小汽车)图片,车辆标注框数为4 529个。

表3显示了不同算法在自制数据库上的实验结果。从表中可以看出,各种算法在自制数据库上的综合表现相比KITTI数据库有较大提升,究其原因,自制数据库中每幅图像中含有的车辆数更少,且车辆之间存在的遮挡情况较少,更有利于各算法对车辆位置和类别的预测。其中,Faster RCNN和SSD获得了78.36%和84.61%的AP,比YOLOv3分别低11.75%和5.5%,尽管YOLOv3的检测速度不是最快,但其综合性能相比其他2种锚点框类算法仍为最佳。本文算法的AP为95.21%,要高于其他算法,同时检测速度相比CornerNet和CornerNet-Saccade分别提高了33 FPS和8 FPS,但与SSD和YOLOv3的检测速度相比还有较小的差距。通过分析发现,本文算法虽对网络结构进行了参数上的简化,但在目标检测框的回归时,由于图像中存在的目标车辆多,在预测出准确的目标角点时,也会预测出大量的错误角点,在对这些角点分组确认时所花费的时间较多,这降低了本文算法的检测速度。综合衡量各算法在自制数据库上的实验结果,本文算法能够以最佳的精度完成车辆检测任务,并以40 FPS的检测速度达到实时检测的要求,进一步表明了本文算法能适应不同场景下的车辆检测任务,相比其他算法具有更好的应用前景。

表3 不同算法在自制数据库上的实验结果

表4显示了2种算法在自制数据库上的实验结果。其中检测车辆数表示测试集中总共检测出的小汽车数;漏检数表示没有检测到的小汽车数;误检数表示把背景作为小汽车数。从表4中可看出,CornerNet-Saccade存在比较严重的漏检和误检现象。相反,本文算法在提高了检测车辆数的同时,也降低了漏检数和误检数,并使精确率和召回率分别提高了3.8%和8.5%,这进一步说明了本文算法能够适应不同场景下的车辆检测任务,并能准确地对车辆进行检测,可用于实际交通场景下的车辆检测任务。图8显示了本文算法在KITTI数据库和自制数据库上的检测效果。

表4 不同算法在KITTI数据库上的实验结果

图8 本文算法在KITTI数据库和自制数据库上的检测效果

4 结论

对CornerNet-Saccade检测框架进行改进,将其应用到车辆检测任务中。首先对沙漏网络特征融合层的输出额外增加一个预测attention maps模块,实现小目标车辆的精确检测;其次引入参数量更少的瓶颈残差单元替换原残差单元,并借鉴Dense Block的层间密集连接结构,形成最终的特征提取模块。通过在KITTI数据库和自制数据库上的仿真实验,结果表明:算法的综合性能要优于其他算法。但是本文算法的检测速度有待进一步提升,后续工作将围绕CornerNet-Saccade模型压缩与优化加速来进行。

猜你喜欢
角点沙漏残差
基于双向GRU与残差拟合的车辆跟驰建模
基于残差学习的自适应无人机目标跟踪算法
基于递归残差网络的图像超分辨率重建
基于FAST角点检测算法上对Y型与X型角点的检测
有趣的沙漏
DIY装饰沙漏
DIY装饰沙漏
回忆的沙漏
基于边缘的角点分类和描述算法
基于圆环模板的改进Harris角点检测算法