感受野特征增强的SSD目标检测算法①
2020-09-22谭龙,高昂
谭 龙,高 昂
(黑龙江大学 计算机科学与技术学院,哈尔滨 150080)
目标检测是计算机视觉领域的一项重要任务,是生活中如实例分割[1],面部分析[2],汽车自动驾驶[3]、视频分析[4]等各种视觉应用的先决条件.
近些年,伴随着深度卷积神经网络的充分发展[5]以及良好的数据集注释先验工作的积累[6],物体检测器的性能得到了显著提高.但是,物体检测过程中的尺度变化仍然是所有检测器的关键挑战,为了识别不同尺度的物体,早期大多数的检测器都是基于手工制作的特征[7],并且利用图像金字塔.考虑到内存和检测时间,这些工作无论在计算还是花费上都是昂贵的.得益于卷积神经网络的发展,手工设计的特征已逐渐被卷积神经网络计算的特征所取代.最近的检测系统[8,9]利用卷积神经网络(ConvNets)在单个输入尺度图像依次进行运算,获得不同尺度的特征图,然后用最顶层特征图来预测具有不同尺度和纵横比的候选边界框.然而,最顶部的特征图具有固定的感受野,与自然图像中的不同尺度的物体冲突.特别是小物体在最顶层上几乎没有信息,因此可能会损害物体检测性能,尤其是小物体.
在解决多尺度问题方面,SSD 利用从下到上的特征金字塔来适应各种尺寸的物体,然而,SSD 算法的特征金字塔形式未能利用深层特征图中强大的语义信息,这对于小物体检测至关重要.因为语义信息对于检测视觉上困难的物体(例如小的,遮挡的物体)是决定性的,为了克服SSD 的缺点并使网络对对象尺度更加稳健,最近的工作(例如FPN[9],DSSD[10],RON[11])建议将低分辨率带有强语义信息的特征图同具有高分辨率但带有弱语义弱信息的特征图通过自上而下的通道横向连接.与SSD 中的自下而上的方式相比,横向连接将语义信息一个接一个地传递到浅层,从而增强了浅层特征的检测能力.与传统检测器相比,这些网络在精度方面有着显著的提高.但是我们注意到这些在最顶层特征图中使用反卷积层的方法完全丢失了小物体的精细细节.
本文致力于提高小物体的检测性能,缓解SSD算法的尺度变化问题,同时又不失实时检测速度.通常,较深层中的深层特征对于分类子任务更具辨别性,而较浅层中的浅层特征则对于物体位置回归子任务更有利.此外,浅层特征更适合于具有简单外观的特征对象,而深层特征适用于具有复杂外观的对象.基于此,本文通过特征融合模块将具有语义信息的深层特征添加到浅层特征中,以获得具有丰富信息的特征图,将来自不同层次的不同尺度的特征图投影并连接在一起,然后用BN[12]层进行归一化处理,最后附加下采样层以生成新的特征金字塔,此外,添加了感受野模块(RFM),以加强从轻量级CNN 模型中学到的深层特征,使它们有助于检测器快速准确.与传统SSD 相比,本文算法RF_SSD 主要选择VGG16 作为骨干网络,而不是更深层次的ConvNets (例如ResNet[13]或DenseNet[14]),原因是深层卷积神经网络(ConvNets)虽然对特征提取有利但会加大计算量同时降低检测速度,实验表明本文所提出的结构在精度上比SSD 算法有所提升.本文的贡献主要表现为以下几点:
(1) 提出了新颖的、轻量级的特征融合方式,主要是将不同层的特征图合并,并生成特征金字塔,降低了重复检测一个对象的多个部分或者多个对象合并到一个对象的检测概率,同时小物体检测表现更好.
(2) 借鉴混合空洞卷积和Inception 结构,设计并添加感受野模块来增强网络的特征提取能力,同时在不增加卷积参数的前提下增大卷积感受野,加强轻量级卷积神经网络学到的深层特征,保证检测器的实时性.
(3) 在PASCAL VOC 数据集上进行了定性与定量的实验,结果表明,同传统SSD 算法相比,本文所提出的算法在目标检测性能上有显著的提升,同时以相对低的速度损耗提高了小物体的准确率.
1 相关工作
在目标检测算法研究中,无论是在单阶段检测器还是两阶段检测器中,相关研究者都投入了大量的工作来改善目标检测中的尺度变化问题,大致可分为两种策略.一种是图像金字塔,通过图像的尺度变化来产生具有语义代表性的多尺度特征,然后用来自不同尺度的图像的特征分别产生预测,最后将这些预测放在一起进行评估以给出最终预测.在识别精度和定位精度方面,来自多尺寸图像的特征确实超越仅基于单尺度图像的特征.诸如OHEM[15]和SNIP[16]之类的方法都采用了这种策略.虽然性能得到了提升,但这种策略在时间和内存方面花销很大,所以在实时任务中很难得到应用.另一种是利用网络内的特征金字塔以较低的计算成本来模拟图像金字塔.该策略比第一个策略需要的内存和计算成本要少得多,从而可以在实时网络的训练和测试阶段中进行使用.此外,特征金字塔构建模块可以很容易地修改,并应用在最先进的基于深度神经网络的探测器.MS-CNN[17],SSD[8],DSSD[10],FPN[9],YOLOv3[18],RetinaNet[19]和RefineDet[20]以不同的方式采用了这种策略.
此外,MS-CNN[17]提出了两个子网络,并首先将多尺度特征结合到用于物体检测的深度卷积神经网络中.提议子网利用几种分辨率的特征图来检测图像中的多尺度物体.SSD 利用VGG16 网络的后几层的特征图和额外特征层进行多尺度预测.FPN 将高层特征与低层特征相结合,由最近邻居上采样和横向连接实现.DSSD实现了反卷积层,用于聚合上下文和增强浅层特征的高级语义信息,RefineDet[20]采用了两步级联回归,在保持SSD 效率的同时,在准确性方面取得了显著提高.
2 RF_SSD 算法
本节将在SSD 框架基础上,分析算法涉及到的特征融合处理、感受野模块的设计以及算法的具体处理过程.
SSD 采用不同尺度的特征图来检测物体,以VGG16[21]作为骨干网络,采用级联卷积的方式生成不同尺度的特征图,结合YOLO 的回归思想和Faster-RCNN 的Anchor 机制,使用全图各个位置的多尺度区域特征进行回归,既保证检测速度又保持了精度.同时在对特征图预测时,采用卷积核来预测一系列Default Bounding Boxes 的类别和坐标偏移.
由于小物体不会在浅层中丢失太多的位置信息,并且大物体也可以在较深层中很好地定位和识别,所以SSD 算法使用浅层特征图检测小物体,深层特征图检测大物体这种策略是合理的,但问题是由浅层产生的小物体的特征缺乏足够的信息,这将导致小物体检测性能的不良.此外,小物体也严重依赖于上下文信息,SSD 网络结构如图1所示.
图1 SSD 算法结构图
2.1 特征融合(Feature Fusion)
针对传统SSD 算法缺点,FPN 和DSSD 利用顶层特征的反卷积层,经过验证,这种方法可以大大提高传统探测器的性能,但却需要多个功能合并过程.而且右侧的新特征只能融合相应的左侧和更高层级的特征[9,10].此外,潜在特征和大量特征的element-wise process过程也会消耗大量时间.基于此,本文提出了一种轻量级和高效的特征融合模块来处理这项任务.本文的动机是以适当的方式一次融合不同级别的特征,并从融合特征生成特征金字塔.
传统的SSD300 是基于VGG16 的,作者选择Conv4_3,FC7 和新添加的Conv8_2,Conv9_2,Conv10_2,Conv11_2层特征图进行检测.相应的特征图的大小为38×38,19×19,10×10,5×5,3×3 和1×1.本文认为大小小于10×10的特征图太小而几乎没有要合并的信息,所以本文先将Conv8_2 的stride 设为1,这样Conv9_2 的大小为10×10,然后本文选择Conv4_3,Conv9_2 融合为新的特征图,增强了浅层特征的语义信息,同时也有很强的几何细节信息表征能力.
在传统的处理方法中,主要有两种方法合并不同的特征图:concatenation 及element-wise summation.Element-wise summation 要求特征图的通道相同,这意味着我们必须将特征图转换为相同的通道.由于此要求限制了融合特征图的灵活性,所以我们选择用concatenation 方式.为了使Conv4_3,Conv9_2 融合为新的特征图,需对Conv9_2 进行上采样处理.如图2所示,首先使用大小为2×2,通道数为256 的反卷积核进行上采样,将输出通过3×3 的卷积核映射至BN 层,然后再到下一个反卷积核.Con4_3 通过1×1 的卷积核直接映射输出至BN 层.最终将Conv4_3 通过1×1 卷积层的输出与Con9_2 经过两层反卷积层的输出进行concat 操作,之后传入至ReLU 层,再通过L2 Normalization 层做归一化处理,同时增加模型的鲁棒性.
图2 特征融合模块
2.2 感受野模块
本模块采用多支路卷积形式,其内部结构可以分为两个部分:多支路卷积层和空洞卷积层.多支路卷积层的结构和Inception 相同,模拟不同尺寸的感受野,空洞卷积层利用空洞卷积模拟不同尺寸感受野之间的关系[22].在卷积神经网络中,卷积核的感受野大小和卷积核的尺寸成正相关,通过改变卷积核的尺寸可以获得不同大小的感受野,进而更加有效的利用特征信息.本文的设计借鉴了Inception-V4 和Inception-ResNet[23],结构如图3所示,首先在每个分支结构中使用1×1 的卷积层,减少特征图中通道数量,用2 个连续的3×3 Conv 替代Inception 模块中的5×5 Conv,从而实现网络深度的增加,之后将原有3×3 的卷积核分解成两个一维的卷积核(1×3 和3×1),目的是加速计算,同时网络宽度增加,增加了网络的非线性.除此之外,为了保留更多的原始特征信息,增加了一条剪接支路.
图3 RFM 模块
本算法感受野模块结构上借鉴了混合空洞卷积和Inception,混合空洞卷积(hybrid dilated convolution)由文献[24]提出,通过叠加多个不同空洞率的空洞卷积来避免网格效应和平衡不同尺寸感受野之间的关系,解决了传统卷积神经网络采用池化层所造成的内部数据结构遗失和小物体信息无法重建等问题,同时协调多支路卷积,在很好的结合多支路卷积的同时提高了算法的检测效率.
2.3 算法结构
本文算法是以SSD 算法框架为基础构建的,提出新的特征融合模块来充分利用深层的特征信息以此提高算法的检测精度,同时改善小物体检测的效果,另外,通过在特征提取网络上添加感受野模块来提高特征的提取能力.无论特征融合模块还是感受野模块都比较简单,所以在极大程度上保留了SSD 原有的网络结构,保证了检测速度.整体的算法结构如图4所示,骨干网络采用VGGNet,先对Con9_2 层特征图进行尺寸调整,后将调整尺寸后的Con9_2 层特征图与Con4_3 层特征图传入Feature Fusion 模块产生新特征图,经BN 层后,通过一系列下采样形成特征金字塔,同时加入感受野模块.具体描述如下:第一是将Conv8_2 的stride 设为1,这样Conv9_2 的大小为10×10,然后使用两层反卷积核对Conv9_2 进行上采样处理.之后将输出和经过BN 层的Conv4_3 进行concat 操作,之后传入至ReLU层,再通过L2Normalization 层做归一化处理.第二,对新得到的特征图进行下采样(包含一些1×1 和stride为2 的3×3 的卷积层来改变通道数和特征图的大小),形成新的特征金字塔,同时利用新添加的感受野模块对新的特征信息进行检测.第三,用RFM 替换掉中间两层卷积层,考虑到最后两个卷积层的尺寸,将最后两层保持不变.
图4 本文的算法结构
本文的损失函数采用了传统的SSD 算法的处理方式,回归函数输出物体的位置坐标,Softmax 函数进行预测分类.总的损失函数为位置误差(locatization loss,loc)与置信度误差(confidence loss,conf)的加权和:
其中,N是先验框的正样本数量.c为类别置信度预测值.l为先验框所对应边界框的位置预测值,x为预测框的类别匹配信息,而g是ground truth 的位置参数.权重系数α通过交叉验证设置为1.
位置误差定义为:
对于位置误差,其采用Smooth L1 loss,定义如下:
置信度误差,其采用Softmax loss,定义如下:
3 实验分析
3.1 数据增强
在进行训练之前,可先通过数据增强的方式对数据进行预处理,以此提高数据集的多样性,使模型有更高的鲁棒性.常用的数据增强方式如随机翻转、缩放、颜色变化和裁剪等.通过将数据增强方式应用到训练当中,可使模型学到旋转不变性和对称不变性.
3.2 网络训练策略
本文算法采用与SSD 算法相似的训练策略,都是使用训练好VGGNet 网络,本文使用PASCAL VOC 2007 和PASCAL VOC 2012 数据集,同时把与真实框(ground truth)的交并比(IOU)大于0.5 的预测框认为是正样本.采用平均精度(mAP)作为评测算法性能的度量,帧速(Frame Per Second,FPS)作为目标检测速度的评价指标.训练阶段将输入图像的大小设为300×300像素.训练时,我们用VOC 2007 trainvaland VOC2012 trainval (VOC07+12)的联合数据集训练,在VOC 2007 test 测试集上测试.本文的硬件环境为深度学习框架Caffe,ubuntu16.04 系统,GPU 显卡型号为NVIDIA 1080Ti,Batch size=16,初始学习率设定为0.001,max_epoch 设置为180 K,然后在步骤100 K,140 K 和180 K 除以10.将权重衰减设置为0.0005.和SSD 算法一样采用动量为0.9 的SGD 来优化本文算法.
3.3 PASCAL VOC2007 测试结果分析
PASCAl VOC 是一个用于物体分类识别和检测的标准数据集,该数据集包括20 个类别,表1为PASCAl VOC 具体类别.
表1 PASCAL VOC 数据集类别
本文算法模型与主流目标检测算法在VOC2007数据集的实验结果如表2所示,本文所提出的算法准确率达到了80.2%,比传统的SSD 算法有2.7%的提升,比DSSD 算法提高了1.2%,但比R-FCN 低了0.3%,原因在于R-FCN 算法使用ResNet-101 作为基础网络,相比于VGG-16,算法网络结构更深,提取特征的能力更强,但同时也降低了网络的检测速度.本文算法的检测速度为44.5 FPS,虽然相比于传统的SSD 算法,速度也有所下降,但满足实时检测需求.
表2 不同目标检测算法在PASCAL VOC 2007上的检测结果
不同目标检测算法在精度和速度上的分布如图5所示,Faster-RCNN,R-FCN,YOLOv2,DSOD,RSSD,DSSD 算法是在Titan X GPU 上进行测试的,而SSD和本文提出的算法是在1080 Ti GPU 上测试的.从图5中也可看出本文的算法在检测速度和精度上有着一定的优势.
图5 不同的检测算法在检测速度和精度上的分布
本文将传统的SSD 算法和RF_SSD 算法在每一类目标检测的精度上进行比较,结果如表3所示.从表中可知,飞机,自行车,鸟,船,瓶子,公交车等类别都有显著的提升,其中,瓶子,盆栽的检测精度较低,虽然得益于本文提出的网络结构,相比于传统的SSD 算法,精确度有所提升,但因物体相比于其他类别太小,特征提取较少,导致相应检测精度不高.但总体来说,本文算法相比于SSD 算法mAP 提高了2.7%,基本满足实际需求,同时也论证了本文算法思想的可行性.
同时本文对比了感受野模块对算法检测结果的影响(参见表4),通过实验可知添加感受野模块可提高算法的准确率,说明感受野对算法性能有一定的提升,同时由于感受野模块采用多个支路卷积,提高了模型的复杂度,所以导致检测速度降低.
表3 本文算法在PASACAL VOC2007 测试集上单个类别的测试结果
表4 感受野模块对算法准确率的影响
最后本文分析了不同卷积层融合后的结果,结果如表5,若融合Conv3_3,Conv4_3,和Conv9_2,则在VOC2007 的mAP 为79.8%,若去掉Conv3_3,则mAP 为80.2%,表明Conv3_3 对检测器的结果并没有太大的影响,原因在于Conv3_3 卷积层提取的特征图包含较多的背景噪声.此外,本文从COCO 数据集中随机挑选了几张照片,测试结果如图6所示.
表5 不同层融合的测试结果
4 结论
本文基于SSD 算法,提出了一种新颖高效的目标检测算法,通过将不同层的特征图以轻量级的方式融合在一起,使新的特征图既有深层特征的语义信息,同时又有高分辨率,然后采用下采样层生成特征金字塔,之后设计添加感受野模块,提高网络的特征提取能力,提高了算法的整体精度,也改善了小目标的检测效果.本文的算法在精度上超越了传统SSD 算法以及一系列其他目标检测算法,由于添加感受野模块,增加了网络特征的提取能力,增加了精度,但加深了深度和模型复杂度,导致检测速度降低,虽以速度换取精度,但基本满足实时检测要求.和大多数单阶段目标检测结构一样,本算法类别不平衡问题依旧未能得到解决.未来,将继续改进该算法,使用anchor-free 模型方法或进一步修改目标损失函数改善类别不平衡问题,设计轻量型的特征提取和融合网络结构,在不降低精度的同时提高速度.
图6 COCO 2017 上的实例检测结果