周 凡,朴 燕,秦晓伟
长春理工大学 电子信息工程学院,长春 130022
在人工智能与各行业深度不断融合的大背景下,各个领域都能看到其被应用的场景,像智能农业、生物识别[1]、智慧医疗[2]等热门领域。得益于计算机视觉与深度学习[3]的快速发展,有大量的基于神经网络的相关目标检测算法被提出和不断改进。
SSD(Single Shot Multibox Detector,SSD)[4]算法所代表的单阶段检测算法在实践应用方面可操作性更高。端到端的学习模型将回归模型运用于检测问题上,省去了两阶段网络中构建候选区域这一操作。但是与两阶段检测算法相比,在小目标或被遮挡的弱目标识别上检测精度要低一些。针对这一问题,目前已经有很多学者对SSD 进行了改进。例如Zhu 等[5]提出的FD-SSD模型、Li 等[6]提出的 FSSD 模型、Fu 等[7]提出的 DSSD 模型、Jeong等[8]提出的RSSD模型等。这些模型的改进思路大致相同,都利用了反卷积和特征融合的方式增强底层卷积网络的语义信息,并替换特征提取更强的基础网络以保证特征信息能够在传播过程中得以更好保留。不过在精度提高的同时,往往降低了计算效率。因此本文采取相应的措施以平衡精度与速度之间的关系。故本文提出一种基于改进Inception-Dense 基础网络结合特征融合的方法,对SSD进行针对小目标检测的改进。
(1)设计了参数更少、特征提取更精细的Inception-Dense网络。替换了原VGG16网络;减少了由于小目标在原图中占比较小的情况下,经过前馈网络的层层传播(卷积、池化操作);在深层卷积层上保留的特征信息越来越少甚至消失,导致真实目标与先验框难于匹配,降低检测精度的情况发生。
(2)增加不同尺度的feature map 输出。原有算法中针对小目标的feature map只有低层卷积层Conv4_3,本文在替换基础网络的前提下使用两个不同尺度的低层卷积层进行小目标检测,以此来实现检测信息的多元化。
(3)根据数据集的特性,重新调整了原有的特征框映射机制,使得特征框映射更加准确。
(4)借鉴特征金字塔网络(Feature Pyramid Networks,FPN)检测算法思想,在不同尺寸的feature map之间进行特征融合。
SSD 作为典型的单阶段模型,如图1 所示,原网络的构建思想并不复杂:(1)位于前端的特征提取结构(基础网络)。SSD采用了VGG 16的前5层,并用卷积层替换了原有的FC6 和FC7。(2)位于后端的是新增加的级联卷积层,作用是对基础网络产生的特征层进行不同尺度的特征提取。在整个模型中,输入图像在进入网络之后不断向前传播,在此过程中生成了不同分辨率和语义抽象层次[9]的特征图。
SSD希望在低层次卷积层输出的高分辨率、低语义信息的特征图上进行小目标的分类和边界回归,在高层次卷积层输出的低分辨率、高语义信息的特征图上进行大目标的分类和边界回归。因为低层卷积层的分辨率高,几何细节信息表达能力强,小目标也不会丢失太多的位置信息。高层卷积层的大目标因为在图片中的占比大,加上语义信息丰富,所以也能够精确地定位和识别。这个思路是正确的,但是存在明显的问题,就是低层卷积层中的小目标即使经过少许的卷积和池化操作,也会丢失掉足够的特征信息以至于影响识别结果,降低检测精度,故在小目标识别上没有达到预期的效果。参照式(1)观察到当k很大时,Φn-k代表的低层次卷积特征图的抽象程度满足不了检测的精度。其中Φn为第n层特征图,tn(·)为根据第n层特征图运算得到的目标检测结果的函数,D为最终检测的结果。公式如下[4]:
纵观近几年神经网络的发展,研究人员倾向于加深网络的深度来提高识别精度,但同时会带来庞大的计算消耗和过拟合等问题。inception 结构正是受到生物神经系统中广泛稀疏连接的方式及NIN(Network In Network)思想的启发,尝试将卷积结构转化为稀疏连接。但并非随机的稀疏连接就能达到理想效果,因为计算机的高计算性能在非均匀数据下无法得到保证。所以inception结构[10-11]采取了相应的措施来实现密集成分近似最优的局部稀疏结构。如图2(a),首先采用了1×1、3×3、5×5大小的卷积核来提取特征,以对应不同级别的特征图片。原理参照图2(b),图像中突出部分的尺寸存在着差别。例如每张图像中目标(狗)所占据的比例不同,从左到右所占据的区域依次减少。故由于信息位置的差异,进行恰当的卷积就比较困难。信息分布更全局性的图像偏好较大的卷积核,信息分布比较局部的信息偏好较小的卷积核。而在同一层上并联不同尺寸的滤波器就可以解决这一问题,网络会因此变宽。同时为了降低5×5卷积核带来的过多的计算消耗,inception后期的结构中加入了1×1 卷积进行降维。1×1 卷积也能够在保持原结构的前提下增强非线性。最后将相同维度的特征进行跨通道的聚合。通过上述inception 结构的操作就可以得到图像更好的表征,检测精度由此得到提高。
图1 SSD模型结构
inception 网络(GoogLeNet)[12]正是采用模块化的inception结构,将不同的子结构层叠在一起。从2014年被提出之后,陆续地提出了多个版本的inception 网络:Inception V1、V2、V3、V4以及结合残差模块的Inception-ResNet V1、V2。
本部分对改进模型的理论依据、构建思路及实现方法进行必要的解释说明和推导。
替换特征提取结构是改进SSD 各类方法中常见的做法,例如替换成ResNet[13]、DenseNet[14]等新的特征提取网络。此外,为了将网络部署在移动嵌入式设备上,将基础网络替换成SqueezeNet 等轻量化网络,使CNN脱离实验室的限制,更方便地应用于移动端。
本文选用了Inception-ResNet-V2为模型,并对其做了一些改进。把原有的Inception-ResNet-V2 网络截取到Inception-ResNet-C 模块处,并将原网络中的残差模块替换成了密集模块。通过查阅研究文献[14]发现,如式(2)所示,残差模块分为两部分H(x)与x。即使在训练过程中去除掉H(x),只保留x(残差块),网络依旧会保存较好的精度。这是因为x(残差块)才是梯度的主要来源,所以在训练过程中ResNet 并不能充分地利用计算资源,有浪费算力的情况。故本文借鉴了Huang等人在2017年提出的DenseNe(t密集网络)。
如图3所示,DenseNet与ResNet都建立起了前馈网络中后层与前层的连接。但是DenseNet连接方式更加稠密,建立了每一层与前面所有层的连接。也就是说每个层都会接受前面所有层作为其额外的输入,连接数量更加庞大。每一层的输入计算公式为:
其中,[x0,x1,…,xl-1]是指0…l-1 层中产生的特征映射。这里l层与l-1 层之间可能实际上包含多个卷积层。除此之外,DenseNet在建立层与层之间的连接方式上也有区别。ResNet 是通过元素级相加(add 操作)。DenseNet是在维度上相加(concat操作),这样既保持了ReseNet 中减轻梯度消失和加强特征传递和效率的特性,concat操作还能够实现更加原始的特征重用。
图3 残差模块与密集模块结构示意图
图4中改进的Inception-Dense特征提取结构在参数相对较少的情况下还能保持优秀的精确度,这得益于inception模块与dense模块的特性。在保证网络速率方面:inception模块中由稀疏连接、卷积分解与1×1降维卷积来保证计算的速率。但本文经过实验表明:计算推导中的n×n卷积都可以分解成一个1×n和一个n×1。不过在网络前期,使用filter 分解会造成精度的轻微降低。故本文只在改进结构的中后期运用此操作。而dense模块中的稠密连接方式极大地缩短了前层与后层的连接,提升了层间信息的流动,故每一层产生的特征图相比其他网络少了很多,计算量由此得到充分地减少。除此之外,本文在构建网络的时候,在每个卷积层中都增加了BN层。同时严格控制了各层输出的维度,并没有512、1 024那样大数量的维度设置。也没有设置维度骤增骤减的连接方式,避免对层的压缩过大,丢失信息,导致网络表达的瓶颈。在dense 块中的学习率k也设置为12,以此保证网络宽度不会过宽。密集模块中如果将每个函数Hl产生k个特征图作为输出,则第l层的输入维度为k×(l-1)+k0。其中k0是输入图像的维度,k是学习率。
在提升检测精度方面:通过2.2节的详细介绍可知,inception 结构包括多个分支,分别对应不同的感受野,同时不同感受野的特征信息最终通过concat 操作进行特征融合。而dense 模块对比于普通卷积网络,它的稠密连接与concat 操作可以融合、利用更多低层次的特征,强化了特征的传播和复用。除此之外,inception 结构与dense结构都有一个共同的优点,即减少计算参数,减少梯度弥散,有利于深层网络的构建。而梯度更新就是用来更新和计算影响模型训练和模型输出的网络参数,调整网络的学习使网络逼近或达到其最优值,故在检测精度方面的影响是巨大的。
图4 Inception-Dense模型示意图
图5(a)为斯坦福大学讲解梯度传播的简化说明图。在神经网络中,梯度的传播分为前向传播和后向传播。传播时的计算过程遵循链式求导法则。图中绿色和红色箭头分别代表梯度的前向和后向传播过程。假设L为代价函数,x、y分别为输入。从图中可以清晰地理解:每一部分的梯度为最终梯度与局部梯度的乘积,即而将此思想代入到如图5(b)所构建一个简单的BP网络时,设w1,w2…为权重,b1,b2…为偏置量,L为代价函数。其中神经元输出之后需要经过激活函数sigmod:σ,则输出为ai=σ(zi)。进而zi+1=wi+1×ai+bi+1就代表下一层的加权输入。根据链式求导法计算出隐藏神经元的梯度,如式(4)所示:
图5 梯度传播和简单BP网络示意图
然后根据sigmod函数导数的图像,它的导数在1/4时达到最高。若使用零均值单位方差的正态分布来进行权重的初始化操作,那么所有的权重都会满足,故wiσ′(zi)<1/4。又因为每一部分的梯度为最终梯度与局部梯度的乘积,则神经网络中浅层上的梯度来自于深层梯度的连乘。而通过上文的推算可知,权重的连乘会导致指数下降。因此梯度在进行反向传播的时候,即使回传到了第一层,但是由于梯度严重地衰减甚至无限接近于0,导致前层神经元权重更新缓慢,无法学习,大幅降低网络的识别精度。这就是所谓的梯度弥散现象。
此时如图6 构建了一个两层的denseblock,结构与残差网络有些相似,但是存在着差别。通过链式求导法则,计算从L反向传播到l1梯度如式(5)所示:
其中,concat 为通道数相加操作。Wconcat1 表示在W(权值矩阵)与一个l1的尺寸大小且全为1 矩阵进行维度相加。即表示当梯度在此结构中进行反向传播的时候,两层的denseblock 可以通过右侧的短连接结构,将深层的梯度直接通过维度相加的方式,添加到了浅层中,使浅层中的权值可以得到很好的训练。而若是在多层的denseblock 结构中,如图3(b)所示,每一层的梯度都是前面几层梯度的加乘,故密集结构使梯度在反向传播的过程中避免了弥散、消失,检测精度由此得到有效的提高。
图6 两层DenseNet结构示意图
此外,dense结构和inception结构中还有BN层,BN通过规范化输入数据改变数据分布,从而在梯度的前传过程中消除弥散现象。两者的结合使得梯度在前传和后传的过程中都极大化避免了过度衰减甚至弥散的现象,故网络得到很好地训练与学习,从而检测精度得到毋庸置疑地提升。
经过2.1节的介绍,在多尺度预测的策略设置上,原SSD网络虽存在低层卷积层缺乏足够的语义信息,导致降低小目标检测精度的缺陷,但本文通过更换特征提取结构以及构建特征融合模块的操作,增强了不同层次之间特征的融合与复用,可以极大程度地增加低层卷积层的语义信息。故可沿用原SSD的多尺度策略。
在Kitti数据集中,交通场景下的行人与非机动车属于小尺寸物体。因此参照图4 与图8,本文选取低层卷积层中DenseBlock1、Reduction-A、DenseBlock2、Reduction-B这四层输出的特征图对这两个类别进行检测实验。选取的4 个低层卷积层以及与原SSD 中Conv4_3在特征提取上的精度对比如表1所示。由结果可见,通过改进特征提取结构与特征融合手段之后,增加了检测信息的丰富程度和低层卷积层的语义信息,检测精度得到了有效提高。但在保证精度的前提下,出于对检测速度的考量,若再增加不同的尺度进行预测就意味着增加相应的计算成本。故本文只选用了Block-1 与Block-2之后输出的两个尺度(75×75、37×37)的特征图进行小目标预测,没有选择更多的特征图。加上原SSD网络设置的对中大目标进行检测的特征图尺度,本文一共选用了{75×75,37×37,19×19,10×10,5×5,3×3,1×1}7 个尺度,覆盖了各类尺度的目标检测。
表1 低层卷积层特征提取效果对比
本文借鉴特征金字塔[15(]FPN)的思想,通过反卷积操作将语义信息强的低分辨率特征图映射为高分辨率特征图,通过元素相加实现特征融合。如图7 所示,传统的FPN算法左侧bottom-up结构为特征提取网络的卷积过程。特征图的尺寸自下而上逐渐减小,语义信息逐渐增强。右侧是top-down结构,自上而下地对左侧特征层进行上采样和融合。
图7 FPN算法结构图
图中“⊕”为融合单元,其结构如标注框内所示。先对上层特征层进行双线性插值的上采样,而后与左侧经过1×1 的卷积操作的特征层直接相加。相加完成后经过一个3×3 的卷积操作,去除混叠效应之后输出鲁棒性更强且精准度更高的特征图。输出的特征图公式为式(6):
其中,φn为第n个经过FPN结构融合之后的特征图;g为FPN结构运算函数;f为卷积操作,右上角标代表卷积核的尺寸;v代表双线性插值函数;Fn代表特征提取结构中的第n层特征图。
如图8 所示。Inception-Dense-SSD 模型与原SSD模型在结构设置上都是由特征提取结构和多尺寸检测两部分构成。本文在多尺寸检测的部分,增加了改进的FPN 特征融合模块。这是考虑到原SSD 对于大目标的检测能力是比较优异的,再加上已经替换了精度更高的特征提取结构,为了不增加计算冗余,故采用了跳跃连接的改进手段。即对网络中的Block-3、Conv6层不进行上采样、融合等操作,仅针对中小目标检测的Block-1、Block-2与Conv7层进行与高层卷积层的特征融合。
通过上述的措施,可以在保证计算效率的前提下,既能将低层卷积层几何表征能力强的优势保留,又能融合到高层卷积层中完善的语义信息,对中小目标的检测能力有着极大的提升。
图8 Inception-Dense-SSD模型示意图
在神经网络中,图像经过每一层会输出不同尺寸的特征图。图中的特征信息与目标之间的对应关系是由网络设置的默认框映射机制决定的。因此对网络模型进行改进的同时也需要相应地重新设置默认框映射机制。故计算公式为式(7):
其中,m为进行预测的特征图个数,此处m=7。sk为默认框与输入图像的尺寸比例。smin与smax为设置比例的最小值及最大值。本文将Block-1 和Block-2 单独设置为0.08与0.15。smin设置为0.2,smax设置为0.8.则7 个特征图上默认框的尺度系数分别为(0.04,0.08,0.15,0.35,0.55,0.75,0.95)。而本文输入图像的大小为300×300,与尺度系数相乘得到7 个特征图对应的默认框尺度为(15,24,45,105,175,225,285)。
除了尺寸系数,默认框的大小还与宽高比有关。实际尺寸的计算公式如式(8):
由于网络的预处理机制,输入图片会转化成300×300。而训练用Kitti 数据集中的图片大部分都是使用相机拍出来的,比较宽(原尺寸1 200×300),故实际的真实框会窄一点。而扁长形的汽车目标占多数,行人目标也基本上是瘦高型的。综上设置的长宽比为{1,2,3,1/3,1/4}。
实验的软硬件环境为深度学习框架TensorFlow,Windows Server2016 系统,GPU 显卡型号为 NVIDIAGTX1080ti-12G。
选择Kitti数据集中随机打乱的7 481张图片作为训练集,7 581 张图片作为测试集,并将类别进行精简,相似的类别进行合并之后,共机动车、非机动车、行人3类。
4.2.1 改进模型与相关SSD模型的性能对比
由表2 可以看出,SSD512 由于改变了输入图像的尺寸,使得图像在前馈网络进行层层传递的时候仍可以在深层卷积层中保留一些细节信息。mAP(平均精度)和各类别的单独精度都有所提升。但是尺寸变大,参数也会相应地增加,因此速度下降到了原速度的50%左右。而DSSD321同样也在mAP和小目标识别精度上得到了提高,但是采取的特征融合方式比较低效,因此时间效率低,并不适用于实时检测的应用范畴。图9中黄色框代表输入图像中的漏检目标。通过比较与SSD512、DSSD算法的检测结果,本文提出的Inception-Dense-SSD模型在漏检的情况上有较好的改善,检测出了更多的中小目标,且计算出的概率值也更高。
表2 Kitti数据集下SSD相关算法性能对比
图9 Kitti数据集检测结果1
4.2.2 改进模型与其他检测的性能对比
由表3可以看出,两阶段中具有代表性的FPN-FasterRCNN模型的精度最高,但其速度无法满足最基本的实时性要求。而本文的改进模型与YOLO-V3 相比,识别率在非机动车和行人小目标上的AP值提升在1个百分点左右,mAP的提升在2个百分点左右。这是由于YOLOV3[16]采用了提取效果优异的DarkNet-53,将分类器替换成Logistic loss[17]且每个ground truth 只匹配一个先验框,再结合FPN 算法,使得小目标识别得到了极大地提高。但是它的弱势在于大目标识别上并没有得到相同水平的提高,因此本文算法在大目标识别上取得了优势。再加上本文算法中应用了inception网络稀疏连接,比ResNet更快更优的dense模块以及其他限制操作,使得在FPS 这个评价指标上优势更加明显。故可以得出本文提出的Inception-Dense-SSD 模型在计算精度与实时性之间达到了更加优异的表现与平衡。图10中绿色框代表尺寸过小且在被大面积遮挡情况下导致漏检的目标,可以看出YOLO-V3 与本文模型在小目标识别上表现都相当出色,但是在后期还需要在被遮挡目标上做出改进,增强目标在尺寸变形、光影变化、大面积遮挡情况下的识别精度。
表3 Kitti数据集下本文算法与主流算法性能对比
图10 Kitti数据集检测结果2
本文首先阐述了SSD 及相关网络的理论基础。然后详细解释了工作的思路及成果:吸取了inception模块中稀疏连接与密集模块中密集连接的研究思路,将两种连接思路相结合提出了Inception-Dense结构,保证了该特征提取结构的速度与精度。在多尺度检测部分,借鉴并改进了FPN的特征融合模块,重点加强对中小目标的检测能力,并且对默认框映射机制的重新设定也使得检测结果更加精确。实践表明,本文提出的检测模型的精度相对于原SSD模型有着很大的提升,mAP提升了11个百分点。FPS从原来的39提升到了54。在未来的研究工作中,将继续改进网络模型,增强特征信息的共享,提高计算效率,使得速度与精度达到优异的平衡。