一种改进的SSD算法

2019-12-16 10:47祁世风廖小华
西南科技大学学报 2019年4期
关键词:尺度卷积精度

祁世风 蒋 勇 高 琳 廖小华

(西南科技大学计算机科学与技术学院 四川绵阳 621010)

目标检测在输入图像中找出感兴趣目标,并确定其位置和类别。目前,目标检测广泛应用于自动驾驶、智能视频监控、医疗辅助诊断等领域中,已经成为计算机视觉领域的一个研究热点[1-3]。

目标尺度变化问题是目标检测亟待解决的关键问题之一[4-5]。为检测不同尺度的目标,目前存在两种基本方法:(1)使用图像金字塔[6]。首先对原图像进行不同尺度的缩放以构成图像金字塔,然后将这些图像输入网络进行检测。这种方法虽然能取得不错的检测效果,但需要多次缩放图像,繁琐耗时,不利于实际应用。(2)利用卷积神经网络构建图像特征金字塔。Hong等[7]首先在图像上提取不同尺度的特征构成特征金字塔,然后将提取到的特征进行组合以完成对目标的预测。这种方法虽然能够充分提取到目标的位置信息,但由于搭建特征金字塔的过程中频繁使用下采样运算,使得细节信息丢失比较严重,影响检测结果。Liu等[8]在不同层次的特征图上预测不同尺度的目标,然后综合不同尺度上的检测结果得到最终检测结果。Lin等[9]从目标的上下文信息角度考虑,加强浅层特征和深层特征之间的信息融合,通过将高级语义特征与低级语义特征相结合,在不同尺度特征上生成了更多的语义特征,从而更好地完成目标检测任务。He等[10]提出了空间金字塔池化(spatial pyramid pooling),利用膨胀卷积有效地解决了卷积神经网络对图像重复提取特征的问题。Liu等[11]受Szegedy等[12]的启发,提出了多分支卷积层,将SSD算法的基础网络改进为三分支结构,而每个分支又由普通卷积和相同膨胀率的膨胀卷积串联构成,以此实现多尺度目标检测。

在SSD算法中,虽然浅层特征有助于检测小目标,但与深层特征相比,浅层特征存在语义信息少、感受野小等问题,导致小目标的检测效果并不理想,并且在网络训练过程中经过多层池化操作容易出现小目标特征消失的现象。此外,SSD算法只是在不同的特征图上进行预测,没有充分考虑到上下文信息。针对上述问题,文中提出了一种改进的SSD算法,该算法首先使用膨胀卷积对卷积层进行二次特征提取,然后引入密集连接以获得目标上下文信息,通过与多种主流算法在UA-DETRAC[13]数据集上的对比实验,验证了改进算法的有效性。

1 目标检测算法

1.1 算法概述

为了提取有效的目标特征以及捕捉充足的目标上下文信息,本文对SSD算法主要进行了以下3点改进:(1)去掉conv7_2之后的所有卷积层,并选取conv4_3,conv7,conv6_2和conv7_2等层作为输入层;(2)在4层输入层上分别添加3层不同膨胀率的膨胀卷积,各膨胀卷积层之间采用级联的方式从而进一步增大卷积层的感受野;(3)在输入层与膨胀卷积层之间使用密集连接,使得中间特征的神经元可以编码不同尺度的上下文信息,充分捕捉目标的多级特征。在输入层和膨胀卷积层中通过密集连接的方式(dense connection dilated convolution,DCD)构成了DCD模块,网络结构如图1所示。数据集输入网络后,首先对数据集进行预处理,然后将处理后的图像输送到DCD模块实现多尺度特征提取,最后送入检测器进行目标定位和目标分类。

图1 本文目标检测算法网络结构图Fig.1 Framework model of object detection algorithm

1.2 二次特征提取

针对SSD算法中存在浅层特征感受野小、特征提取不够充分的问题,本文在4层卷积层上分别级联3层不同膨胀率的膨胀卷积实现二次特征提取,提高目标的检测精度。

膨胀卷积可以在保持图像分辨率的前提下增大感受野,感受野越大,表明包含了更多的全局信息和丰富的语义信息。当膨胀率为d,卷积核大小为k×k时,膨胀卷积感受野r可以由下式计算:

