张 震,李孟洲,李浩方,马军强
(郑州大学电气工程学院,郑州450001)
近年来,随着互联网大数据的快速发展、计算机运算能力的提升以及国内外在深度学习研究上的突破,目标检测技术日趋成熟。目前,将目标检测与实际应用场景结合是一个热门方向[1],但较少用于地铁安检方面,地铁安检仍采用人为识别的方法。由于安检工作人员的熟练程度以及精神状态都可能会影响安检的准确率[2],因此将目标检测用于地铁安检具有重要的研究意义。
GIRSHICK 等于2014年提出了R-CNN(Regions with CNN Features)[3]算法,促使深度学习在目标检测领域快速发展。此后,SPP-Net(Spatial Pyramid Pooling Networks)、YOLO[4-5]、YOLO2、Fast RCNN[6]、Faster RCNN[7]、SSD[8]、DSSD[9]等算法的出现也进一步促进了目标检测的发展。目前主流的目标检测算法大致分为两类:一类是基于R-CNN 进行展开,以Faster RCNN 为代表的两阶段算法;另一类是以YOLO 和SSD 为代表的一阶段算法。两阶段算法先进行区域选取,再对所选区域进行分类,一阶段算法则是对产生的区域同时进行这两项操作。两阶段算法的检测精度略高于一阶段算法,但检测速度很慢,因此,两阶段算法不适用于地铁安检这类对实时性要求较高的应用场景。在一阶段算法中,SSD 算法已被广泛应用于目标检测并取得了不错的效果,如文献[10]将SSD 应用于舰船目标检测,文献[11]将SSD 应用于柑橘实时分类检测,文献[12]将SSD 应用于果园行人实时检测。
本文提出一种改进的SSD 算法,通过轻量级网络融合对传统SSD 算法中的金字塔特征层进行特征增强,同时加入一种基于残差模块的检测单元以避免增加网络模型容量,从而在提高检测精确度的同时保证识别速度。
SSD 目标检测算法在YOLO 的基础上融合了RPN 的思想。该算法在多个不同尺度上对输入图片进行检测,且在各特征层上都使用不同的卷积模型,从而使模型具有更高的识别准确率。此外,作为一阶段算法,其检测速度比两阶段算法快得多。
虽然SSD 能够改善传统算法对物体尺度敏感、对尺度变化大的物体泛化能力差的缺点,但仍存在对小目标检测精度低的问题[13-15]。对此,多种改进的SSD 算法相继被提出[16-18],如DSSD、DSOD 等。DSSD 将SSD 的基础网络由VGG-16 改为ResNet,并且引入反卷积层用于传递信息,尽管提高了识别小目标的准确率,但是网络结构复杂,使识别速度变慢,实时性变差。DSOD 先将基础网络换为DenseNet,再融合两层特征图,不仅加快了训练速度,而且提高了检测性能。
传统SSD 检测模型结构分为两部分:第一部分是利用卷积神经网络来提取输入图像特征信息的分类网络VGG-16;第二部分是后端的多尺度检测网络。由于浅层的特征图适用于小目标检测,而深层的特征图适用于大目标检测,因此多尺度检测网络需要在不同深度的特征图上进行回归计算和极大值抑制,并输出最终结果。传统SSD 网络结构如图1所示。
图1 传统SSD 网络结构Fig.1 Structure of traditional SSD network
SSD 算法通过利用多尺度的方法来获取特征图。假设检测时采用的特征图层数为n,那么第k个默认框比例sk可表示为:
其中:smin表示特征层的默认框占输入图像的最小比例,一般取为0.2;smax表示特征层的默认框占输入图像的最大比例,一般取为0.95。为加强默认框适应检测物体大小的能力,SSD 算法对相同特征层设置了不同宽高比的默认框。本文选择默认框的宽高比尺寸为r={1,2,3,1/2,1/3},其中,默认框的宽度和高度分别为:
其中,m表示5种默认框的宽高比尺寸,m∈{1,2,3,4,5}。当默认宽高比等于1 时,增加1 个默认框比例s′k:
因此,SSD 在每个特征图共产生6 个默认框,第6 个默认框的宽度和高度表示为:
其中:(cx,cy)代表特征层上默认框的中心坐标;wb和hb分别代表默认框的宽度和高度;wfeature和hfeature分别代表特征层的宽度和高度;wimage和himage分别代表原始图像的宽度和高度。求得的(xmin,ymin,xmax,ymax)代表第k层特征图上中心坐标为、宽度和高度分别为wk和hk的默认框映射到原始图像的具体坐标。
SSD 算法的损失函数可表示:
其中:x为当前预测框的类别匹配信息;c代表标注类别;l代表预测边界框坐标;g代表标注边界框坐标;N代表匹配到的default box 的数量;Lconf(x,c)代表分类损失;Lloc(x,l,g)代表位置损失;α代表两者的权重,本文将其设置为1。
Lloc(x,l,g)借鉴Faster RCNN 的位置回归函数smoothL1,可表示为:
其中:xij,p={1,0}代表当前第i个预测框匹配类别p的第j个目标框真值;Pos代表样本中正例;Box代表预测框中心的坐标及其宽和高的集合;li,m代表先验框的预测值;gˆj,m代表真实框的位置参数。SL1可表示为:
Lconf(x,c)用交叉熵损失函数可表示为:
传统SSD 算法低层次的定位效果好但是分类精度低,又由于6 个不同特征图相互独立,因此其对小目标的检测效果一般。造成以上情况的主要原因是:
1)特征图维度会随着CNN 层数的增加而变小,进而得到语义特征更加明显的结果,同时位置信息也变得更加模糊。如果采用的是SSD_300×300 的模型,则主要依赖Conv4_3 检测小目标,虽然其分辨率较高,而且先验框的尺寸和检测目标更接近,但是特征表达的能力却仅来源于前10 层卷积层,显然不能很好地捕捉深层次语义信息。
2)随着卷积层数的增加,输入图像的感受野和映射区域也会扩大,卷积感受野过大时会降低精确定位目标的性能,并且当映射区域过大时,如果出现在检测区域包括多个检测目标的情况,则无法有效地区分目标。
针对以上问题,本文提出融合轻量级网络来改进传统SSD 算法,通过加入基于残差模块的检测单元来避免增加网络模型容量以及运算复杂度,同时提高检测精确度。
本文改进的SSD 算法整体网络结构框图如图2所示,首先对Conv4_3、Conv7、Conv8_2、Conv9_2、Conv10_2(简记为ConvY_Y)这5 个特征层进行卷积操作(由于Pool11 的特征层尺寸很小,包含语义信息较多,因此无需对其进行卷积操作)。为避免特征融合后再进行特征降维操作,要求进行卷积操作后生成的Conv4_3_0、Conv7_0、Conv8_2_0、Conv9_2_0、Conv10_2_0(简记为ConvY_Y_0)的特征维数不超过原始的特征维数[19]。然后将Conv4_3和Conv4_3_0、Conv7 和Conv7_0、Conv8_2 和Conv8_2_0、Conv9_2和Conv9_2_0 以及Conv10_2 和Conv10_2_0 这5 对两两融合,依次得到Conv4_3_1、Conv7_1、Conv8_2_1、Conv9_2_1 和Conv10_2_1,并与Pool11 形成最终的金字塔特征层[19]。
图2 整体网络结构框图Fig.2 Block diagram of overall network structure
ConvY_Y_0 比ConvY_Y 具有更强的语义信息和更大的卷积特征尺度。同时,由于本文提出的卷积没有改变补边的特征尺寸,因此能更好地保留原特征图的边缘信息。所以,本文最终形成的金字塔特征层与传统SSD 算法的金字塔特征层相比,增强了特征层的语义信息,改善了SSD 算法对小物体识别率低的问题。由于生成的特征层相比于最初的特征层特征维数没有升高,特征图的边缘特征没有损失,因此在特征融合时高层特征不仅无需调整尺寸,而且不用进行降维操作,相比于传统的特征融合操作,本文采用的特征融合方法更具优势。上述改进虽然提高了检测精度,但是难免会使检测网络复杂化,从而降低识别速率。针对以上情况,本文新加入基于残差模块的检测单元,从而实现特征图维度与主分支维度的统一,避免网络模型容量和运算复杂度增加。
特征对应元素相加与特征连接是特征融合策略中最流行的2 种融合方式[16,20]。基于特征连接的特征融合方式,本文设计一种轻量级特征融合方式来对金字塔特征层进行特征增强。
在进行特征融合时,要求ConvY_Y_0与ConvY_Y尺寸相同且ConvY_Y_0的维数不高于ConvY_Y,因此,在进行特征融合的操作时不必调整特征图的尺寸,也不用对融合后的特征进行降维,从而大幅简化了操作。
在进行特征融合时,设x为输入特征,f(x)表示对x进行卷积操作,y表示x卷积后的特征,则y=f(x)。如果(x,y)表示特征x和特征y进行首尾相连的操作,那么相应的特征连接操作可表示为Fconcat=(x,y),表示特征x和特征y进行首尾相连操作后得到的特征。
特征连接的特征融合方式如图3所示,将ConvY_Y_0 的特征维数统一设置为128 维,低于ConvY_Y 特征层的特征维数,然后直接将ConvY_Y与ConvY_Y_0 串联得到ConvY_Y_1,将这种特征融合称为轻量级网络融合。
图3 特征连接的特征融合方式Fig.3 Feature fusion mode of feature connection
本文通过加入一种基于残差模块的检测单元来避免增加网络模型的容量以及运算复杂度,并防止直接用主干网络来预测目标[21]。残差模块分为短接分支和主分支2 个部分,其结构如图4所示。主分支共包含3 个卷积层,即2 个1×1 的卷积层和1 个3×3的卷积层;短接分支主要作用是用1 个1×1 的卷积层使特征图与主分支的维度达到统一[21]。在网络训练过程中,每个卷积层后都添加了1 个非线性激活层,此做法不仅可以降低预测单元所产生的梯度值对主干网络形成的影响,而且还可以起到缓冲的作用。同时,由于残差模块的加入,预测层的网络深度加深,能有效改善浅层特征图语义表征能力较弱的问题[21]。本文新加入残差模块的作用虽然与插入3×3卷积模块基本相同,但是残差模块中的1×1 卷积层可以将特征图调整到比较低的维度[21]。因此,本文新插入的残差模块要比直接插入1 个3×3 卷积模块占用的模型参数低得多。
图4 ResBlock 结构Fig.4 Structure of ResBlock
本文采用类似Faster RCNN 的anchor 机制,Faster RCNN 采用的是3×3 的卷积核,因为模型参数与运算量会随着卷积核的减小而降低,所以本文尝试采用1×1 的卷积核,经过实验发现1×1 的卷积核不仅没有明显降低检测精度,反而能够提高网络的运算速率。此外,由于加入的残差模块可以起到统一维度的效果,因此即使是不同预测单元上的分类器也能够在训练过程中达到参数共享。相比于传统SSD 直接在网络卷积层上面提取目标,然后再针对不同的检测单元训练出其对应的分类器而言,本文所采取的操作要更为简单实用。综上,本文新加入的残差模块能够大幅降低网络模型大小,从而提高网络的运算速率。
在网络模型训练的过程中,需要对训练数据集进行翻转、旋转以及亮度与尺度变化,从而提高网络模型的稳健性。由于本文算法形成了新的金字塔特征层,与传统SSD 相差较多,因此不能直接在已经训练好的SSD 模型上修改。本文以VGG-16 网络作为改进SSD 算法的基础框架,训练位置损失函数采用smooth L1,训练分类损失函数采用Log loss。此外,本文算法的学习率、提取各个特征层所对应的Box长宽比以及挖掘决策困难样本均和传统SSD 算法相同,IOU 值设置为0.5。
本文使用的GPU 型号为GTX1080 Ti,基于Ubuntu16.04 操作系统,在TensorFlow 平台上完成对改进SSD 算法的训练以及测试的工作。由于设备的限制,本文提出的算法采取单GPU 训练。
本文算法主要解决了传统SSD 算法对小目标识别率低的问题,并新加入基于残差模块的检测单元避免增加网络模型容量以及运算复杂度。实验通过对mAP、FPS 的测试来验证本文算法对传统SSD 的改进程度。此外,将本文训练好的算法用于地铁安检图像的检测,以验证其应用性能。
首先将在ImageNet 训练好的VGG-16 网络作为本文算法的基础框架,然后在PASCAL-VOC2007 的训练集与验证集上来训练本文算法,并以mAP 和FPS 作为性能指标在其测试集上检测本文算法对小目标检测的能力,最后与性能优异的改进SSD 算法、YOLOv3 算法和Faster RCNN 算法进行比较。
本文使用的评价指标为平均准确率均值(mAP)与检测速率(FPS)。其中,平均准确率均值是所有类别平均准确率(AP)的平均值,检测速率为每秒处理图像的帧数。
平均准确率定义为:
其中,R代表召回率,P代表准确率。
PASCAL-VOC2007 是1 个标准的小目标数据集,其具体的物体类别见表1。该数据集提供的图片集共分为20 种类别。
表1 PASCAL-VOC2007 具体的物体类别Table 1 PASCAL-VOC2007 specific object categories
为对比本文算法与传统SSD、DSSD、DSOD、YOLOv3 和Faster RCNN 的检测性能,从PASCALVOC2007 数据集中挑选189 具有代表性的图片,共涉及11 种物体类别,分别为飞机、船、小轿车、鸟、猫、狗、马、羊、瓶子、盆栽植物和人。对这些图片进行相应的处理后,标注物体的ground truth 共有1 601 个。分别采用传统SSD 算法、DSSD 算法、DSOD 算法、YOLOv3 算法、Faster RCNN 算法和本文算法进行目标检测实验,mAP 指标测试结果如表2所示,FPS 指标测试结果如表3所示。其中,本文算法与传统SSD算法是在单个1080 Ti GPU 测试的,而其他算法则是在单个Titan X GPU 上测试的。
表2 不同算法在PASCAL-VOC2007 数据集上的mAP 指标Table 2 mAP indicators of different algorithms on PASCAL-VOC2007 data set
表3 不同算法在PASCAL-VOC2007数据集上的FPS指标Table 3 FPS indicators of different algorithms on PASCAL-VOC2007 data set
从表2 可以看出,本文算法的mAP 指标相比于传统SSD 算法提高了8.5%,并且检测物体越小,检测精度提升得越高,比DSOD 算法的mAP提高1%,比YOLOv3 算法提高2%,比Faster RCNN算法提高3.9%。本文算法比DSSD 算法的mAP低0.8%的原因是DSSD 的基础网络是ResNet-101,该网络比VGG-16 网络深、性能好,但是结构也更为复杂,大幅降低了检测速率,不适用于对检测速度要求较高的检测场景,从表3 中也验证了这一结论。
由于本文算法在进行特征融合时既不需要进行降维操作也不需要调整图片尺寸,同时加入了一种基于残差模块的检测单元,可避免增加网络模型容量以及运算复杂度,因此本文算法的FPS 相比于传统SSD 的85 frame/s 仅损耗了2 frame/s,可达到83 frame/s,远高于DSSD、DSOD 和Faster RCNN 算法,同时也高于YOLOv3 的51 frame/s。
地铁安检图像中的一些小物体(如指甲刀、打火机等)往往只占据检测图片中的很小一部分,同时有可能会被别的物体覆盖,增加了检测的难度。本文收集了约550 张的地铁安检图像,其中,包含的检测目标数量基本均衡,对所有图像采用多目标标记,然后随机选取总数的30%作为测试集,其余的分为训练集和验证集。分别用传统的SSD 算法和本文算法进行目标检测实验,图5 为部分的检测结果,从中可以看出本文算法对检测结果的改进。表4 为测试各类目标的mAP 指标。
表4 传统SSD 算法与本文算法的mAP 指标对比Table 4 Comparison of mAP indicators of traditional SSD algorithm and the proposed algorithm
图5 传统SSD 算法与本文算法的检测结果对比Fig.5 Comparison of detection results of the proposed algorithm and traditional SSD algorithm
从图5 的检测结果图和表4 中的检测结果可以看出,本文算法较传统SSD 算法检测更准确,在对小目标(如scissors)上检测精度提升更为明显,mAP 提升了12.3%。
本文对SSD 算法中各尺度特征进行尺寸大小不变的卷积操作,将卷积前后对应的特征进行轻量级网络融合,进而生成新的金字塔特征层,最后通过加入基于残差模块的检测单元,提升检测精确度。实验结果表明,在用于地铁安检图像检测时,该算法对于小目标的检测精度较传统SSD 算法提升明显,并且能够保证检测速率,检测速率达到83 frame/s。后续将对本文算法的网络结构进行优化,进一步加快检测速度,并且尝试将算法应用于其他特定场景中。