感受野下的小目标检测算法

陈灏然,彭 力

物联网技术应用教育部工程研究中心(江南大学物联网工程学院),江苏无锡 214122

目标检测是当下计算机视觉研究的重点之一。传统的目标检测算法有常用于人脸检测的Harr[1]特征以及在行人检测和普通常规目标检测中所用的HOG[2]特征。这些传统的算法有两个重要的难以避免的缺陷:(1)用滑动窗口策略进行区域选择时针对性不强,增加了时间复杂度及窗口的冗余;(2)手动设计的特征对于目标的多样性并没有很强的鲁棒性。

随着卷积神经网络的不断改进,针对目标检测的研究开始真正进入了深度学习的时代。当下主流基于深度学习进行目标检测的主要有one-stage(一阶)与two-stage(二阶)两种。Two-stage 是准确度的代表,one-stage 则是速度的代表。自此,目标检测成为了一个多任务学习的问题。

Two-stage 类算法首先是产生候选区域,然后对候选区域进行分类。Girshick 等人于2014 年提出的R-CNN(region-convolutional neural networks)[3]是利用卷积神经网络进行目标检测的开端。其两步法主要是利用类似于机器学习中的局类算法,对图像分组得到多个候选框的层次组,随后进行分类。在R-CNN 的基础之上,Girshick 于2015 年提出了Fast R-CNN[4],在之前的基础上针对每个候选区域添加ROI Pooling[5]进行池化操作,随后采用softmax[6]取代SVM(support vector machine)[7]进行多分类的操作,并且利用回归模型进行边框位置与大小的微调。2015 年,Ren 等人在Fast R-CNN 的基础上提出了Faster R-CNN[8],将特征提取、候选区域、边界框回归、分类整合到了一个网络中,借此提高综合性能。虽然在精度上有了极大的提高,但是仍然不能真正实现端到端的检测。

基于候选区域的深度学习目标检测类算法在速度方面并没有很大的改进,针对目标的提取仍然具有很大的复杂度,导致时效性比较差。One-stage类算法因此被提出,主要有YOLO[9](you only look once)、SSD[10](single shot multibox detector)以及以这两个算法为主衍生的算法。

Redmon 等人于2016 年提出的YOLO 算法主要是通过候选区域产生大量的可能包含待检测物体的潜在边界框,然后用分类器去判断每个边界框里是否包含物体以及物体所属类别可能性以及置信度。相较于基于候选区域检测目标在实时性方面有了很大的进步,但是在准确度以及对于小物体的检测效果并不十分理想。

Liu 于2016 年提出的SSD 算法主要利用了金字塔结构的特征提取层进行特征图的提取,将多个卷积层提取的特征图进行softmax 分类和位置回归。YOLO 仅利用了高层特征图导致低层语义信息的缺失,从而导致小目标的检测效果不是十分显著。SSD虽然也利用了低层级的语义信息,但是这样的每个层级单独分类和回归导致每个层级间并没有直接的关联,导致上下层语义信息并没有很好地交融,小目标检测的效果仍然不是那么显著。

Liu 深知SSD 的优点与缺点,故与Fu 联合发表了DSSD(deconvolution single shot multibox detector)[11]算法。在SSD 卷积层之后,添加了辅助卷积层以及相对应的不对称反卷积层。同时将基础网络VGG-16 换成Resnet101[12],增强特征提取的同时也增加了特征融合,但是不可避免地增加了计算量,导致速度变慢。除此之外,由于Resnet 网络的特性,其下采样stride=4,这样也直接导致其对于小目标的检测仍然不是特别好。

由Cao 等人提出的Feature-Fused SSD[13]算法同样融合了上下文信息,它的基础网络仍然是VGG-16,与DSSD 不同之处是利用融合高层的语义信息去感知低层的语义信息。

基于现有的理论,提出了一种基于SSD,利用感受野以及多尺度融合的算法。首先在特征提取阶段,本文算法利用了基于VGG-16的主体框架。作为轻量级的backbone,VGG-16 具有更高的特征提取效率,同时在特征提取层中加入RFB[14](receptive field block)模块,通过模拟人类视觉感受野加强网络在特征方面的提取能力。此外,加入了特征融合模块,将上下文信息进行有效的融合,从而加强对小目标的检测精度。

