改进的R-SSD全景视频图像车辆检测算法
2021-02-04王殿伟赵梦影宋海军谢永军
王殿伟,赵梦影,刘 颖,宋海军,谢永军
1.西安邮电大学 通信与信息工程学院,西安710121
2.中国科学院 西安光学精密机械研究所,西安710119
近年来,迅猛增加的机动车数目给交通监管系统带来了严峻的挑战,车辆目标智能检测作为自动驾驶、智能交通[1]研究领域的核心技术,随之受到相关研究学者的关注。因为传统视觉视野有限,存在检测盲区,缺乏获取全局信息手段等不足,而全景视觉具有“成像一体化、360°大视场、旋转不变性[2]”等优点,已被广泛应用于无人驾驶、机器人安全监控、虚拟现实等诸多领域,在现实生活中具有重要意义。
图1 SSD网络框架图
传统的车辆目标检测算法首先判断目标车辆区域,然后用SIFT[3]、HOG[4]、LBP[5]等方法提取特征,最后经过分类器得到目标分类结果,其中目标特征主要依靠手工提取,而待检测的车辆种类繁杂、数量庞大、背景信息复杂多变,手工选取特征的方法很难适应复杂环境下多种类别目标的检测需求,因此传统车辆检测算法已经不能满足要求[6]。近年来,基于深度学习的目标检测算法受到广泛关注,深度神经网络能够自主学习不同层级的特征,相比于传统手工设计特征,学习的特征更丰富,特征表达能力更强[7]。
基于深度学习的目标检测算法具有较强的全面性、活动性,并具有检测识别多种目标类型的能力[8-10]。Girshick等[11]设计了R-CNN 框架,提出了区域选择和使用深度学习分类的方法,在目标检测方面突破巨大,但特征提取复杂,检测速度很慢。随后He 等[12]提出了SPP-Net,该算法使得检测速度得到了很大提升,但无法实现端到端的检测[13]。Ren 等[14]提出了Fast R-CNN,采用了多任务训练的模式,减少硬件缓存。此后Faster R-CNN[15]算法提出区域生成网络(RPN),虽然检测在速度与精度上都有巨大提升,但是还尚未达到实时检测的效果。Redmon 等[16]基于Google-Net 图像分类模型[17]提出了基于回归的YOLO算法,真正意义上实现了端到端检测目标。Liu 等[18]提出了SSD 算法,该算法结合了YOLO 的回归思想及Faster R-CNN 的anchor 机制,同时保证了检测的速度和精度。但是目前的深度学习检测算法大多在普通图像上检测性能越来越佳,应用于全景视频图像中检测效果还达不到预期要求。
原始的SSD算法是在特征图上直接分类和回归,最后经过非极大值抑制的方法得出预测框,这样的过程会导致高低层特征信息相差过大,小目标检测效果差,或是在剔除冗余检测框时出错,导致目标漏检[19],由于全景图像本身包含的信息较多,车辆目标绝大多呈现为小目标,更加降低算法适应度。
为了提高SSD算法在全景图像检测中的准确率,本文提出了一种特征融合方法,在原SSD网络前加入类似于Faster RCNN 算法中的RPN 网络的部分,再使用多个传输转换模块将RPN*网络特征层和SSD*网络特征层相连接,将高低层特征融合,增加低层特征信息,从而提高目标的检测效果。同时结合了RPN*网络和SSD*网络的损失函数,提出了新的损失函数,应用二分类和多分类的方法,使后续的回归操作更加精确,进一步提高了检测精度。
1 SSD网络结构的改进
1.1 SSD网络结构
SSD 是一种典型的单次目标检测算法,其在原始VGG-16 网络[20]后增加三个卷积层和一个池化层,这些卷积层分别获取不同尺度的特征图用于目标检测,类似于Faster R-CNN 的anchors 机制,目的在于提高检测的准确率;同时SSD 算法结合了YOLO 的回归思想,降低了原网络的复杂度,达到实时监测效果。基本的SSD网络框架如图1所示。
SSD 算法首先对所用数据集采用3∶1 比例进行正负样本划分后,送入模型训练,接下来利用CNN提取特征后直接进行分类和回归,最后应用非极大值抑制的方法对冗余的检测框进行剔除,所剩余的即为最终的目标检测框。图2是SSD目标检测算法流程图。
图2 SSD目标检测流程
1.2 R-SSD算法
传统的SSD算法采用一步式检测方法,直接使用卷积对不同的特征图来进行提取检测结果,具有可以达到实时监测的能力。但是这种均匀的密集采样的一个重要缺点是训练比较困难,这主要是因为正样本与负样本(背景)极其不均衡,导致降低了模型的准确度。为了提高目标检测的精度,本文将RPN网络引入进SSD网络,应用传输转换模块将两个网络相连接,提出了一种新的RPN-SSD(简称为R-SSD)目标检测网络框架,同时继承一步式和两步式检测方法的优点,可以更好地提取特征,显著地提高了目标检测的精度。这种R-SSD的网络体系结构如图3所示。
图3 R-SSD体系结构图
图3右侧虚线框内是原SSD网络(这里只显示特征提取层(此部分称为SSD*)的网络结构,其主要作用是获取最终的目标检测框;左侧虚线框内是新构建的类似Faster RCNN 算法中的RPN 网络的部分(此部分称为RPN*),其主要作用是提取先验框并粗略调整其大小和位置;下方四个实线框为传输转换模块,它的主要作用是在RPN*和SSD*之间建立连接,进行特征融合。
(1)RPN*
原始的SSD是一种单步检测算法,在提取的特征图上直接进行回归和分类,容易造成目标的分类或定位错误,进而降低了检测的准确率。本文将RPN*网络引入到SSD 结构中,构建了一种新的改进SSD 网络,称为“R-SSD”,提出了基于R-SSD的全景视频图像车辆目标检测算法。这里引入的RPN*结构的作用是识别并删除一些负样本先验框,减小分类器的搜索范围,再粗略预测先验框的位置和大小,降低目标分类或定位的错误率,为SSD*的回归操作提供更好的前提条件,所用到的RPN*结构如图4所示。
由图4 可知,RPN*结构首先将n个先验框与特定特征图上的每个规则划分的单元相关联,每个先验框相对于其对应单元的初始位置是固定的。每个特征图首先经过滑窗处理,得到256 维特征,然后通过两次全连接得到2n个置信度分数和4n个坐标偏移量。因此,在每个特征图中会生成n个经过细化的先验框。
图4 RPN*结构图
(2)SSD*
SSD*网络以RPN*网络生成的细化先验框作为输入信息,融合了不同层的特征,进一步生成准确的目标类别和坐标,且RPN*和SSD*中对应的特征图具有相同维度。与原始SSD 网络不同的是,这里网络输入的是RPN*网络经过细化的先验框,浅层特征图融合了高层特征图的语义信息,将各层结果整合在一起,得到最终的目标框。而原始SSD 网络直接用浅层特征图做小目标检测,并没有融合高层信息。经过这一步骤会使得目标检测结果更加准确,特别是对小目标的检测。
(3)传输转换块(Conversion Block)
因为SSD算法用低层特征图检测小目标,高层特征图检测大目标。然而低层卷积层分辨率高但语义信息低、感受野较小,小目标特征提取不充分;高层卷积层语义信息充分、感受野较大,可提取更多特征信息。受上述低层卷积层和高层卷积层的特性的启发,本文提出的R-SSD结构中添加了传输转换块(Conversion Block),它的主要作用是在RPN*和SSD*之间建立连接,将RPN*上提取先验框的输出转化为SSD*的输入,在RPN*经过细化的先验框基础上进行回归,做反卷积操作,使两个网络提取的特征相融合,集成大规模的上下文信息,增大感受野,增加低层网络的语义信息,进而提高检测精度。图5是传输转换块的主要架构。
图5 传输转换块架构图
由图5知,本文添加的传输转换模块,首先将RPN*输出的特征图作为传输转换模块的输入,经过一个3×3的卷积核,一个Relu 激活函数和另一个3×3 的卷积核。其次经过一个反卷积操作增大高层特征图,从前一个传输转换模块输出的特征经过一个4×4的卷积核,并对上述两个输出对应元素求和。在求和之后添加卷积层,以确保检测特征的可辨性。输出传入SSD*模块,完成RPN*与SSD*的特征融合过程。
1.3 损失函数设计
本文提出的R-SSD 网络架构的损失函数由两部分组成,即RPN*中的损失和SSD*中的损失。在RPN*部分包含二分类损失Lb和回归损失Lr,表明是一个目标或者不是一个目标,并且同时回归它的位置和大小,以获得细化的先验框,之后将具有小于阈值负置信度的细化后的先验框传递给SSD*以便进一步预测目标类别和准确的目标位置和大小;在SSD*部分包含多分类损失Lm和回归损失Lr。将损失函数定义为:
其中,i代表第i个候选框是第i个先验框的真实标签,是第i个先验框的真实坐标,pi和xi分别是RPN*中候选框i预测目标的置信度和坐标,ci和ti是SSD*中候选框预测目标的类别和坐标,Nrpn和Nssd分别是RPN*和SSD*中的正样本个数。二分类损失Lb为交叉熵损失函数,并且多分类损失Lm是多类别置信度上的softmax损失。与Fast R-CNN类似,这里使用smoothL1损失作为回归损失Lr。
2 实验结果
2.1 实验平台
本文程序均在深度学习服务器上进行,服务器CPU为Intel E5 2673 V3×2,内存128 GB,GPU 为TITAN Xp×4,操作系统为64位的Linux Ubuntu 16.04系统,并行计算框架版本为CUDA 8.0,深度神经网络加速库为CUDNN v7.0。利用Python 编程语言在深度学习框架上实现本文的R-SSD 目标检测算法模型并完成对模型的训练及验证。
2.2 实验数据
由于目前没有针对车辆目标检测的全景视频图像公用数据集,因此利用商用泰科易720pro VR全景相机自行采集数据。分别在不同场景下采集含有不同大小、颜色、外观的车辆,使用Label Image标签工具对全景图中的大小车辆进行标注,共计2 688 幅,均为VOC2007格式。将全景环境下的数据分为训练集(1 685 幅)、验证集(89幅)和测试集(914幅)。
参考SSD算法中的数据增强方法[21],本文对原始数据进行随机采集块域(Randomly sample a patch)、随机裁剪加颜色扭曲(random crop & color distortion)及水平翻转(horizontal flip)等操作,可提升算法模型的检测性能。
2.3 评价指标
本文通过在测试集中分析模型改进前后的检测精度、检测速度和参数量,对比模型的性能。首先把测试集图像输入训练好的网络,然后对车辆位置进行检测并记录检测结果,当模型预测的目标边界与测试集对应的标注数据中的边界框的交并集比(IOU)大于等于设定的阈值时,认为检测结果正确,否则视为检测错误。检测精度的评价指标选取准确率(Precision,P)指标,其定义为:
式中,Tp是正确检测到车辆的数量,Fp是错分车辆目标的数量。
2.4 训练过程
本文的基础网络仍然为原SSD 的VGG16,首先在自行采集的全景数据集上,用1 685 幅训练集图片对该网络进行训练,得到预训练网络模型。训练模型的参数如下:设置初始学习率为0.000 1,在迭代40 000 次时学习率衰减为1E-05。训练批量大小为8,迭代60 000 次后检测结果达到最优值,可达90.78%。
2.5 R-SSD模型对车辆的识别结果
为了验证本文提出的R-SSD网络准确性,将两个网络同时应用在采集的2 688幅全景视频数据集中。为了证明算法的适应性,数据集包括校内、公路旁、路口等不同场景下的不同大小、颜色、外观的车辆目标。实验对比标准的SSD网络,结果如图6所示。
图6 SSD与R-SSD准确率对比
由图6 可知,随着迭代次数的增加,两个算法的准确率都在提升。迭代10 000次时,SSD算法的准确率只有78.44%,本文算法准确率可达到83.25%;迭代30 000次时两种算法的准确率都有明显地上升,直至迭代60 000次逐渐趋于稳定,但是本文算法准确率始终高于SSD算法。
在测试集中分别对改进前后的SSD 目标检测模型及YOLO V3模型进行测试,并统计其检测结果和检测速度。实验结果如表1所示。
表1 相同数据集下各算法mAP对比
由表1 可以看出,本文的mAP 为90.78%,相比于Faster R-CNN模型,虽然检测速度有所降低,但检测精度提升了9.18 个百分点,效果较为突出;相比于YOLO V3模型,不仅检测精度提高了4.58个百分点,而且检测速度也提高了14.4 帧/s;相比于SSD模型,在检测速度大致相同(仅仅降低了1.8 帧/s),检测精度提高了5.04个百分点,提升效果显著。可见,在全景车辆检测中,本文提出的模型对目标的识别效果较好,且检测速度也较可观。
图7为网络训练过程中损失值的收敛曲线,横坐标表示迭代次数,最大迭代次数为60 000 次;纵坐标代表损失值。当网络迭代超过50 000次时,损失值变化趋于稳定,从图中可以看出,最终损失值下降到约1.18。在此算法中参数的收敛情况较好,因此网络的训练结果也较为理想。
图7 损失函数数值曲线图
图8~图10 为部分实验结果图,红色矩形框为SSD网络预测的目标位置,蓝色框为本文提出的R-SSD网络预测的目标位置。
图8 SSD网络与本文提出的R-SSD网络目标漏检结果对比图
图9 SSD网络与本文提出的R-SSD网络对小目标检测结果对比图
图10 SSD网络与本文提出的R-SSD网络对重叠目标检测结果对比图
(1)目标漏检纠正
图8(a)和图8(c)是SSD 网络的检测结果,由图可明显看出两幅图中的中间白色车辆均存在漏检现象,主要是由于SSD网络使用单步检测的方法,直接在特征图上采用卷积核来预测边界框类别和坐标偏移,为了提高检测速度而降低了检测精度。图8(b)和图8(d)为本文网络的检测结果,由图可看出,本文网络成功识别了漏检车辆,且每个目标的类别置信度有很大提升,这是由于本文算法使用了两步式的检测方法:第一步,在RPN*网络层过滤负样本先验框,并粗略调整先验框的位置和大小,为后续SSD*中的回归操作提供好的初始条件;第二步,SSD*网络结合RPN*网络提供的语义信息,进行细致的分类和回归,判断目标所在位置,以此大幅提高了检测的精确度,可很好地说明本文算法在目标漏检纠正性能上的有效性。
(2)小目标检测纠正
图9(a)和图9(c)为SSD 网络的检测结果图,尽管均对左侧白色车辆的检测结果良好,但对右侧小目标车辆检测性能较差,主要是由于SSD使用conv4_3底层特征检测小目标,但是底层特征卷积层数少,所含语义信息较少,存在特征提取不充分的问题,因而导致对小目标出现漏检现象。图9(b)和图9(d)为本文算法的检测结果,由图可知,本文提出的R-SSD 网络对小目标的检测效果相对较好。这是因为本文提出的R-SSD 网络添加了一个传输转换模块,将RPN*网络和SSD*网络的维度相匹配,使用反卷积操作增大高层特征图,同时实现高低层特征融合,增加底层特征的语义信息,因此提高了小目标检测的准确率。
(3)重叠目标检测纠正
图10(a)和图10(c)为SSD 网络的检测结果,由图可知两张图中右侧白色车辆有重叠,SSD网络出现漏检现象。主要是由于SSD 网络检测性能和特征提取有着密不可分的关系,该网络在conv4_3、conv7、conv8_2、conv9_2、conv10_2、conv11_2 卷积层提取特征,然后分别在这些特征层上面每个点构造六个不同尺度大小的先验框,直接进行分类和检测,最后将生成的先验框进行非极大值抑制,确定最终检测结果。其不足之处是可能存在划分的先验框不精细,与真实框的匹配度不高,从而导致过多的背景噪声干扰,影响检测结果。由于重叠的两辆车有相似的特征,检测时很容易被混淆,对检测结果进行非极大值抑制处理时,后面车辆预测框可能被前面车辆预测框所抑制,导致后面车辆漏检。图10(b)和图10(d)为R-SSD 网络的检测结果,由图知本文算法对被遮挡车辆有着良好的检测性能,主要由于本文算法首先用RPN*网络滤除一部分与真实框相差过大的先验框,缩小了分类器的搜索空间;然后将粗略预测和分类的先验框输入到SSD*网络,再进行分类和预测;最后经过细化的先验框与真实框匹配度高,能够减少背景噪声的影响,从而提高检测的准确率。
如表2 所示,实验分为三组,分别在不同检测难度下进行,每组都有两张图各采用SSD和本文算法进行结果对比,表中数字表示检测出车辆目标的准确率,结果显示未检出的则说明算法没有良好地检测到图中目标。通过表中结果对比,本文算法可以更好地检测出车辆目标,且对于SSD算法检测到的目标检测的置信度也有较大的提升。
表2 SSD算法和本文算法实验结果对比
3 结束语
本文提出了一种基于改进的SSD 网络结构,称为R-SSD,它由RPN*和SSD*两个模块相互连接组成。引入RPN*的目的是过滤掉阈值小于0.5的候选框,以减少分类器的搜索空间,并粗略得出候选框的位置和大小,为后续SSD*中的回归提供更好的初始化,并回归准确的对象位置和大小并预测相应的多类标签。整个网络以端到端的方式进行训练,使用多分类损失。本文使用R-SSD网络在自行采集的全景数据上开展了多次实验,结果表明本文算法改善了SSD对小目标检测精度较低,目标错检、漏检的不足,并实现了较高的检测精度和效率。下一步工作可以考虑在网络中引入注意力(attention)机制,进一步改进和优化模型,使网络对特定目标有更高的检测精度。