特征信息增强的单发多框检测器算法
2021-02-22李志伟方禄发
赵 辉 ,李志伟 ,方禄发
1.重庆邮电大学 通信与信息工程学院,重庆 400065
2.重庆邮电大学 信号与信息处理重点实验室,重庆 400065
目标检测是计算机视觉的核心任务之一,它为图像分割、场景理解、目标跟踪和图像字幕等更复杂或更高层次的视觉任务奠定了基础。近年来,卷积神经网络(Convolutional Neural Network,CNN)发展迅速,许多基于CNN的目标检测器算法[1-7]有效提高了目标检测任务的准确性和速度。这些方法大致可以分为两类:基于候选区域的目标检测算法(两阶段检测算法)和基于回归的目标检测算法(一阶段检测算法)。其主要区别在于是否生成目标候选区域。
Girshick 等通过整合AlexNet 和区域搜索算法提出了具有开创性意义的R-CNN(Region-based CNN)[1]算法,并取得了当时的最佳结果。然而对于每个目标候选区域,R-CNN 需要将图像缩放到一个固定的尺度后再提取特征,因此其检测速度很慢。随后,何凯明等通过在R-CNN体系结构中引入传统的空间金字塔池(Spatial Pyramid Pooling,SPP)提出了 SPPNet[2]。SPPNet 有效解决了CNN 输入任意大小图片的问题,但是对于每个目标候选区域,仍然需要反复提取特征。Girshick 等提出的Fast R-CNN[3]通过添加一个RoI(Region of Interest)池化层,解决了R-CNN 和SPPNet 提取特征时冗余的缺点,同时采用Softmax 代替支持向量机(Support Vector Machine,SVM)进行分类,并采用多任务损失函数将分类和边框回归统一到一个框架中,但它依然不是一个端到端的训练,仍然需要外部的目标候选区域提议。针对Fast R-CNN 依赖于外部目标候选区域提议的问题,Ren 等人提出了Faster R-CNN[4]框架,其提出了一种高效、准确的区域建议网络(Region Proposal Network,RPN)来生成目标候选区域,并允许检测器端到端地进行训练。另一方面,YOLO(You Only Look Once)[5]和单发多框检测器算法(Single Shot Multibox Detector,SSD)[6]则推广了一阶段检测算法。YOLO 主要采用卷积层来提取特征,采用全连接层来预测类别概率和坐标,它并没有使用多尺度特征图来做独立的检测,可能无法定位某些对象,特别是小目标。为了获得更好的精度,Redmon 和 Farhadi 提出了 YOLOv2[7],YOLOv2 删除了全连接层,并使用锚框(Anchor Boxes)来提高速度和精度。
SSD是一种快速和鲁棒的方法,它利用网络的不同输出层的特征图来直接进行目标检测,然后将不同层的检测结果合并起来,最后采用非极大值抑制方法(Non-Maximum Suppression,NMS)抑制冗余检测框。传统的SSD算法在速度和精度上都有很好的表现,但仍存在改进的空间。如图1所示,SSD算法将基础骨干网中最后两个全连接层改成卷积层,并随后增加了4个卷积层来构造整体的网络结构,最后采用Conv4_3、Conv7、Conv8_2、Conv9_2、Conv10_2 和 Conv11_2 来构建用于检测任务的特征金字塔(图1中紫色部分),可以发现特征金字塔中的特征层都是独立使用的,并没有考虑不同输出层之间的关系,这忽略了对于小目标检测很重要的上下文信息[8]。为了提高SSD 算法的检测精度,DSSD(Deconvolutional Single Shot Detector)[9]用更复杂的ResNet-101[10]替换了SSD 算法的VGG16[11]基础骨干网来获取更好表征能力的特征图,并提出通过反褶积层来聚合上下文信息,增强浅层特征的高层语义。但复杂的网络结构意味着巨大的网络参数量,这种方法大大增加了内存和计算复杂度,严重降低了检测速度。
研究人员发现基础骨干网络中的深层特征具有更多的语义信息,而浅层特征具有更多的内容描述[12],也就是深层的高级特征对分类任务的区分能力更强,而浅层的低级特征对目标位置回归任务的区分能力更强。因此近年来,FPN(Feature Pyramid Network)[13]和PANet(Path Aggregation Network)[14]等提出通过横向连接的方式来融合浅层和深层的特征信息以实现更强大的特征表示。多尺度特征生成有区别的特征金字塔表示对检测性能至关重要。SSD算法采用多尺度特征,根据特征层感受野的大小设置相应的默认框,因此它可以从多个尺度检测不同尺度的目标。但SSD 算法特征金字塔的设计方式使得很难融合各层不同尺度特征层上的特征信息,RSSD(Rainbow SSD)[15]提出了一种Rainbow连接的方式来融合不同层次的特征。FSSD(Feature Fusion Single Shot Multibox Detector)[16]通过融合不同尺度的特征层到一个较大尺度,然后在得到的特征层上再通过下采样构建新的特征金字塔用于目标检测,有效地提高了SSD 的检测精度。因此如何利用浅层和深层的特征来有效地集成特征金字塔表示决定了检测性能。另一方面,人类视觉通过快速扫描全局图像来获取需要重点关注的目标区域,随后对这一区域投入更多注意力资源,以获取更多所需关注目标的细节信息,从而抑制其他无用信息。近年来,受人类视觉的注意力机制启发,Mnih 等[17]提出在循环神经网络模型上使用注意力机制来进行图像分类,取得了很好的性能提升。此前,在无注意力机制下,输入特征层的每个通道对于输出特征层作用是相同的,而注意力机制则是为了进一步区分特征层通道之间的不同重要性,为其赋予不同的注意力权值,强调不同通道之间的重要性。因此传统SSD算法中的特征层也可以通过引入注意力机制来增强特征信息,进而提高小目标检测的性能。
图1 SSD算法的网络结构图
本文的目标是通过构造一个有效的特征信息增强模块来生成新的特征金字塔表示,进而检测不同尺度的目标,同时避免现有方法的局限性。如图2 所示,第一阶段,考虑到传统SSD算法特征金字塔中不同特征层之间的关系,首先特征融合模块(Feature Fusion Module,FFM)将基础骨干网提取的多级特征(即多层)采用FPN的融合方式生成基础特征,然后对基础特征通过特征整合细化获得进一步强化的多级特征,并作为第二阶段的初始特征,其核心思想是利用深度整合的均衡语义特征来强化多层次特征。第二阶段,引入一个挤压和激励模块(Squeeze and Excitation Block,SEB)[18],以鼓励特征层将注意力集中在它们最受益的通道上,从而到达增强有用信息和抑制无用信息的作用。经过这两个阶段,传统SSD算法单一利用特征层的方式得以改善,特征金字塔中多级特征的特征信息得到充分增强和利用,小目标检测的性能将得以提高。最后为了评估本文提出的特征信息增强模块的有效性,本文基于传统SSD 算法设计并训练了一个基于特征信息增强改进的SSD 算法(Feature Information Enhancement Based Single Shot Multibox Detector,FESSD)。
1 本文方法
为了提高SSD算法的精度,本文设计了一种特征信息增强模块,并基于此提出了FESSD 算法。不同于使用更复杂的基础骨干网[9-10],本文的策略是通过设计一个外部连接来改变SSD的网络结构,进而获取更强大的特征表示。与以往使用横向连接来融合多层次特征的方法[13-14]不同,本文的核心思想是利用深度整合的均衡语义特征来强化多层次特征,并通过自适应注意力机制来强调特征通道之间的有效信息。如图3所示,该模块主要步骤包括:首先特征融合模块将基础骨干网提取的多级特征(包括Conv4_3、Conv7、Conv8_2 和Conv9_2)采用FPN 结构的方式来实现不同特征层之间特征信息的有效融合并生成基础特征,随后对基础特征通过特征深度整合细化获得进一步强化的多级特征,并作为第二阶段的初始特征。在这个深度整合细化过程中,每个特征层从整合后的特征层中获得相同且均衡的信息。第二阶段,在每个初始特征层采用SEB模块对特征通道之间的相互依赖关系建模,通过学习的方式自动获取每个特征通道的重要程度,从而达到增强有用信息和抑制无用信息的作用。下面将详细介绍本文提出的特征信息增强模块。
如图2所示,把SSD算法特征金字塔中的Conv4_3、Conv7、Conv8_2、Conv9_2、Conv10_2 和 Conv11_2 分别记作 S1、S2、S3、S4、S5 和 S6。由于FPN 结构在高层的语义特征融合效果并不好,第一阶段,本文根据实际情况选择前4层(S1、S2、S3、S4)采用FPN的结构方式进行特征融合。如图4 所示,以S4 和S3 采用FPN 结构方式进行特征融合为例,S4 做2 倍上采样得到和S3 尺度大小一致的特征图,S3 则采用1×1 的卷积和S4 进行通道数统一,以便和S4的2倍上采样结果按元素相加(点和)进行特征融合,随后对点和的结果利用3×3的卷积消除上采样带来的混叠效应,得到最后的特征融合层C3。以此类推,特征层C3与S2融合得到C2,C2与S1融合得到C1。显然,第一阶段形成的多级基础特征层{C1,C2,C3,C4}中每个特征层都包含多层次的特征,它们比基础骨干网中的特征层要深得多,即更具有代表性。然而简单的连接操作还不适应,本文针对得到的多级基础特征层再进行一个特征深度整合细化的步骤,目的是在整合多个特征层的特征信息时保留它们的语义信息,并通过细化来获得更均衡的定位和语义信息。
图2 FESSD算法框架图
图3 本文提出的特征信息增强模块框架图
图4 FPN结构融合方式示意图
多级基础特征层中第l层记为Cl,特征层的个数表示为L,其中分辨率最高和最低分别表示为lmin和lmax。如图3 所示,在整合和细化多级基础特征时,C1分辨率最高,C4分辨率最小,首先将多尺度(L=4)的特征层{C1,C2,C3,C4}通过双线性插值和最大池化(Max-pooling)调整为C3 大小,然后整合后的特征层C可以由以下公式得到:
最后对特征层C 利用双线性插值和最大池化进行尺度还原,得到细化后的多级特征层{F1,F2,F3,F4}。
第二阶段,对多级初始特征层{F4,F3,F2,F1}中的每个特征层分别采用相同的SEB模块得到FESSD算法最后用于检测的前4 层(P1,P2,P3,P4)。如图5 所示,在特征信息增强模块的第二阶段,SEB模块包含两个步骤:挤压(Sequeeze)和激励(Excitation)。对于一个特征空间X=[x1,x2,…,xc]∈RH×W×C,H×W表示特征层尺度的大小,C表示通道数,xc∈RH×W表示输入特征层的第c个卷积核(通道)。Sequeeze 映射(Fsq)是将一个通道上整个空间特征编码为一个全局特征,实际上采用全局平均池化(Global Average Pooling)来实现,得到z∈RC的第c个全局特征zc的公式为:
通过Sequeeze操作得到全局描述特征后,Excitation映射(Fex)是一种自适应学习通道之间的非线性关系的运算,实际采用sigmoid激活形式的门控机制,其公式为:
图5(a)挤压和激励模块框架图
图5(b)SEB实际操作流程图
为了降低模型复杂度以及提升泛化能力,实际采用包含两个全连接层(FC)的瓶颈层(Bottleneck)结构:第一个FC层为降维层,参数为W1,参数r为降维系数,然后采用ReLU 激活函数;另一个FC 层的作用是恢复原始的维度,参数为W2,最后将学习到的各个通道的权重(sigmoid激活值)s乘以原始特征X以进行特征通道加权(Fscale) ,得到最后的输出特征层
其中,sc表示第c个通道的权重,表示加权后特征层的第c个卷积核。经过整个操作,模型对各个通道的特征更有辨识能力。
2 实验与结果分析
2.1 实验设置
数据集和实验环境:本文所有实验均是在Pascal VOC2007 和VOC2012 数据集[19]上进行的,其中训练集是由VOC2007 训练集和VOC2012 训练集组成的,算法性能评估是在VOC2007测试集上进行的。本文遵循传统SSD 算法中的数据增强策略来使得检测器算法对多尺度、多颜色的目标具有鲁棒性。本文所有实验都是基于Intel i7-7800x3.50 GHz 处理器和Nivida GTX1080Ti等硬件设备,并在TensorFlow1.4、Python3.5、Ubuntu16.04和CUDA8.0等软件环境下进行的。
基础骨干网和检测层:本文遵循传统SSD 算法的设置,选择在ImageNet 数据集上预先训练的VGG16分类网络作为基础骨干网。本文只对前4 个特征层(Conv4_3、Conv7、Conv8_2 和Conv9_2)采用了所提出的特征信息增强模块进行改进,而后2 个特征层(Conv10_2和Conv11_2)维持原状。特征信息增强后的特征层与传统SSD 算法的特征层在尺度大小和通道数上均保持一致。
训练细节:输入图像的尺寸为300×300,采用批量梯度下降算法进行训练,批量大小设置为32。最大迭代次数设置为120 000次,学习率的设置采用一种warm-up的策略,对于前1 000 次迭代,学习率为10-4,方便加快启动和收敛速度,对于1 000次到80 000次,学习率为10-3,对于80 000次到100 000次,学习率降低到10-4,在最后100 000次到120 000次时,学习率为10-5。本文所有相关实验均采用上述设置。首先训练和评估了传统的SSD 算法,然后对特征信息增强的两个阶段分别进行了仿真实验,最后基于整个特征信息增强模块完成了FESSD算法的训练和测试。
2.2 评价指标
目标检测领域最常用的评价指标是平均精度(mean Average Precision,mAP)和每秒帧率(Frame Per Second,FPS),即每秒内可以处理的图片数量。mAP 被定义为所有对象类别的平均精度(Average Precision)的平均值,AP是精度和召回率(Precision-Recall,P-R)曲线下区域的面积。根据在VOC2007 test 上的检测结果,计算各类别对应的查全率和查准率,可以得到P-R曲线并计算出mAP值。
图6 显示了本文的FESSD 算法和传统SSD 算法在Pascal VOC2007测试集下的P-R曲线对比图,其中输入图片尺寸为300×300。在较小(<0.4)召回率下,FESSD算法和传统SSD算法的每类精度的平均值几乎相同,但当召回率较高(>0.4)时,FESSD算法的每类精度的平均值显然更高。通过P-R 曲线对比图,可以直观地发现FESSD算法比传统SSD算法具有更高的mAP值。
图6 SSD和FESSD的P-R曲线对比图
2.3 与其他先进目标检测算法的性能比较
为了验证和评价本文提出方法的有效性,将FESSD算法与其他一些先进的目标检测算法进行了比较分析,所涉及到的算法其训练集和测试集都与本文的FESSD 算法保持一致。表1 表明FESSD 算法相比于Faster R-CNN[4]、RSSD[15]、SSD 精确度更高,达到了78.6%,比传统SSD提高了1.1个百分点,与DSSD[9]精度相当。FESSD 算法比FSSD[16]精度略低,主要是FSSD在融合后的特征层采用了批量规范化(Batch Normalization,BN)层技术。FESSD 算法精度的提升主要得益于提出的特征信息增强模块。在检测速度上,由于网络复杂度的增加,FESSD 算法相比于传统SSD 算法略有下降,但相比于 Faster R-CNN、DSSD 和 RSSD 明显更快,达到了46.1 f/s。DSSD 速度较慢的主要原因是其基础骨干网ResNet的复杂度过高,而RSSD速度相比本文FESSD 算法较慢,主要是由于其特征融合方式相对更复杂。
表1 各种算法在Pascal VOC2007测试集上的性能对比
如表2所示,用消融实验进一步验证了本文所提的特征信息增强模块在第一阶段(FFM)和第二阶段(SEB)的有效性,其检测精度相比SSD 分别提高了0.8个百分点和0.6个百分点,且速度分别达到了48.5 f/s和50.5 f/s。
表2 消融实验:特征信息增强模块不同阶段的性能对比
2.4 VOC2007测试集中20类性能对比
为了评价本文的FESSD算法能否有效地提高小目标检测的精度,表3 对FESSD 算法和其他一些先进的目标检测算法在Pascal VOC2007 测试集中20 个类别的精确度进行了比较。结果表明,FESSD 算法在bike、boat、cat、chair、plant、sheep 和 train 等类别上准确度最高。与传统 SSD 算法相比,对于 aero、bike、bird、boat、bottle、car、chair、cow、dog、mbike、plant、sheep、sofa 和train 这些类别,特别是小目标,FESSD 算法的性能有明显提高。
表3 各种算法在Pascal VOC2007测试集上20类性能对比
2.5 VOC2012测试集上样例对比
为了进一步直观地评价本文的方法,如图7 所示,在VOC2012测试集上用样例图片展示了FESSD算法和传统SSD算法在性能上的对比。图7(a)是本文FESSD算法的结果图,图7(b)是传统SSD算法的结果,不同颜色的框代表不同的类别。结果表明,相比于传统SSD算法,FESSD算法明显具有更强的检测和识别小规模物体的能力,它有效地减少了检测时目标的遗漏和误检的发生,特别是小目标,其定位更加准确。
图7 FESSD算法与SSD算法样例检测结果对比图
3 结束语
本文提出了一种特征信息增强模块来增强用于检测不同尺度目标的特征金字塔表示,并基于此提出了一种特征信息增强的SSD算法(FESSD)。首先,第一阶段设计了一个特征融合模块来对基础骨干网提出的多级特征层进行高效的特征融合和整合细化,增强后的多级特征层能够包含丰富的细节和语义信息,有利于小目标检测。随后通过一个挤压和激励注意力机制模块来自适应地学习基础特征层在通道数上不同的权重,从而达到增强有用信息和抑制无用信息的作用。最后,本文在Pascal VOC2007和VOC2012数据集上进行了一系列的实验,并对FESSD 算法和一些先进的检测器算法进行了定量和定性的比较分析。结果表明,本文FESSD 算法在精度上优于传统SSD 算法和其他一些先进的检测器算法,同时检测速度上也有相当的优势。进一步的消融实验也表明本文提出的特征信息增强模块是十分有效的,后续将进一步探索提高SSD小目标检测精度的方法,以及把本文提出的特征信息增强模块运用到更多的计算机视觉任务中。