基于改进SSD轻量化的交通路口目标检测*

2022-10-11 12:33陈家栋
传感器与微系统 2022年10期
关键词:卷积损失样本

陈家栋, 雷 斌

(1.武汉科技大学 机械自动化学院,湖北 武汉 430081; 2.武汉科技大学 机器人智能系统研究院,湖北 武汉 430081)

0 引 言

近年来,汽车数量不断增加极大地方便了出行,但随之带来的交通拥堵、交通事故等问题也在逐渐增多,为解决这些交通难题和交通压力,智能交通系统应运而生[1]。车辆检测作为智能交通领域中核心问题之一,更是成为了研究的重点和热点。

随着计算量增大和深度学习的广泛使用,基于卷积神经网络(convolutional neural network,CNN)的检测算法已成为目标检测领域常用的算法。典型网络有:Fast R-CNN[2],Faster R-CNN[3],Mask R-CNN[4],YOLO[5],SSD(single shot multi-box detection)[6]。在上述众多算法中,SSD具有检测速度快、准确度高两大优点,是目前的检测性能相对较好的算法。本文也将采用该算法来进行交通目标的检测。但算法在小目标检测时效果不理想,会出现漏检的现象,并且由于计算和内存的限制,算法也很难以在嵌入式平台上直接应用。

为增强目标检测对小目标检测的准确性,文献[7]提出一种多目标检测框架,通过对高分辨率图像进行下采样,动态放大低分辨率的方法解决小目标精度不高的问题;文献[8]提出在SSD算法中引入转置卷积结构,使低分辨率高语义信息特征图与高分辨率低语义特征图相融合,从而提高小目标检测能力。但这些方法都是通过增加网络层数来提高小目标的检测率,使得网络变得复杂。为了缩小网络模型结构、减小计算量,文献[9]提出了一种轻量级的SSD网络,使用深度卷积神经网络(DCNN)和通道重排提取特征图的最小单元方法使算法可以用于嵌入式ARM设备上;文献[10]将SSD的前端网络替换成MobileNet网络模型,直接通过减少网络层数减小网络参数,使得计算速度加快。但在检测效果不是很好,检测率会有所下降。

因此,为实现算法能在硬件平台上有较高的检测率,本文提出一种改进SSD轻量化的车辆目标检测方法。用MobileNetV3网络替换SSD算法的前端网络VGG16,从而减小网络参数量和层数,提高处理速度并缩小模型大小;重新设计特征提取层采用上下特征层交叉融合方法提高算法在小目标检测上的不足;在处理损失方面将Focal Loss分类损失与广义并交比(generalized intersection over union,GIoU)回归损失融合,降低损失率从而提高准确率。本文所改进的算法将在自制使用无人机航拍的数据集上得到验证。

1 相关工作

1.1 SSD网络

Liu W在ECCV2016会议上首次提出单阶段目标检测算法SSD。该算法借鉴Faster-RCNN的Anchor Boxes机制,增加对不同大小形状物体的鲁棒性;借鉴YOLO的回归思想,使得SSD在检测速度快的同时保证了检测精度。此外,算法增加了多尺度特征属性图,用浅层网络检测小目标、用深层网络检测大目标,使检测率进一步提高。SSD的网络结构主要由两部分组成:前一部分是位于前端的DCNN VGG16,其目的是用于目标初步特征提取;后一部分是位于后端的多尺度特征检测网络,类似金字塔式的CNN组成,目的是将前端网络产生的特征层进行不同尺度条件下的特征提取。SSD网络结构图如图1所示,输入图片会经过大小不同的特征图分别为Conv4_3,Conv7,Conv8_2,Conv9_2,Conv10_2,Conv11_2上进行特征提取。不同特征图的尺寸和感受野不同,所对应的默认框也会不同,利用浅层特征图检测小目标,深层特征图检测大目标。经过6层大小不一特征图的特征提取,最终会得到8 732个初选特征框用于后续的分类和标定位置任务。

图1 SSD网络结构

SSD模型的损失函数是由定位和分类损失函数共同组成的,表达式如下

(1)

