融合GIoU和Focal loss的YOLOv3目标检测算法

2020-12-26 02:57邹承明薛榕刚
计算机工程与应用 2020年24期
关键词:集上损失样本

邹承明,薛榕刚

1.交通物联网湖北省重点实验室,武汉430070

2.武汉理工大学 计算机科学与技术学院,武汉430070

3.鹏程实验室,广东 深圳518000

1 引言

在生产生活中,需要机器能够对图像中的物体进行分类并定位,这就需要用到目标检测技术。目标检测技术在工业、安防、军事、人脸识别[1]、自动驾驶[2-3]等领域有着极大的应用前景及研究价值,也吸引了越来越多学者们的关注。当前,目标检测方法研究已取得较大进展,检测精度及速度在不断提高。但是,由于观测角度、遮挡、光照以及目标外观形状、尺度的不同等因素影响,目标检测的精度仍有很大的提升空间。

目标检测通常包括目标分类和目标定位两个任务,传统的目标检测模型分为三个步骤:选取特征区域、特征提取和目标分类[4]。Felzenszwalb 等人[5]提出的多尺度形变部件模型(Deformable Part Model,DPM)充分利用HOG[6](Histogram of Orientation Gradient)和支持向量机(Support Vector Machine,SVM)的优势,在图像处理、人脸识别等任务上取得了重要突破。但是其基于滑动窗口的区域选择策略会导致大量的冗余计算,且使用手工特征无法表征所有情况下的物体特征,鲁棒性较差[7]。随着深度学习的发展,R-CNN系列算法[8-11]在目标检测领域取得极大的成功。R-CNN系列算法采用RPN(Region Proposal Network)的方法来得到特征区域,这种方法在很大程度上克服了采用滑动窗口所带来的计算冗余。同时,使用深度学习的方法对目标区域提取特征,避免了使用人工特征带来的一些缺陷,最后使用分类器进行分类,识别出检测框中物体的类别。虽然RCNN 系列算法以及R-FCN[12]、SSP-net[13]等方法识别精度有了很大提高,但检测速度较慢,难以达到实时性的要求。

近年来,实时目标检测方法的研究有了较大突破并在工业领域及实际应用场景中发挥了很好的检测效果[14]。以YOLO[15-17]、SSD[18]为代表的单阶段检测方法,采用基于深度学习的回归方法进行目标检测,从图像中直接获得边界框及目标种类。SSD算法在VOC2007数据集上的mAP 可以达到74.3%,检测速度达到46 帧/s。YOLOv2 算法在VOC2007 数据集上,保持检测速度为40 帧/s 的情况下mAP 能够达到78.6%。YOLOv3 算法在COCO数据集上mAP达到57.9%(IoU=0.5)的情况下能够够保持20 帧/s的检测速度。

当前,目标检测的优化方向包括网络结构、IoU(Intersection over Union)、损失函数、非极大抑制(Non-Maximum Suppression,NMS)、先验框及学习率等。文献[14,19-23]在YOLO的基础上对模型的网络结构进行改进,使原有模型在不同数据集上的检测精度或速度有所提升。Shen 等人[24]结合SSD 和DenseNet[25]提出了不需要进行预训练的Dsod模型。文献[26-27]基于SSD模型进行改进,提升了SSD 模型对中、小目标的检测能力。梁延禹等人[28]提出了多尺度非局部注意力的小目标检测算法,在PASCAL VOC、MS COCO 数据集上的实验结果表明该算法能有效提高小目标的检测准确率。Lin 等人[29]根据低层特征与高层特征所含信息不同,提出了金字塔结构的多尺度目标检测算法,该算法融合图像的低层特征高分辨率和高层特征高语意信息,对小物体的检测效果明显。2017 年,Lin 等人[30]再次提出RetinaNet模型,模型中采用的Focal loss成功解决了目标检测中正负样本区域极不平衡导致目标检测损失易被大量负样本左右的问题。Rezatofighi等人[31]提出了一种通用的优化边界框的方式——GIoU(Generalized Intersection over Union),GIoU解决了目标检测领域最重要的评价尺度IoU 在两个框不重合时不能反映两者的距离及无法精确反映两者重合度大小的缺点。Wang等人[32]提出一种新的生成先验框的方法GA-RPN(Guided Anchoring),通过CNN 预测先验框的位置和形状,生成稀疏而且形状任意的先验框,并设计Feature Adaption模块来修正特征图使之与先验框精确匹配。GA-RPN相比RPN减少90%的先验框,并提高9.1%的召回率。

