陈灏然,彭 力+,李文涛,戴菲菲
1.物联网技术应用教育部工程研究中心(江南大学 物联网工程学院),江苏 无锡 214122
2.台州市产品质量安全监测研究院,浙江 台州 318000
目标检测一直是图像识别领域经久不衰的研究方向,通过搭建出的算法模型将图片或者视频中感兴趣的目标提取出来。在当下的生活中,这一研究成果被广泛应用于机器人导航、智能视频监控、工业检测等诸多领域。近年来,各种深度学习模型不断被推出并且不断被改进,从基于产生候选区域并进行分类的two-stage 算法演化至直接将提取出特征丢入卷积网络训练的one-stage算法。
One-stage 类算法的典型代表为Liu 等人于2016年提出的SSD(single shot multibox detector)算法,对于特征的提取采用了金字塔结构的特征提取层,针对不同层提取到的特征分别进行了分类与回归。同为one-stage 类算法的YOLO(you only look once)算法仅仅利用了高层卷积层提取到的信息,因此缺失了低层特征图的语义信息,直接导致对于小型目标的检测效果并不是十分理想。相比YOLO,SSD 虽然利用了低层语义信息,但是层级与层级之间并未存在任何信息交互,而是直接将特征提取的结果丢入预测层中,对于小目标的检测效果仍不是十分理想。
针对SSD 对小目标检测效果不好的情况,Fu 等人发表了DSSD(deconvolution single shot multibox detector)算法。该算法在SSD 基础上采用了辅助卷积层以及相对应的不对称反卷积层来增强语义信息的感知与融合。此外,将基础训练网络换成ResNet101(residual network)。因为ResNet101 自身携带残差网络的特性,使其在特征提取以及网络收敛方面效果良好,但是过深的训练网络增加了特征提取过程中的计算量,由于其层数较大,不可避免地导致速度变慢。
由Li 等人提出的FSSD(feature fusion single shot multibox detector)解决了多尺度特征的问题。特征提取骨架仍然沿用了VGG16,在此基础上增加一个轻量级的特征融合模块,来自不同层提取出的特征最后concat一起,通过下采样模块生成更新的特征金字塔。
此外,后ResNet(deep residual network)时代,出现了SENet(sequeeze and excitation block)网络,通过对每个通道的全局平均池化,再用两个非线性的fc层捕捉非线性通道的交互,外加一个sigmoid函数生成通道进行传值来提升通道间的注意力,解决了因为多层网络导致层间传递特征丢失的问题,达到了针对小目标物体检测精度的提升。
基于现有的理论,提出一种基于SSD,利用轻量级多尺度框架及对样本采取目标增强的算法。在特征提取阶段采用了STRFB(small target in receptive field block)的基础特征提取框架,并在基础框架中融入基于SENet 改进的新的注意力通道机制。此外设计了一个通用的损失函数来覆盖大多数具有不同采样策略的基于区域的目标检测器,并在此基础上提出了一个基于样本加权网络来预测样本的任务权重。同时,对于训练的样本采用数据增强的方法来增强样本特征对于一幅图的占比。
当下的深度学习算法正逐渐从单一地专注于精度向牺牲部分精度达到速度与精度兼备的阶段。基于候选区域并进行分类的two-stage 算法,如图1 所示,主要通过一个卷积神经网络来完成目标检测的过程。提取样本特征结束后,训练主要分为两步:首先需要训练RPN(region proposal network)网络,同时也会对特征图进行区域的分类,进行目标位置的初步预测;其次是针对预测的位置进行精准定位以及修正。
图1 two-stage算法流程图Fig.1 Network structure of two-stage algorithm
相比两步走的two-stage 类算法,one-stage 类算法更倾向于直接通过主干网络给出类别和位置信息,如图2 所示,在牺牲精度的情况下大大提升了算法的速度。
图2 one-stage算法流程图Fig.2 Network structure of one-stage algorithm
针对小目标的定义,一般分为相对尺寸定义与绝对尺寸定义。相对尺寸的定义是根据国际组织SPIE 制定的标准,一般在256×256 的图像中小于80个像素的目标便可称为小目标,即小于等于图像整体大小的0.12%。绝对目标则是在官方制定的VOC数据集中,尺寸小于32×32 像素的目标可被认定为小目标,在VOC 数据集中32×32 像素的目标小于图片大小的0.12%。一般由于感受野过大,且卷积神经网络中使用了池化层,导致特征图上小目标的感受野会因为特征的降维丢失部分信息,因此一个特征图包含小目标物体的概率就会更小。同时,特征图的细节特征在网络提取的过程中会随着深度的增加导致语义信息的减少。
通过对训练样本进行数据增强,可以使图片在更加多样的同时,同一条件下进行多次重复训练。传统的数据增强包括对图像进行缩放并进行长和宽的扭曲,或者可以对图像进行翻转,也可以对图像进行色域上的扭曲。倘若单纯采用传统方法的话,样本便失去了多样性,根本原因仍然是其本质上并未保证小物体在每一幅图像中足够地出现。
对此,本文采用了首先对样本中图像内部的小目标进行采样,其次通过复制粘贴小对象来增强每一张图像。如图3 所示,在将目标于图像中进行粘贴之前,选择对其进行随机变化,将目标的尺寸放大缩小的范围定位在±20%的范围,旋转的尺寸规定在±15%的范围。在自制的数据集中,如图4 所示,若拍到的同种类型目标比较多,便不再做类似的样本处理,如此操作可以增强样本中小目标的多样性。
图3 VOC 数据集样本Fig.3 VOC dataset sample
图4 自制航拍数据集样本Fig.4 Self-made aerial dataset sample
在粘贴样本中的小目标时,需要着重考虑两点:首先,必须确定目标是否可以与其他被检测目标可以重叠,通过对训练好的模型进行检测观察是否会影响被遮挡物体的训练精度;其次,选择高斯滤波器对样本进行噪声处理,使得样本中的小目标的边缘更加平滑。
为了解决层间信息传递导致的部分特征细节的损失,提出了基于SENet 改进的自适应个邻域的信道交互机制。
在SENet 中的特征变化是通过先压缩后扩张来达到通道数不变的效果,压缩带来的降维不可避免地会给注意力预测带来副作用,导致捕获通道间的依赖低效,如图5 所示。避免降维对于学习通道注意力非常重要,适当跨信道可以在显著降低模型复杂度的同时保持网络的性能。此外,由于用的是两个全连接层进行的信道交互,会不可避免导致参数量增加,利用个信道信息的融合可以达到参数量不变的目的。
图5 SENet信道交互图Fig.5 SENet channel interaction
在平均池化阶段,将需要的大小为的一维卷积给与适当的padding(间隔)值,便会阻止池化阶段降低维数,同时对于池化后得到的一维参数选择个相邻参数来捕获局部跨通道交互信息,这个相邻参数同时代表了局部跨信道交互的覆盖率。针对=3,5,7 分别进行实验,发现=3 时,个邻域间的信道交互达到了良好的实验结果,如图6 所示。
图6 k 邻域跨信道交互图Fig.6 k-neighbour cross-channel interaction
在SENet的局部通信块中,其信道权重表达式为:
由式(1)、式(2)可得()=ReLU(),证明这是一个可预测的线性模型。
在本文中,令=(),可得=()。此时针对某个参数y和它个相邻参数的信息交互如式(3)所示。
因为需要统一参数,所以可以令所有参数和各自的个相邻参数信息交互,可得式(4):
整体计算的空间复杂度因为个信道的交互而大幅度降低,付出的代价是增加了部分时间复杂度。
当下的检测器中,区域加权对于基于区域的目标检测器也十分重要。相较于以往优化函数的过分关注困难样本,针对样本的区域加权应该与数据集以及需要检测的目标相关。
因此设计了一种针对one-stage 算法的损失函数来针对目标检测器,并以这个损失函数为基础,提出一个基于样本的加权网络来预测样本的任务权重。
它的优点在于可以在学习分类的同时学习回归任务的样本权重。这是一个数据驱动的模型,与人为调整参数无任何联系,减少了人为的干扰。此外针对多类检测器都比较适用。相较于过去的方法,在性能以及多样性上有着显著的提升。
在多任务问题中,由于每个样本间的不确定性相对较大,导致采样加权的过程较为复杂。因此不应该将联系寄托于样本之间的关系,而是应该将注意力转至样本和任务以及任务之间的平衡。因为样本的权重首先应该是取决于样本的内部属性。其次,小目标是个多任务问题,样本的权重应该是在不同任务间寻求一个平衡,而不单单依赖于样本之间的联系。因此,提出的动态加权网络是基于分类和回归之间取得平衡的一种网络。
对于给定的一组锚点α∈,多任务的目标检测训练表达式为:
其中,表示回归损失,表示采样的锚点,与分别为训练样本和预测样本,增加S作为损失权重后,损失函数将转化为:
当下的损失函数的设计仅仅侧重单方面,并没有做到分类与回归的均衡。针对损失函数的设计,在注重硬样本的同时,也需要注重那些简单样本,做到分类与回归的平衡。
因为多任务学习的过程充满了不确定性,所以采用概率格式重新定制了样本加权的问题,使得每个样本特征可以有效地自动调整自身的样本权重。这里采用了令
由式(6)、式(7)可得:
设计的样本权重网络(sample weight network)由两层感知网络MLP(multiple layer perception)组成,MLP 的输入由分类损失、回归损失、IOU 以及置信度组成。倘若样本为负样本,则其IOU 以及置信度为0。其中分类损失以及回归损失在一定程度上可以反映预测的不确定性。如此便可以将每一维度的损失映射到更高维度的特征。这里使用函数将MLP的输入进行整合。
其中,、、、将四个输入转化为更有意义的表征,d为拼接后的特征,从样本的拼接特征中学习用于分类损失和回归损失的自适应权重。最后进行反向传播,反向传播过程中所有的样本损失进行了平均梯度下降并且反向传播利用了检测网络和样本加权网络来优化模型参数。
算法的整体框架依然采用的是SSD 的整体结构,沿用了STRFB 中的部分特征提取模块的替换,在兼顾速度的同时通过模拟人类视觉的感受野来增强网络对于细微特征的提取能力。其中在Conv4_3、Conv7_fc、Conv7_2双线性插值改变尺度后对其concat的结果插入信道交互机制,并将其传入Conv7_2 后的RFB(receptive field block)模块。这里不选择对Conv3 进行尺度变化融合是因为在实验中发现是否融入Conv3,mAP 没有多少变化,但是融入Conv3 会增加网络的计算量,故在最终的实验中未融入变化的Conv3 特征。中间的BN(batch normalization)层仍然保留,用以确保模型的收敛性,防止梯度爆炸的现象出现。此外,将网络中间的特征相互连接起来并加入信道交互机制。
信道交互模块其结构原理图如图7,其次需要将信道交互模块融入特征提取模块中。整体的算法结构如图8 所示。
图7 信道交互图Fig.7 Channel interaction
图8 整体算法结构图Fig.8 Block diagram of algorithm
本文算法整体上仍然属于轻量级的层次。首先,在网络层方面,仅仅只有16 层,相对于ResNet 的50 层、100 层或者是DenseNet上百层的网络少了很多层,降低了大量的计算复杂度。其次,在网络的修改方面,仅仅是对浅层特征进行了融合,并未加大计算量融合所有层特征,越深的卷积层,提取到的体征越少,对于整体的融合效果微乎其微反而会增加计算量。最后,相对于更轻量级的MobileNet 框架,精度有着大幅度的提升,因为MobileNet 算法框架面向的目标是移动端设备,所以在大幅度降低模型复杂度的同时也降低了精度。
本次实验选择了Pascal VOC 官方数据集以及自制的航拍数据集。VOC 数据集分为交通工具、房屋、动物、人共计20 小类(另加背景21 类)。自制航拍数据集分为交通工具、油罐、操场、十字路口共计12 小类(另加背景13 类)。因为训练所用的GPU 为12 GB显存,所以训练的batch-size 选择为32,这里训练的总轮数为所用的数据集图片张数除以所训练的batchsize,总迭代次数为250~300 间的随机数乘以训练的总轮数。初始学习率设置为0.01,学习衰减系数gamma 设置为0.1。因为本文的模型并没有选用预训练模型,为了避免损失率在训练开始就出现Nan的状况,选择将前1 000 次迭代选择作为预热阶段,同时在50 000、100 000、150 000、200 000 次迭代处分别设置了4 个学习率衰减点用以保证学习率的稳定下降。
本文提出的基于加权网络的算法在VOC2007+2012 的官方数据集上mAP 为81.2%,相比SSD 算法有4.0 个百分点的提升,相比FSSD 有0.4 个百分点的提升。在自制的航拍数据集中mAP 为82.3%。综合性能相较于SSD 系列的FSSD 以及DSSD,SENet 等有着综合性方面的进步。
首先比较的是不同值下,样本是否采取数据增强后的结果。因此分别令=3,5,7 进行实验,选取奇数的原因是需要padding 将全局池化的核撑开,故需要奇数的值,若值过大也有可能导致全局池化后得到的样本特征不足,得到了如表1 所示的结果。
表1 不同k 值在VOC2007+2012 下检测结果Table 1 Test results of different k under VOC2007+2012
对比表1 中的实验1 与实验2 可以发现,特征融合选用ele-sum 显然更加合适,对比表1 中的实验2 与实验3,发现在实验中倘若对所有卷积层加上信道交互模块,会导致网络臃肿,造成检测率下降的状况,因此最终仅选择在融合后的层中加上信道交互模块。对比不同值以及是否对样本采用数据增强,发现当且仅当=3 时,最终的结果为最优结果。检测精度虽然略微下降,但是在检测速度上有了较小的提升,综合性能略有进步。
接下来需要对比的是不同损失函数下算法UWN(unified weighted network)的检测结果,如表2 所示。首先可以直观地发现,平均精度有了小幅的提升。除此之外,从表3 中可以看出在平均精度提升的同时,FPS 仅有略微下降,综合性能仍然是较好的。
表2 不同损失函数在VOC2007+2012 下检测结果Table 2 Test results of different methods under VOC2007+2012
表3 不同检测算法在VOC2007+2012 下检测结果Table 3 Test results of different methods under VOC2007+2012
最后需要对比的是样本数据在不同增强方式下的检测精度,如表4 所示,扭曲长宽、翻转以及相关组合方案的平均精度均不如本文所提出的样本数据增强方式。
表4 样本数据在不同增强方式下的检测结果Table 4 Test results of sample data under different enhancement
实际应用中,选取了PASCAL VOC2007+2012 官方数据集以及自制的航拍数据集分别进行了模型的训练以及测试。从表3 最后两行可以看出,平均精度有小幅度提升的同时速度并没有下降太多。从图9官方数据集的检测结果以及图10 自制数据集的检测结果中可以发现,相比改进之前的算法,本文算法能够检测到的小目标个数以及检测框的精确度都有着明显的提升。
图9 不同算法在VOC 数据集上的对比结果Fig.9 Comparison results of different algorithms on VOC dataset
图10 不同算法在航拍数据集上的对比结果Fig.10 Comparison results of different algorithms on Aerial photography dataset
本文提出的是一种可以快速检测的轻量级目标检测算法,依然沿用了轻量级的VGG16 作为主体的backbone 并进行了部分特征提取层的替换。除此之外,对样本采取了不同于传统处理方法的样本增强操作。此外,对损失函数也采用了加权损失函数来同时兼顾难易样本,达到了在学习分类的同时学习回归任务的样本权重。在使用感受野模块加强特征提取的前提下采用了信道融合的方法,增加了检测精度且仅损失部分速度。在PASCAL VOC 数据集以及自制的航拍数据集中均有良好的表现,相较单一的特征融合系列FSSD 以及SENet有不少提升。