式中Lconf(x,c)为分类损失函数,采用SoftMax Loss;Lloc(x,l,g)为回归损失函数,采用Smooth L1 Loss;x为候选框与真实框相匹配的结果,若匹配则x=1,否则为0;N为候选框与真实框匹配的个数;c为类别置信度预测值;l为预测框位置偏移值;g为真实框与候选框的偏移值;α为回归损失的权重参数,通常为1。

1.2 MobileNetV3网络模型

近年来,随着智能应用设备的广泛应用,轻量化网络已成为当今研究的热点。传统的减轻网络方法是在已经训练好的模型上进行压缩,修改或删除部分网络参数,从而解决问题。但轻量化模型是从改变网络结构出发,重新设计出更高效的网络计算方式,从而使网络参数减少的同时,不损失网络的性能。现阶段已成功实验的轻量化网络有:MobileNet系列,ShuffleNet系列,Xception等,使用组卷积、1×1卷积等技术减少网络计算量的同时,尽可能地保证网络的精度。

MobileNetV3是在MobileNetV2的基础上进行了4点改进,使算法性能和运行速度进一步提高。首先,MobileNetV3借鉴了MnasNet网络的SE(squeeze and excitation)结构,将原来SE结构的通道数目更改为原来的1/4,即提高了精度同时还没有增加时间消耗;其二,对尾部结构进行了修改,将特征图大小由7×7降到了1×1,完成后在用1×1卷积提高维度,从而减少7×7倍数的计算量;其三,为进一步提高检测速度,修改了前端卷积核的通道数从原来的32修改为现在的16,最后,使用H-swish函数替换了MobileNetV2中的swish函数,减少计算耗时提高网络模型效率。

为应对不同的工作环境和满足不同实验平台的需要,MobileNetV3网络通过构造不同的网络层数和参数生成了两种网络结构:一种是Large网络模式,其网络层数为20层,检测精度高但会造成内存消耗过大,增加计算量;另一种是Small模式共有16层。本文使用的是MobileNetV3的Small版本。结构参数如表1所示,Input和Out分别为输入分辨率和输出通道;Operator是卷积层,其中Conv2d是标准卷积,Bneck是MobileNetV3网络的骨架卷积层;Exp Size为膨胀参数;SE为改进后的SE结构,若SE=T时,则在该卷积层使用,否则不使用;NL代表了激活函数的种类,当为HS时模型使用的H-swish函数,反之使用ReLU函数;反之使用ReLU函数;s为步长。

表1 MobileNetV3-small网络参数

1.3 GIoU损失函数

在目标检测领域边界回归交并比(intersection over union,IoU)值是作为评估算法的性能指标,但大多检测框架中没有使用IoU去优化损失,而是直接使用Smooth L这些函数来计算损失。相比损失函数来说,IoU直接用于定位损失效果会好一些。但IoU作为损失函数时会出现两个问题:一是预测框与真实框没有重叠时,对应的IoU为零,反向传播梯度为零,无法优化;二是预测与真实框在多个不同方向上重叠,虽IoU值完全相等,但不能准确反映框的重合度大小。因此,GIoU的提出成功解决了IoU的难题,其构造如图2所示。

图2 GIoU构造

图2中A为预测框、B为真实框、最小封闭框C(包含A,B,d1,d2),IoU,GIoU计算公式如下

(2)

(3)

式(3)中减数部分分子为最小封闭框不包含A或者B的部分。GIoU作为一个距离度量指标,其损失函数LGIoU计算如式(4)所示

LGIoU=1-GIoU

(4)

由上述公式可知,GIoU≤IoU,且IoU∈[0,1],GIoU∈ [-1,1]。当预测框与真实框完全重合时GIoU=IoU=1,当预测框与真实框重合越来越少时,IoU趋近0,GIoU越接近-1。因此,GIoU解决了IoU无法反映重叠方式、无法优化IoU为0时的问题,能更好地反映两框之间的重合度。

1.4 Focal Loss损失函数

在现实目标检测任务中,负样本的数量即背景类往往会占很大比重。虽然负样本的损失较小,但由于大量负样本数据的存在会使网络在训练过程中产生干扰,使正负样本数量失衡,从而导致模型训练的效果不好。SSD算法通常是采用非极大值抑制(non-maximum suppression,NMS)困难负样本挖掘(hard negative mining)算法选取负样本,使正负样本按1︰3比例进行分类,在一定程度上起到抑制损失的作用。但NMS在训练时主要解决难分类的样本,而忽略了损失较小的易分类的样本。为解决在训练过程中正负样本不平衡的问题,本文使用了Lin T Y等人提出的Focal Loss替换原SSD算法中分类损失的SoftMax Loss,其损失函数如下