1 基于感受野的小目标检测算法1.1 小目标定义

针对小目标的检测一直是深度学习图像检测的一个难题[15],与较大型目标相比小目标不论是数量还是大小在图片中往往占据很小的比例。正因为小目标的低分辨率,图像相对更模糊并且携带的信息过少导致其表征能力很弱。此外,神经网络中的主导为大型目标,也会导致小目标的被动忽视,导致其检测效果差。

1.2 感受野模块

神经学发现,在人类视觉皮层中,群体感受野的尺度是其视网膜偏心度的函数,其尺度与视网膜图的偏离度正相关,且不同视网膜图上群体感受野的尺度不一样。Receptive field block 是一个类似inception[16]模块的多分支卷积模块,它的内部结构分为多分支卷积层以及与之相连的膨胀卷积层,通过连接的多个分支卷积核以获得不同尺度的感受野,如图1 所示。

多分支卷积部分,借鉴了inception 的结构,同时加入旁路剪枝,用以减少大量的卷积核通道数。首先用1×1 的卷积核来实现通道的交互和信息整合以及进行卷积核通道数的降维。随后将两个5×5 的卷积核替换为两个3×3 的卷积核以减少参数量,同时增强模型的非线性能力。此外,进一步使用1×n和n×1的卷积核替代原有的n×n卷积核用以增强宽度和高度上的特征。同时设置旁路剪枝以减少卷积核的通道数,降低参数计算量。

膨胀卷积部分,最初于DeeplapV2 中被提出,在保持参数量和同样感受野的情况下,用来获取更高分辨率的特征,膨胀卷积归根到底是对卷积核进行填充。膨胀后的卷积核大小计算公式为:

图片[1]-感受野下的小目标检测算法-游戏花园

在每个常规卷积核后都会连接膨胀卷积层,随后各个分支concate[17]再后接1×1 卷积核用以与同层feature map 下的特征结合,同时减少通道参数,形成了类似人类感知视觉的模式。即离中心越近,贡献越高,反之越小。最后将concate 后的特征图与剪枝进行对位相乘。

1.3 特征提取框架

主体仍然沿用了SSD的backbone。VGG-16采用了连续的3×3 卷积核并且后接池化层。对于给定大小的输入图片,采用连续的堆积小的卷积核是因为多层非线性层可以在增加网络深度的情况下,做到保持复杂度的同时减少参数。相比早期的AlexNet,减小了卷积核的大小,确保了参数量的下降。相比拥有更多卷积层的DenseNet、ResNet 等网络,VGG-16的卷积层数较少避免了过拟合现象的发生。基于现有的先验知识,VGG-16 在实时性方面相对于重量级网络有很大的速度优势。与更轻量级的mobilenet[18]相比,VGG-16 因为拥有更多的卷积层,所以在牺牲较少实时性的同时具有更强的特征提取能力。

在原始的VGG-16 网络上是没有BN[19](batch normalization)层的,这里选择添加BN 层,因为神经网络一旦训练起来,便会更新大量参数,除了输入层的数据外,后面网络层的输入数据分布是一直在发生变化的,数据的不断变化会影响网络的训练速度,添加BN 层可以使得网络收敛性更加快速。一般情况下可以通过调整学习率、权重衰减系数、Dropout比例等,对这些参数同时进行调整并且多次实验,这样必定会浪费大量的时间用于调整参数上。实验过程中,在不加BN 层的情况下,单一地调整学习率和权重系数等参数,损失值依然很大,说明梯度问题未得到改善。因为原网络的输入特征在未经过线性归一化的情况下,需要网络主动去调整学习适应输入特征的均值和方差。因此选择在网络层间添加BN 层,也就相当于多了一个映射层,使得网络不必花费大量的时间调整自己去适应输入特征,极大地加速了网络的收敛以及梯度的下降。此外,BN 层可以完全取代具有相同归一化功效的Dropout 层,使得改进后的网络在空间复杂度方面得到了优化。