本文在YOLOv3 的基础上,结合DenseNet 的思想,在YOLOv3网络中加入了长连接,最终使网络的参数量增加了4.2%,在不影响模型检测实时性的前提下加强了模型特征重用,同时加快了模型的收敛速度;在损失函数中使用GIoU loss,克服了YOLOv3 损失函数中边界框损失的不足。另外,在损失函数中引入了Focal loss 以解决正负样本分布不平衡及简单样本与困难样本不平衡所造成的误差。实验结果表明,在不影响算法实时性能的情况下,改进的YOLOv3算法比YOLOv3算法有一定的性能提升。

2 YOLOv3模型简介

在YOLO模型提出之前,对一张图像进行目标检测一般分为两个阶段,如主流的R-CNN 检测方式。第一阶段通过各种方法产生候选区域,第二阶段通过CNN提取特征并进行分类。故R-CNN系列方法虽然精度较高,但检测速度慢,无法满足实时性检测的要求。YOLO方法将检测任务表述成一个统一的、端到端的回归问题,只需要一次处理就能得到目标位置和分类,检测速度较之前的算法有了大幅度的提升。

YOLO算法将图像分为S×S的单元格,如图1所示(S=7)。如果一个物体的中心(图1中红色点)落在某个单元格上,那么这个单元格负责预测这个物体。在检测过程中,每个单元格需要预测B个边界框(包括目标的位置信息、置信度和每个边界框所包含目标的C个类别信息),并将置信度小于阈值的边界框置为0,最后采用非极大值抑制算法去掉重复的边界框从而检测出各类目标。

图1 YOLO网格示意图

为克服YOLO 模型对小目标预测效果差的缺点以进一步提高模型的预测准确度,YOLOv3在YOLOv1和YOLOv2的基础上做了进一步的改进,在网络中引入了基于多尺度预测的特征金字塔结构(FPN),如图2所示,小的物体会在浅层的特征图中被检测出来,大的物体会在较深的特征图中被检测出来。首先,使用k-means聚类算法得到9 个先验框,每种尺度下各三个,每种尺度下的一个网格负责预测三个边界框。然后,使用darknet-53网络对图像进行特征提取,当提取到最深层特征时,进行输出,同时进行上采样,与另一尺度下的特征进行融合。这样,每层特征图中都会包含浅层的低级特征(如物体的边缘、颜色、初级位置信息等)和深层的高级特征(如物体的语义信息等),预测的准确度也会有所提高。另外,由于darknet-53中加入了残差块,使网络的结构可以设置得更深,因而具有更强的特征提取能力。

图2 YOLOv3中的特征金字塔结构

YOLOv3网络模型的损失函数分为边界框损失,置信度损失和分类损失,损失函数如下式所示:

其中,表示第i个网格的第j个先验框是否负责预测目标边界框的位置,若负责预测则其值为1,若不负责预测,则其值为0。表示第i个边界框不负责预测目标位置。由于YOLOv3在三种不同尺度下进行预测,所以最终的损失函数为三种尺度下loss的和。

3 YOLOv3检测算法改进

3.1 网络中加入长连接