使用膨胀卷积可以获得较大的感受野,而级联多个膨胀卷积层可以产生更大的感受野。假设两个膨胀卷积的感受野尺寸分别为r1,r2,则通过级联后,其感受野的大小可以由以下公式计算:

在本文中使用3×3大小的卷积核,膨胀率分别为3,6,12,采用级联方式之后膨胀卷积层感受野扩大至43×43。通过级联膨胀卷积,有效利用不同的感受野提取不同尺度的特征。

1.3 上下文信息

在一般情况下,卷积神经网络为了更高效地捕捉深层特征,采取加深网络或者加宽网络来使得模型能够很好地学习输入图像特征。但随着网络的加深和加宽,网络学习到的特征也会变得越来越抽象,忽略图像中的细节信息。DenseNet[14]从特征信息的角度考虑,通过密集连接实现了网络中层与层之间最大程度的信息传输,有效利用了特征并取得了较好的实验结果。

为了最大化获取目标的上下文信息,采用密集连接向后传递信息,具体连接方式如图1下半部分所示:(1)每一层膨胀卷积层(最后一层除外)的输出传送到其后面的所有膨胀卷积层;(2)DCD的输入层(conv4_3,fc7,conv6_2,conv7_2)也按同样方式往后传递信息;(3)增加连接层(concat),将本层特征与前层特征进行融合。

密集连接能够有效获取目标上下文信息,在减轻计算量的同时避免了信息丢失,这种方法对于遮挡、光照不均等情况具有显著的检测效果。

1.4 模型优化

在搭建网络模型时,在每一层膨胀卷积层以及连接层之前添加了1×1卷积进行降维。同时使用Relu层和Batch_norm层进行归一化,在减少网络训练时长的同时有助于提高网络的检测精度。

此外,为了减少网络训练过程中由于参数过量导致过拟合问题的发生,不同输入层连接的DCD模块使用相同的结构,实现权重共享。通过权重共享,减少了网络参数量,同时使得不同尺度的目标经历了具有相同表达能力的网络,充分利用了每一个特征。

最后,使用多任务损失函数对网络进行优化学习。损失函数由类别置信度损失Lconf和定位损失Lloc组成,其定义如下:

其中,x是输入的图像数据,c是置信度预测值,l是定位预测值,g是真实值,N是匹配的预测框的个数,经过交叉验证后,权重系数α设置为1。定位损失采用smoothL1函数对正样本进行误差计算,置信度误差采用softmax loss函数进行计算。

2 实验

2.1 实验数据

在UA-DETRAC数据集(简称UA数据集)上进行了实验。UA-DETRAC数据集是在中国北京和天津两座城市共24个不同的位置录制而成,一共包含了82 085张不同角度、不同天气及不同遮挡情况的图像,数据集包含四类目标,分别是汽车(car)、公交车(bus)、货车(van)和其他车型(others)。在实验中,从该数据集中选取65 668张作为训练数据,16 417张作为测试数据,并参照Pascal VOC 2007的数据格式制作成了对应的数据集。

2.2 软硬件以及参数设置

软硬件平台为:操作系统Ubuntu 16.04,Intel Xeon E5-1630V3@3.7 GHz四核处理器,16 GB内存,Nvidia GTX 1080Ti 11 GB显卡,在Caffe框架下使用Python编程语言实现。

通过大量实验发现:当膨胀率大于12时,特征会大幅度弱化并造成检测精度急剧下降的现象,因此本文使用膨胀率分别为3,6,12的3×3卷积核。

训练过程中,采用随机梯度下降法迭代更新权重参数,同时使用L2正则化减少过拟合,初始学习率为0.001,权重衰减系数为0.000 5,迭代次数设置为120 000次。

2.3 评价指标

在实验中,以平均精度(average precision,AP)以及平均精度均值(mean average precision,mAP)作为评价指标,其计算公式如下:

其中,PrecisionC是指类别为C的目标检测精度,TP表示正确检测出来的目标总数,FP表示被错误检测出来的目标总数,NC是指包含C类目标的图像总数,APC是用来分析C类目标检测效果的C类目标的平均检测精度,S表示类别数量,mAP为所有类别目标的平均精度之和的平均值,其值越高表示模型的检测效果越好。