(5)

传统的交叉熵损失没有添加权重衰减项参数,导致模型对负样本学习过多,使正样本无法得到有效训练。而Focal Loss引入了两个参数α和γ,分别起到了调整正负样本的权重和难易分类样本的权重的作用,有效改善了正负样本不平衡的问题。通过大量实验得到,当γ=1,α=0.25时效果最好。

2 改进检测算法

本文改进SSD算法共3个方面:一是用轻量化网络模型MobileNetV3替换原SSD算法的前端网络VGG16,构建出新的检测网络模型MobileNetV3—SSD(M3—SSD);二是重新设计了特征模块将原来深层特征与浅层特征交叉融合,进一步解决传统的SSD算法对于小尺寸物体的检测效果比较差的问题;三是使用新的损失函数替换了原SSD算法中的分类、定位回归损失函数,从而减小精度损失,提高算法的准确率。设计新网络模型如图3所示。

图3 改进M3—SSD网络结构

2.1 改进SSD前端网络

由图3可以看出,M3-SSD是采用前端网络MobileNetV3去除最后一层用于分类的全连接层作为基础网络与SSD模型中的多尺度特征层相结合构造成M3—SSD网络。MobileNetV3替换原SSD中前端网络VGG16并重新形成新的特征提取层,其提取默认框的6层分别为Conv10,Conv15,Conv17_2,Conv18_2,Conv19_2,Conv20_2。与原SSD模型不同的是M3—SSD第一个用于多尺度检测的特征图大小采用的是19×19,其图上特征信息比38×38更加充分,故M3—SSD的特征图大小为19×19,10×10,5×5,3×3,2×2,1×1。

M3—SSD网络模型结合了MobileNetV3和SSD两种类型网络的优势,不仅保持原有SSD网络结构采用不同尺度的特征图来做预测,提高预测效率和准确度,而且还通过添加MobileNetV3网络减少冗余参数和剔除多余卷积层,进一步减少计算量,降低硬件内存资源消耗,有利于缩短训练时间,改善模型性能。

2.2 改进特征提取层

为解决原SSD算法的浅层特征提取信息不充分导致小目标检测性能不理想的问题,本文借鉴DSSD模型内Top-Down的特征融合方式,设计了将额外新增的特征提取层进行交叉融合模块,使特征信息更加全面的表达出来。采用相邻特征层交叉融合,与Top-Down的特征融合不同的是只在额外增加层上进行融合,没有将所有特征层进行上下融合,一方面减少了计算量,另一个方面保留了特征信息丰富的特征层。相比较而言,本文所使用的融合方式产生的计算量相对少,损失一定的计算速度的同时大大提高了检测精度。

在M3—SSD网络中前2层特征图(Conv10和Conv15)在轻量化网络MobileNetV3中提取,其特征信息丰富也可直接用于预测。而将中间新添加的4层特征提取层运用特征融合手段两两交叉融合生成,即Conv17_2与Conv18_2特征融合得到新的5×5×512,Conv18_2与Conv19_2特征融合得到新的3×3×512,Conv19_2与Conv20_2特征融合得到新的2×2×512,如图4所示。

图4 特征融合模块

由图4可以看出,特征图Conv18_2经过2×2×512反卷积层、3×3×512的卷积层,批量归一化(BN)后与特征图Conv17_2经过3×3×512的卷积,BN、ReLU函数和3×3×512的卷积后融合得到的特征图进行通道相连,在通过1×1卷积升维,BN和ReLU函数后得到新的特征图Conv17_2。模块加了3个BN和3个3×3卷积,是为了起缓冲的作用,防止梯度对主干网络影响太剧烈,保证网络的稳定性。通过在额外层添加特征融合模块能够充分利用上下文语义信息,提升算法的性能,在速度损失不大的情况下,提高了算法的检测精度。

2.3 损失函数的改进