YOLOv3 目标检测算法为了获得深层次的特征信息以提高检测精度,需要加深网络的深度。为解决梯度消失和模型退化的问题,YOLOv3网络中引入了残差网络的思想,网络中加入大量的残差块,YOLOv3 中的残差块如图3 所示。残差块通过在每两层网络之间设置旁路连接,在进行特征重用的同时,在网络间增加了特征传递的捷径,将特征信息直接传到神经网络的深层。这样,在前向传播过程中,当浅层的输出已经达到较好效果时,深层网络后面的网络层能够实现恒等映射的效果。在反向传播过程中,残差块会明显减少模块中参数的值从而让网络中的参数对反向传导的损失值有更敏感的响应能力。虽然没有从根本解决回传损失小的问题,但却让参数减小,相应而言增加了回传损失的效果,也产生了一定的正则化作用。

图3 YOLOv3中的残差模块示意图

Huang等人[25]在DenseNet一文中指出,与其多次学习冗余的特征,特征复用是一种更好的特征提取方式。根据DenseNet 思想,本文对YOLOv3 网络darknet-53 进行了一些改进,在darknet-53 中的残差块间加入了旁路连接。Darknet-53网络中的旁路连接位于残差块内,其连接步长相对较短,仅对网络中相邻层之间进行连接。在网络的残差块间加入旁路连接后,进一步加强了网络的特征重用,同时由于旁路连接的步长变大,使信息流更容易传递到网络的深层。图像的颜色、边缘轮廓等浅层特征也能够通过旁路直接传递到网络深层,与图像深层特征融合起来。这样,网络深层的特征图不仅包含浅层的位置信息等,又包含深层的语意信息。使用网络深层特征图进行目标检测就会获得更好的精度。同时,由于网络之间存在捷径,模型的收敛速度也会更快。

加入旁路连接后的YOLOv3网络结构如图4所示。在darknet-53中依次选取输入特征图尺寸相同的两个残差块,将前一个残差块的输入与其后一个残差块的输出进行连接,并将连接后特征图尺寸调整到与下一个残差块的输入保持一致。为完整保留网络中的信息流,这里借鉴Densenet的方法,对融合的特征取并集后再调整尺寸。这样,在每四层网络之间就会有一个长连接。

图4 改进的YOLOv3算法网络结构中的长连接

3.2 使用GIoUloss作为边界框损失

IoU可用来衡量两个边界框的相似性,是目标检测领域用来评价目标检测器性能的一个重要指标,预测框与真实框的重叠度越高,IoU值也越大,IoU的计算如公式(2)所示,其中A、B分别代表预测框和真实框。

当前很多目标检测算法在计算边界框损失函数时普遍采用预测框与真实框的L1 范数或L2 范数来计算位置回归损失。但在评测时却使用IoU 去判断是否检测到目标,而这两者并非完全等价。如图5所示[31],其中绿色框为真实框,黑色框为预测框,图5(a)、(b)分别为预测框与真实框角点坐标距离的L1 和L2 范数相同时的IoU 对比。从图中可看出,当L1 范数或L2 范数相等时,IoU的值有很大的差异。而从公式(1)可知YOLOv3的边界框损失函数是根据L2 范数来计算的,因而存在一定误差。

图5 预测框与真实框L1范数、L2范数与IoU

若直接使用IoU作为边界框损失,当预测框与真实框之间没有重合时,IoU 无法衡量两边界框距离的远近,且IoU为0,导致优化损失函数时梯度为0,无法优化。如图6所示,(a)、(b)中IoU都为0,但是(a)中预测框与真实框的距离明显更近一些,其预测效果也更佳。基于此,Rezatofighi等[31]提出的GIoU充分利用了IoU具有尺度不变性及可作为两个框距离的优点,同时,克服了IoU在预测框与真实框不重合时的不足之处,能够更好地反映预测框与真实框的重合情况。GIoU的计算如公式(3)所示。其中,A、B为预测框与真实框,C为包含两者的最小闭合框。如图7所示,黑色框范围即为C的表示区域。

图6 IoU为0时的不同场景