2.4 验证DCD模块的有效性

为了验证DCD模块的有效性,本文分别做了含有DCD模块(+DCD)和没有DCD(-DCD)模块的实验,实验结果如表1所示。

表1 DCD模块有效性验证Table 1 DCD module validation

从表1的实验结果可知,添加DCD模块之后的算法,各类目标AP值以及mAP值均高于不含DCD模块的算法,表明DCD模块中的级联膨胀卷积可以利用逐渐递增的感受野提取目标多尺度特征,提高了特征的表达能力,使得网络提取的特征更为全面。

2.5 实验结果与分析

为了验证本文算法的有效性和保证实验的公平性,将UA数据集调整成320×320和512×512大小的图像进行实验,并分别与当前目标检测领域内的主流算法进行了对比。对比算法包括Faster RCNN[15],RefineDet[16],SSD及YOLOv3[17],实验结果如表2、表3所示。

表2 不同算法在320×320图像上的检测精度Table 2 Detection accuracy of different algorithms on 320×320 images

从表2、表3的对比数据可得,本文算法的mAP值均高于其他算法。在320×320大小的数据集上mAP值达到了88.6%,超越了其他四类算法。提高图像分辨率能够明显提升检测精度,高分辨率图像中的目标在一定程度上被放大,所以更容易被网络学习到。对比表1和表2的数据可以看出,Faster R-CNN算法的mAP值出现了变化,从28.7%提高到72.5%;RefineDet算法和SSD算法的mAP值也提高了7%~12%。反观本文算法检测精度保持平稳,表明本文算法在多尺度检测问题上具有更强的鲁棒性且对于输入图像尺度的变化不敏感。图2展示了各类算法在320×320模型上的测试结果。

表3 不同算法在512×512图像上的检测精度Table 3 Detection accuracy of different algorithms on 512×512 images

图2 中,SSD算法和YOLOv3算法在检测过程中没有准确地检测到目标,RefineDet算法存在重复检测和误检的现象。本文算法利用级联膨胀卷积层的方式获取了目标的多尺度特征,从而能更准确地检测到目标。

图2 多尺度测试结果对比图Fig.2 Comparison of the detection results of the multi-scale object

此外,本文还做了在遮挡、光照等情况下的对比实验。由于道路周边的绿色植被和建筑物容易对目标造成遮挡现象,这种现象会使目标信息部分丢失,从而影响检测的准确性。

图3 所示为在遮挡情况下的检测结果,Faster R-CNN算法、RefineDet算法和YOLOv3算法均出现了误检现象,本文算法使用密集连接的方法为目标增加了上下文信息,在遮挡情况下依然能检测到目标。图3展示的是各类算法在512×512模型上的测试结果。

图3 遮挡情况下的测试结果对比图Fig.3 Comparison of test results under occlusion

在复杂环境下,光照不均匀使场景图像出现光照过强和光照过暗的现象而无法辨认图像细节信息,导致目标检测难度剧增。图4中,Faster R-CNN算法出现了漏检和误检的现象,公交站牌被检测为others;SSD算法同样出现了漏检问题。本文算法通过密集连接膨胀卷积为目标添加了上下文信息,在光照不均匀的影响下仍然可以检测到目标。

图4 光照不均匀条件下的测试结果对比图Fig.4 Comparison of test results under uneven illumination conditions

3 结论

本文利用膨胀卷积和密集连接对SSD目标检测算法进行改进,实现了一种用于目标检测的深度学习算法。在UA数据集上与当前主流算法的对比测试表明,本文的改进算法能更好地适应目标的尺度变化,对遮挡及光照不均匀等复杂情况也具有一定的适应性。但是,文中搭建的卷积神经网络对于轻量级要求还有一定的差距,如何在保证检测精度的前提下优化网络模型、减少网络参数是今后研究的方向。

猜你喜欢
尺度卷积精度
热连轧机组粗轧机精度控制
基于3D-Winograd的快速卷积算法设计及FPGA实现
财产的五大尺度和五重应对
卷积神经网络的分析与设计
超高精度计时器——原子钟
从滤波器理解卷积
分析误差提精度
基于DSPIC33F微处理器的采集精度的提高
基于傅里叶域卷积表示的目标跟踪算法
宇宙的尺度