添加BN 层后,适当提高学习率,并且将fc6 与fc7 全连接层做up-sampling[20]后变成卷积层,因为全连接层会破坏图像的空间结构,故将其替换为卷积层。对于10×10 的特征图,不直接在上面采用Receptive field block,因为在这些提取到的特征图中能够获得的信息量较小。

1.4 特征融合模块

早先的SSD 主体框架在各个层级上是分别进行特征提取并且直接预测的,此外各个层级之间并无直接的关联,这样就导致对中小型的目标的检测并不是那么准确,SSD 的预测结构图如图2 所示。

图片[2]-感受野下的小目标检测算法-游戏花园

Fig.2 SSD prediction structure图2 SSD 预测结构图

现在需要做的是将各个预测层连接起来,让高层的语义信息和低层的语义信息能够更好地融合。因为相较于低层的语义信息,更深的卷积神经网络能够检测到更多的语义信息,并且这些语义信息都具有平移不变性,对于目标类别的检测更加有效。特征融合预测结构图如图3 所示。

图片[3]-感受野下的小目标检测算法-游戏花园

Fig.3 Feature fusion prediction structure图3 特征融合预测结构图

实际的特征融合过程中,Conv3_3 由于融合效果不算显著,且增加了额外的计算量,因此并没有被加入到特征融合模块中。当提取到的特征图分辨率低于10×10 之后,特征中所包含的信息就会较少,Conv8_2以及Conv9_2 的特征图大小分别为3×3 以及1×1,故将其替换为RFB 模块,不参与融合。实际的实验中首先采用了Conv3_3、Conv4_3、fc7、Conv7_2 进行融合,实际实验中与只融合Conv4_3、fc7、Conv7_2 进行对比,并没有显著提升,且相对于后者,增加了计算量,故不选择Conv3_3 进行融合。同时,在特征融合模块中加入感受野模块,首先是为了能够降低通道参数,减少参数计算量,其次是确保在保持参数量和同样感受野的情况下,用来获取更高分辨率的特征,特征融合结构图如图4 所示。

选择fc7 以及Conv7_2 进行双线性插值操作,并将新生成的特征图进行concate,因为相较于elementwise[21]融合操作,concate的操作时间更短,效果更好。

图片[4]-感受野下的小目标检测算法-游戏花园

Fig.4 Feature fusion structure图4 特征融合结构图

1.5 总体结构图

系统的整体框架依然沿用了SSD 的整体结构,在Vgg16 的整体基础上替换Conv8 以及Conv9 为膨胀卷积层,因为该层提取到的特征分辨率可以应用5×5 的卷积核,而最后几层分辨率太低无法应用,故只替换了Conv8 以及Conv9,同时在特征融合的过程中加入膨胀卷积层。

经过融合实验之后,以Conv4_3 为基础层,其特征图大小为38×38,将其通过RFB 模块之后再进行1×1 卷积,用以减少特征图的通道数,Conv7_fc 的分辨率为19×19,Conv7_2 的分辨率为10×10,通过RFB通道后其分辨需要与Conv4_3 卷积后的特征图的width、height 一致,故需要进行双线性插值操作使其分辨率一致。随后进行concate 操作将其融合在一起。相较于原始的SSD 网络,增加的仅仅是融合部分以及替换Conv8、Conv9 后通过感受野模块的计算量。相较于SSD 的FPS,虽然大幅下降,但是其平均精度mAP 提升了4.6 个百分点,相较于原始的仅仅加入感受野模块提升了1.3 个百分点。同时相比于原始的SSD 网络,增加了层间的BN 层,极大降低了梯度,防止训练过程中梯度爆炸的现象发生,整体算法结构如图5 所示。

2 实验结果与分析

图片[5]-感受野下的小目标检测算法-游戏花园

Fig.5 Block diagram of proposed algorithm图5 本文算法结构图