图7 GIoU中C 的表示区域

由公式(2)、(3)可知,GIoU 的变化范围为(-1,1],且当预测框与真实框完全重合时,GIoU=1。当预测框与真实框不重合,即IoU=0 时,GIoU的计算公式可转化为公式(4):

预测框与真实框距离越远,越接近0,GIoU越接近-1,预测框与真实框距离越近越接近1,GIoU越接近0。因此,相比于IoU,GIoU能够更好评价两边界框的重合度。

以GIoU 作为衡量边界框距离的指标,其损失函数如下:

两边界框的GIoU 越大,GIoU loss 越小,网络会朝着预测框与真实框重叠度较高的方向去优化。根据GIoU loss 对YOLOv3 模型边界框损失函数进行改进,改进后的边界框损失函数如式(6)所示:

3.3 使用Focal loss

在单阶段目标检测中,由于正负样本区域分布极不平衡,导致目标检测损失易被大量负样本所左右。这样,少量正样本所提供的关键信息不能在损失函数中发挥正常作用,从而无法得到一个能对模型训练提供正确指导的损失函数。Lin 等人[30]提出的Focal loss 通过对交叉熵损失(cross-entropy loss)增加权重,解决了正负样本分布不衡以及简单样本与困难样本不平衡的问题。

典型的交叉熵损失广泛用于当下的图像分类、检测CNN 网络当中,如公式(7)所示。其中,p∈[0,1],代表模型输出类别概率,y为类别标签,其取值为0或1。

考虑到数据集中正负样本不平衡问题,可通过在交叉熵损失中使用与目标存在概率成反比的系数进行校正。这样,数量较少的正样本权重系数较大,对模型的贡献也会加大,数量较大的负样本权重系数较小,其对模型的贡献会相对削弱,因而,模型会学习到更多的有用信息。加入权重系数α后的交叉熵损失如下:

另外,样本中有些类别比较明确,有些类别则较难区分。Focal loss 在交叉熵损失的基础上,增加了一个动态缩放因子,自动降低简单样本的损失,帮助模型集中于训练更加困难的样本。在Focal loss 计算中,引入了一个新的超参数γ,Focal loss的计算如公式(9)所示:

将Focal loss与权重α结合起来,则Focal loss最终计算公式为:

在YOLOv3模型中,若输入图像的大小为416×416,则将会产生10 647个先验框,而对于MS COCO2014数据集,训练样本中每张图像约包含7.3个目标,绝大多预测框均不包含目标,这就造成样本中存在正负样本不平衡的问题。YOLOv3 模型中使用Ignore_thread 及对不存在目标的样本框使用较小的置信度等措施在一定程度上能够解决正负样本不平衡问题。但正负样本不平衡问题仍然存在,在引入Focal loss后,模型能够更好地解决正负样本不平衡问题,且由于对困难样本的检测效果更好,因而能够提高模型检测效果。引入Focal loss后,YOLOv3模型的损失函数如公式(11)所示:

3.4 数据集及训练

实验的数据集采用PASCAL VOC 2007+2012 和MS COCO(Microsoft COCO:Common Objects in Context)2014数据集。两种数据集的具体数量如表1。

表1 实验数据集详情

PASCAL VOC 2007+2012。PASCAL VOC 2007和2012数据集共分四个大类:vehicle、household、animal、person,20 个小类。VOC 2007 和VOC 2012 训练集共包含16 551 张图像,40 058 个样本框。VOC 2007 测试集包含4 952 张图像,12 032 个样本框,VOC 2012 测试集未公开。使用VOC 2007 和VOC 2012 的训练集进行训练,然后使用VOC 2007 测试集进行测试,最后计算IoU=0.5 时的mAP对模型进行评价。