本文将GIoU损失函数和Focal Loss损失函数同时应用于改进特征层的M3—SSD算法中。将(1—GIoU)作为边界框回归损失函数代替原来的回归损失函数;交叉熵损失为基础的Focal Loss替换SoftMax Loss作为分类损失函数。改进后的算法不仅平衡了易分样本与难分样本的损失占比,还有效改善了IoU存在的问题。最终损失函数如下

(6)

3 实验与结果

3.1 数据采集与准备

在建立无人机航拍交通路通的数据集时,首先用OpenCV开发库从录像视频文件中按20帧率来截取图片,保存图片格式为.jpg,共形成4 500张图片。采集的视频中分为汽车(car)和其他(others)两项,用LabelImg工具对图像进行标记制成VOC格式数据集,并形成相对应的.xml配置文件,如图5所示。

图5 LabelImg标注的数据集

3.2 实验平台与参数配置

本文实验设备采用的处理器为AMD7,显卡采用GTX1660Ti,内存8 GB的台式机。实验系统所用环境为Ubuntu 16.04,CUDA10.0,cuDNN10.1,使用的深度学习框架为Pytorch 0.4.1,开发语言为Python 3.5。算法在训练时优化器选用随机梯度下降,其参数选择动量为0.9,权重衰减为0.000 5, Gamma为0.1,初始学习率设置为0.01,训练时动态调整学习率;训练参数中Num Workers为0,Debug Steps为100,Batch Size设置为8,Max Epoch设置为200。图6为算法在训练时损失值的情况。

图6 算法训练情况

3.3 实验结果验证

使用相同的硬件设备和数据集对SSD,ShuffleNet-SSD(S-SSD)和本文MobileNetV3—SSD(M3—SSD)算法进行实验对比,由表2可知,不同的算法在车辆目标检测时,检测的准确率、帧率、模型大小都各不一样。原SSD模型的前端网络是VGG16,其参数比较多,模型较大有105.1 M,FPS只有18,没有达到人眼的刷新频率24 FPS,故不能满足检测的实时性要求;ShuffleNet作为另一种轻量化网络模型在替换SSD前端网络后,检测速度有了一定的提升,可以满足实时性要求,但相比SSD检测率下降了5.7 %;而本文M3—SSD算法其FPS和mAP分别为45和0.625,在保证满足实时性要求的同时模型的检测精度轻微下降了3.3 %,表现出一定的稳定性与精确性。图7为不同网络模型检测结果。

表2 不同网络模型性能比较

图7 不同模型检测结果

表3为改进策略前后对检测效果的影响,实验均以自制数据集作为训练集和测试集。通过实验数据可知,由于改进特征层采用交叉融合方法使网络模型参数量增大,相比M3—SSD模型FPS变小只有26,但在检测率上有明显的提高,增加了2.4个百分点。

表3 改进策略验证

图8为不同路段拍摄,改进模型前后的效果图。其中,(a),(c),(e),(g)为M3—SSD算法,(b),(d),(f),(h)为改进后的结果。改进之后算法的漏检较少,且对于一些小目标或有遮挡的目标也能第一时间检测出来。

图8 改进策略前后检测对比

4 结束语

本文针对资源有限的硬件系统平台下的车辆目标检测技术进行了研究。设计以MobileNetV3为前端基础网络的SSD模型框架实现了轻量化网络,M3—SSD网络具有计算量低、参数少、资源损耗低、准确率和实时性高等诸多特点。此外,通过对算法的特征提取层进行优化,实现将高分辨率低语义信息特征图与低分辨率高语义信息特征图交叉融合,提高SSD算法的小目标检测能力。通过自制数据集的实验证明了,本文提出算法在车辆检测任务中是具有可行性和实用性的。本文研究也为后续无人机搭载检测设备航拍交通路口,实现无人机处理车辆违法行为、车牌识别、车辆信息融合等更具体的应用奠定了基础。

猜你喜欢
卷积损失样本
洪涝造成孟加拉损失25.4万吨大米
基于全卷积神经网络的猪背膘厚快速准确测定
基于FPGA的卷积神经网络加速优化方法
基于图像处理与卷积神经网络的零件识别
基于深度卷积网络与空洞卷积融合的人群计数
两败俱伤
规划·样本
随机微分方程的样本Lyapunov二次型估计
损失
基于支持向量机的测厚仪CS值电压漂移故障判定及处理