本文所用的深度学习框架是pytorch-0.4.0,所用的操作系统为ubuntu16.04。硬件方面所用的GPU显卡为4*1080Ti,内存为16 GB,CUDA 版本为9.0,CUDNN版本为7.0。训练分别采用了Pascal VOC2007、Pascal VOC2012 以及自制航拍数据集[22]。VOC2007数据集包括9 963 张图片,总共20 类物体。VOC2012数据集包括12 031 张图片,总共20 类物体。引用的自制航拍数据集总共55 740 张图片共计12 类物体。训练的batch size 选择为32,max_epoch(训练总轮数)设置为300。为了使得训练的损失平稳,在各个epoch设置了间断的权重衰减,冲量为0.9。设置初始学习率为0.006,将学习率衰减系数设置为gamma=0.2。在初始的11 个epoch 阶段,设置了预热阶段,此时的学习率为0.000 001。因为本文算法没有经过预训练,所以为了防止损失率出现等于Nan 的情况,需要进行预热阶段。同时,为了保持损失率的稳定下降,分别在epoch=150,epoch=180,epoch=210,epoch=240共计4 个阶段设置学习率衰减点,实验结果如表1~表3 所示。

本文提出的RFB-feature_fusion 算法在VOC2007+VOC2012 上的mAP 为81.8%,相比于SSD 算法有4.6个百分点的提升,同时相比于DSSD 有3.2 个百分点的提升。此外,本文算法所引用的自制航拍数据集的mAP 为82.8%。相较于DSSD 在综合性方面有很大的进步,如表2 所示。

首先对比的是针对哪些层进行融合可以使得融合后的整体特征效果更好。在不使用RFB模块的前提下,分别从是否运用BN 层、层级间的融合方式以及融合的层进行实验,得到了如表1所示的结果。

其次对比是否融入RFB 模块或者是特征融合模块进行实验分析。相比于只有单独的RFB 模块的加入,融入特征融合模块,在平均精度方面有大概1.1%的提升,检测速度方面只有略微的下降,实时性仍然能够具备。本文提出的RFB-feature_fusion 算法同时兼备了准确性与实时性,如表3 所示。

图片[6]-感受野下的小目标检测算法-游戏花园

Table 1 Test results of different fusion methods under VOC2007+VOC2012表1 不同融合方式在VOC2007+VOC2012 下检测结果

图片[7]-感受野下的小目标检测算法-游戏花园

Table 2 Test results of different detection algorithms under VOC2007+VOC2012表2 不同检测算法在VOC2007+VOC2012 下检测结果

图片[8]-感受野下的小目标检测算法-游戏花园

Table 3 Comparison of algorithm effect of incorporating different modules表3 融入不同模块算法效果对比

接下来对比不同的生成特征金字塔的方法。如果不将生成的融合特征送入预测层,相比在生成的特征金字塔中加入融合特征将会在mAP 上降低0.6 个百分点。如果将所有的Conv 和ReLU 换成bottleneck,这样将会在mAP上下降0.4个百分点。因此最有效的办法是在特征金字塔中融入融合特征,如图6 所示。

在实际应用的小目标检测中,为了验证所提算法的准确精度,分别利用了Pascal VOC2007+Pascal VOC2012 以及自制的航拍数据集进行训练检测。随机选取了测试集中的图片对算法的准确度进行验证。结果如图7 和图8 所示,相对于该数据集在SSD中的检测,针对小型目标的检测在检测到的小目标的个数以及位置方面有了极大的提高。

图片[9]-感受野下的小目标检测算法-游戏花园

Fig.6 Feature pyramid fusion map图6 特征金字塔融合图

3 结论

本文算法是一种轻量级的快速检测小目标的算法,与现在很多采用复杂的特征提取框架算法不同之处在于本文算法采用的是轻量级的backbone。通过感受野模块以及特征融合模块,在牺牲少数速度的前提下,增加了检测的精度,进一步增强了对小目标的检测效果。在VOC2007+VOC2012 以及在自制的航拍数据集中针对小目标的检测精度相比于SSD算法有了很大的提升。

图片[10]-感受野下的小目标检测算法-游戏花园

Fig.8 Comparison results of different algorithms on aerial photography dataset图8 不同算法在自制航拍数据集上的对比结果

THE END
喜欢就支持一下吧
点赞145 分享