MS COCO 2014。COCO2014 数据集中包含80 个类别的目标,其训练集共有82 783张图像,604 907个样本框。从验证集中选取10 000 张图像作为测试集对模型进行评价。相比于VOC 数据集,COCO 数据集的评价标准更严格。COCO 的主要评价标准是IOU 在[0.5,0.95]区间内,步长为0.05时的10次AP的平均值。

本文设计了四个模型,分别为增加了长连接的YOLOv3(以下称为YOLOv3-A),使用GIoUloss作为边界框损失函数的YOLOv3(以下称为YOLOv3-B),引入Focal loss后的YOLOv3(以下称为YOLOv3-C)以及对YOLOv3同时进行以上几种改进后的模型(以下称为YOLOv3-D)。对四种模型在PASCAL VOC2007数据集和COCO2014数据集上进行训练及模型评估。目前,针对目标检测训练的主流做法是基于Imagenet 数据集预训练的模型来提取特征,然后在PASCAL VOC 数据集或COCO 数据集上进行微调。考虑到预训练过程需要耗费大量时间,直接加载YOLOv3在VOC数据集上以及COCO数据集上的模型,并采取分段训练的方法进行训练。训练的第一阶段仅对加载模型中没有预训练权重的那部分参数进行训练,第二阶段对所有权重进行训练。在训练的初始阶段,为使模型能够稳定,设置了一个热身阶段。热身阶段为两轮循环,学习率逐渐增大到0.000 1,之后采用文献[33]中的consin 衰减方式让学习率逐渐降低以减小网络的损失,模型训练学习率示意图如图8所示。在实验中,网络的输入大小为416×416,损失函数中α值为0.75,γ值为2。PASCAL VOC 数据集上,YOLOv3-A和YOLOv3-D的迭代次数为80轮,YOLOv3-B和YOLOv3-C 的迭代次数为50 轮。在COCO 2014 数据集,YOLOv3-A 和YOLOv3-D 的迭代次数为100 轮,YOLOv3-B和YOLOv3-C的迭代次数为50轮。

图8 实验学习率设置示意图

4 实验结果及分析

4.1 模型在PASCAL VOC数据集上的结果

YOLOv3-A、YOLOv3-B、YOLOv3-C、YOLOv3-D四种模型首先在PASCAL VOC 2007+2012训练集上进行训练,并在PASCAL VOC 2007测试集上进行模型评估。PASCAL VOC 2007 测试集各类别目标及其数量如图9 所示。PASCAL VOC 2007 测试集mAP 的计算方法采用PASCAL VOC CHALLENGE 的计算方法。假设N个样本有M个正例,就会得到M个召回率的值R(1/M,2/M,…,M/M),对每个召回率取最大的准确率P,然后对这M个P值取平均值最后得到AP值。

图9 VOC 2007测试集目标类别及样本框数量分布

在IoU=0.5 时,四种模型在PASCAL VOC 2007测试集上的mAP 及各类别目标预测结果如图10 所示。由图10 可以看出,四种模型在测试集上的mAP 都达到80%以上,其中YOLOv3-D 模型的效果最好,其最高mAP为83.7%。图11(a)为YOLOv3-A模型与YOLOv3模型在PASCAL VOC 数据集上的训练loss 对比,在加入长连接后,网络有了浅层与深层之间信息传递的捷径,模型的收敛速度也更快。

YOLOv3模型的参数量为62.80×106,在网络中加入长连接后,模型的参数量为65.44×106,参数量增加2.64×106,增加量为4.2%。由于YOLOv3-A 与YOLOv3-D 模型中都加入了长连接,因而参数量有所增加,故检测速率有所下降,在GPU(NVIDIA Tesla PH402 SKU 200)上的实验结果显示,YOLOv3-A和YOLOv3-D模型的检测速度为27.2 帧/s,仍能达到实时检测的要求(检测速率大于25 帧/s)。YOLOv3-B和YOLOv3-C模型没有引入多余的参数量,其检测速度为28.6 帧/s。

4.2 模型在COCO 2014数据集上的结果

四种模型在COCO 数据集上训练次数达到预先设定轮数时停止训练,并从验证集随机选取10 000张图像作为测试集对模型进行评估。模型评估标准采用COCO数据集的通用测试标准,测试结果如表2所示。

实验结果表明,在COCO 2014 数据集上,四种模型比YOLOv3 模型的检测效果均有所提高。其中,YOLOv3-A 模型的mAP 提高了0.64 个百分点,得益于在网络残差块间加入旁路连接后,网络的特征复用能力得到提高,图像浅层特征能够直接传入网络的更深层与深层特征合并,使网络中深层特征图中的特征信息更完整,进而使网络对目标的定位及分类能力有所高。YOLOv3-B 模型的mAP 相比于YOLOv3 模型提高幅度较大,达到2.03 个百分点,且参数规模没有发生变化,模型检测速度不会受到影响。由图11(b)可以看出,使用GIoU loss 作为模型边界框损失后,模型的loss 相比于YOLOv3 的loss 有所降低,模型的检测效果也更好。YOLOv3-C 模型加入Focal loss 后,其mAP 提升了1.21 个百分点。在模型中,降低了ignore_thread 值并加入Focal loss 后,模型的正负样本不平衡问题得到进一步的解决,同时由于Focal loss 对难检测目标的检测效果有提升作用,因而模型检测效果得到提升。融合了多种改进的YOLOv3-D模型的mAP最高,达到了33.27%,相比于YOLOv3模型其mAP提高了2.27个百分点。但必须指出,由于相比于YOLOv3 模型,YOLOv3-D 模型的参数增加了4.2 个百分点,会对模型的速度产生一定影响,但仍能达到实时检测的要求。

图10 三种模型PASCAL VOC 2007测试集预测结果

表2 模型在COCO 2014验证集测试结果 %

图11 模型loss对比图

4.3 与其他目标检测算法进行比较

四种模型在PASCAL VOC 2007 测试集上与其他具有代表性的目标检测算法进行对比,结果如表3 所示。与其他同类算法相比,YOLOv3-A、YOLOv3-B、YOLOv3-C、YOLOv3-D四种模型的mAP均高于其他算法,其中,YOLOv3-D 在取得最高mAP 的同时,仍能达到实时检测的要求。图12是在COCO数据集上的测试结果,由于COCO 数据集评价标准更严格,且数据集中大多数图像来源于生活,背景更复杂,小目标更多等因素,各目标检测算法在COCO 数据集上的mAP 普遍不高。从图中可看出,四种改进模型在保持实时检测的情况下,其mAP 均高于YOLOv3 模型。且在mAP 接近的情况下,四种改进模型的检测速度比SSD、RetinalNet等模型检测速度都快。

表3 PASCAL VOC 2007测试集上算法性能比较

图12 不同模型在COCO测试集上性能对比图

5 结束语

本文提出了一种融合GIoU和Focal loss的YOLOv3目标检测算法,该算法通过在YOLOv3网络的残差块间引入旁路连接、使用GIoU loss 代替YOLOv3 模型的边界框损失及在置信度损失函数中加入Focal loss这三个措施对YOLOv3 目标检测算法进行改进。在PASCAL VOC 和MS COCO 数据集上的实验结果表明,改进的YOLOv3算法在保障实时检测的前提下,提高了YOLOv3模型检测精度。下一步的工作将研究YOLOv3 模型在一些实际场景中的应用,并继续对模型进行改进以提高模型的检测速度及精度。

猜你喜欢
集上损失样本
胖胖损失了多少元
用样本估计总体复习点拨
Cookie-Cutter集上的Gibbs测度
链完备偏序集上广义向量均衡问题解映射的保序性
玉米抽穗前倒伏怎么办?怎么减少损失?
R语言在统计学教学中的运用
推动医改的“直销样本”
随机微分方程的样本Lyapunov二次型估计
村企共赢的样本
菜烧好了应该尽量马上吃