自适应聚焦损失的图像目标检测算法

2021-12-12 02:51肖振久孔祥旭宗佳旭杨玥莹
计算机工程与应用 2021年23期
关键词:类别损失样本

肖振久,孔祥旭,宗佳旭,杨玥莹

辽宁工程技术大学 软件学院,辽宁 葫芦岛 125105

现代目标检测算法是基于卷积神经网络(Convolutional Neural Networks,CNN)开发的,主要分为两类:两阶段目标检测算法[1]和单阶段目标检测算法[2]。两阶段目标检测算法中,在第一阶段预先生成目标候选框提高了检测精度,例如在目前具有挑战性的PASCAL VOC[3]和COCO基准[4]上,但是降低了目标检测的速度。相比之下,单阶段目标检测算法跳过了生成目标候选框的步骤,为了实现在图像全局检索目标,单阶段目标检测算法在每个空间位置都使用了一组密集的固定采样网格,例如多个“锚框”[5],单阶段目标检测算法提高了检测速度,但是检测精度较差。类别不平衡被认为是这种检测精度差距的来源。两阶段方法通过根据第一阶段的候选框生成来过滤大部分的负样本避免了正负样本不平衡问题(例如RPN[5]、Selective Search[6]、Edge Boxes[7]和DeepMask[8])。并在第二阶段,使用正负样本固定比率[9]或在线困难样本挖掘(Online Hard Example Mining,OHEM)[10]等方法,最终平衡训练数据。尽管两阶段目标检测算法取得了成功,但受到检测速度的制约,不能在实际生活中得到广泛应用。

对于单阶段目标检测算法来说,因为其检测速度更快,具有更大的实用性,实现高精度检测成为当前最需要解决的问题,问题所面临的难点在于:在单阶段目标检测算法中,卷积神经网络训练大量的采样区域时,会导致正样本数量较少而负样本数量较多,同时数据集中背景部分占了整个图像的大部分,其中大多数很容易分类。这意味着随着训练的进行,模型倾向于由简单样本主导,这些样本会稀释模型在训练过程中的有效梯度并对参数的更新贡献很小。为解决上述问题,可以利用聚焦损失函数来聚焦于对训练过程贡献大的样本,作为解决类别不平衡问题和提高目标检测算法精度的杠杆。早期的单阶段目标检测算法使用的是静态损失函数,损失函数的超参数在模型训练时没有改变。为缓解正负样本不平衡问题,在RetinaNet[11]中,提出了一个新的损失函数Focal Loss。引入加权因子α来平衡正负样本,根据不同正负样本的相对频率对损失进行加权。除此之外,还引入了调制因子γ来控制训练数据中难易样本的不平衡。

对于正负样本和难易样本的不平衡问题,Focal Loss通过修改交叉熵损失函数来解决这个问题。然而,Focal Loss采用了两个超参数,需要进行大量的调整。它是一种静态损失,不适应数据分布的变化,从而不能随着训练过程的变化而变化。为解决上述问题,本文在Focal Loss基础上提出一种新的自适应聚焦损失函数,即Adaptive Focal Loss(AFL)。AFL是为数据不平衡的情况设计的,对原有Focal Loss中的超参数α和γ分别做出了改进,一方面提出了能够自适应动态平衡正负样本的加权因子,该加权因子可以根据不同批次正负样本的数量分别对正负样本进行加权,实现了随着训练自适应改变正负样本的权重,动态地平衡正负样本。另一方面提出了能够自适应地惩罚简单样本,而不减少困难样本损失的调制因子,让损失函数聚焦在困难样本的训练,该调制因子可以随着训练进度动态设置不同样本的权重来将模型集中在困难样本上,并减少无数容易降低模型性能的样本的负面影响。

1 相关工作

1.1 基于CNN的目标检测

利用CNN检测物体的想法可以追溯到1998年,当时Lecun等[12]将最初的CNN分类方法扩展到检测图像中物体的能力。这种网络变换后来被称为全卷积网络(Fully Convolutional Network,FCN)[13],它隐式地模拟了网络结构中的滑动窗口。特别是在2012年Krizhevsky等[14]完成了AlexNet之后,目标检测算法的准确性有了很大的提高,深度神经网络开始主导计算机视觉中的目标检测和其他各种任务。随着神经网络结构的发展,目标检测算法也在不断进步,逐渐分为两个主要方向:两阶段目标检测算法和单阶段目标检测算法。

应用于经典目标检测方法的两阶段框架由来已久。两阶段目标检测算法将此框架应用到CNN架构中。R-CNN[9]率先在第一阶段使用CNN作为特征提取器,然后在第二阶段使用支持向量机(Support Vector Machine,SVM)进行分类任务。之后,Fast R-CNN[15]在第二阶段对分类器升级为卷积神经网络,大大提高了分类的准确性。Faster R-CNN[5]创造性地提出了候选框机制,使目标检测系统成为一个完整的神经网络结构,随后文献[16]对这种结构提出了许多的扩展。

单阶段目标检测算法通常在卷积神经网络中完成特征提取、目标定位和目标分类。OverFeat[17]是最早的单阶段目标检测算法之一。SSD[2,18]和YOLO[19-21]对许多想法进行了研究,例如锚框和两阶段目标检测算法的特征金字塔。最近的工作RetinaNet[11],因其出色的结构和高效率而受到了广泛的关注。

1.2 目标检测类的不平衡问题

目标检测中的不平衡问题受到了广泛的关注,特别是类别不平衡[22]。对于两阶段目标检测算法,由于候选框机制[5],通过一些常见的采样方发[5,10]可以更好地解决此问题。尽管这些采样方法可以应用于单阶段目标检测算法,但是由于在训练过程中容易分类的背景样本占主导地位,它们的效率仍然不高[11]。为了提高训练效率,提出了多种挖掘难负样本的方法[2,10]。另一个有影响的方法是修改损失函数,Bulo等[23]提出了的损失函数,即Loss Max Pooling,来消除长尾分布的数据集对训练的影响。Liu等[2]将加权因子α平衡整合到交叉熵损失中,根据不同类别的频率来对损失加权。Lin等[11]提出的Focal Loss降低了简单负样本的权重,而困难样本则不受影响。上述方法认为,由于从次要类中学到的特征较差,次要类的样本应该比主要类的样本有更高的损失。Focal Loss降低负样本和简单样本的损失权重来解决正负样本和难易样本不平衡,Huber损失[24]降低误差较大的困难样本的损失权重来减少离群值的贡献。最近的工作“梯度协调机制”[25]也考虑了困难样本的危害性,但它基于梯度的统计分布,而不是损失的统计分布。同时,如文献[25]中所述,梯度的最佳分布尚不清楚。在本文中,还是考虑了重塑损失函数的想法,随着训练的进行自适应的对难易样本进行加权并动态的对正负样本加权。

1.3 目标检测的损失函数

损失函数作为每个目标检测算法的一个关键部分,通常由两部分组成,一部分用于目标分类的损失函数,另一部分用于目标位置回归。对于分类损失,通常使用Softmax交叉熵损失函数[17-18,20]或Sigmoid交叉熵损失函数[11]。

Softmax交叉熵损失函数定义如下:

式中,p是一个向量,表示网络用于多类预测的估计概率,y也是一个独热真实标签向量。因为y是独热标签,所以定义pcorrect为真实类的预测概率。p的元素是pi,由Softmax操作生成:

Sigmoid交叉熵损失函数定义如下:

式中,p是类别的预测概率,由Sigmoid函数生成:

对于目标位置回归损失函数,通常使用L2损失函数[19],平滑L2损失函数[2]或类似的平滑L1损失函数[18]。回归损失函数的修正不是本文的目的,本文遵循Retina-Net[11]采用平滑的L1损失函数。

2 自适应聚焦损失

2.1 Focal Loss损失函数

在目标检测中单阶段目标检测运行速度较快,但是受数据集中难易样本和正负样本的影响较大,其精度低于两阶段目标检测。为解决上述问题,Lin等[11]提出了Focal Loss损失函数。Focal Loss是应用在传统的Sigmoid交叉熵损失函数式(4)上建立的,为了便于说明,网络分配给正样本或负样本的概率可以统一为pcorrect:

通过上述公式可将Sigmoid交叉熵损失函数式(4)简化为:

Focal Loss最主要的贡献是损失可以用动态因子ω进行加权,该动态因子的定义使网络中的难易样本得以平衡:

式中,动态因子ω由两个变量pcorrect和γ来决定,前者是模型估计真实标签的预测概率值,后者是调制因子。其中pcorrect的范围是[0,1],用于量化样本的分类难度。γ的范围是[0,∞)用于调节难易样本数量不平衡。对于简单正样本,当pcorrect足够大时(pcorrect≫0.5),则对应的样本分类较好,通过增大γ,会减小,减轻了损失的权重,降低简单正样本对损失的影响。相反,当pcorrect较小时(pcorrect≪0.5),通过增大γ,会减小,减轻了损失的权重,降低简单负样本对损失的影响。

除了减少困难样本和简单样本之间的不平衡,Focal Loss还集成了一个加权因子αc,用于解决正样本和负样本之间的类别不平衡:

式中,α是正样本的加权因子,而1-α是负样本的加权因子,α可以通过不同正负样本相对的频率来设置。α的取值范围是[0,1],如果正样本的数量大于负样本的数量,那么α应该小于0.5,保护样本少的类,而多惩罚样本多的类。最后,Focal Loss可以定义为:

直观上看,Focal Loss通过控制αc解决了正负样本不平衡的问题,通过控制γ解决了目标检测中难易样本不平衡的问题。但是式(10)所示αc和γ被设置为两个超参数,在求解目标检测模型最优化问题的时候,需要对损失函数进行大量的实验,这无疑大量消耗了计算机的时间资源和空间资源。根据Lin等[11]通过大量实验的经验当α取0.25,γ取2时实验效果最佳。本文为解决上述问题,在Focal Loss的基础上引入了自适应的加权因子和自适应的调制因子,使现有的模型可以自适应地去适合各类不同的数据集。

2.2 自适应的加权因子

在单阶段目标检测算法中通常会产生高达10万的候选目标,其中只有少数正样本,正负样本数量出现明显差别。为了解决正负样本不平衡的问题,Lin等[11]在Focal Loss中加入了加权因子α(式(9)),可以用作调节正负样本数量,更大的α赋予数量少的正样本,让损失函数不受负样本数量过多的影响。但是加权因子α在Focal Loss中的值的选择,很大程度上依赖于研究人员的先验经验,为了有效处理正负样本不平衡的问题,以及无需手动调节超参数α来平衡正负样本,Wang等[26]提出W-CEL函数是一种动态平衡正负样本问题的方法,并得到了广泛的应用。不同于最初的Focal Loss中α的定义,本文将改进了α定义为与W-CEL函数类似的加权因子如下:

式中,P定义一个批量标签中为“1”的总数,N为“0”的总数。y表示标签的每个元素。通过每个标签中“0”和“1”的统计量,可以自适应每批量的正负样本来动态平衡。因此AFL加入自适应的加权因子α定义如下:

2.3 自适应的调制因子

在Focal loss损失函数中,动态因子ω或调制因子γ将直接影响神经网络梯度下降的过程,修改调制因子γ来修正模型对不同样本的关注情况。通过式(10)可以得出网络变量net的导数可以揭示权重ω在导数中保持不变。

式中,当γ选择的数值过高时,例如γ等于5,Focal Loss将聚焦在表现不佳的样本,但是忽视了良好样本的训练,最终将造成模型整体精度偏低。当γ选择数值过低时,例如γ等于0,Focal Loss损失将退化成交叉熵损失,则通过损失无法动态地平衡不同样本。在复杂的任务上,尤其是当数据不平衡时,使用定值的调制因子将使网络无法学习问题,网络很容易被占优势的数据淹没。

本文提出的自适应的调制因子可以在训练过程中按照模型不同阶段的需求,进行不同的调节,克服了Focal Loss选择固定γ的限制。从而也避免了在训练后期所有样本表现良好的情况下,因为损失值过低造成提前收敛,使网络不能达到最优值。在模型训练初期,因存在样本不平衡的问题导致模型对不同类别的样本预测存在偏差,此时不同类别样本在模型中预测值的期望也各不相同,针对期望值较小的类别,希望增加训练样本的权重,使模型在训练的过程中可以均衡训练各种不同的样本量的样本。本文决定根据真实标签的预测概率pcorrect对训练进度进行建模。如式(14)所示,计算了在不同阶段各类真实标签的期望概率。

式中,pcorrect的期望概率可以通过计算训练批次的pcorrect上的平均值来近似。在小批量训练的情况下,建议使用指数平滑法。在实验中,通过=0.95·old+0.05·new平滑可以使AFL的效果达到最优。

由上文可知,在各批次中期望概率为p̂correct,并且希望当面对期望概率较低的类别时网络获取较大的注意力,随着期望概率的增加其关注度逐渐降低,由此定义了自适应的调制因子γ,如下式所示:

图1 不同算法的权重变化情况Fig.1 Weight changes of different algorithms

如式(16)所示,为AFL最终表现形式,如果将AFL算法应用于实际问题,需要定义聚焦的损失函数L和定义的计算策略。对于单目标分类,损失函数应该是式(1)中的Softmax交叉熵损失函数LCE(softmax),利用计算γ可以通过式(15)来完成。所需的应使用指数平滑效果最好。

在多目标分类的情况下,损失函数应该是式(7)中的Sigmoid交叉熵损失函数LCE(sigmoid)。利用计算γ可以通过式(15)来完成。的计算比单目标分类的更复杂一些。当一个类别处于正类的情况下,概率pcorrect被定义为p,当一个类别处于非正类的情况下,概率pcorrect被定义为1-p。计算的最佳方法取决于要解决的问题,并不像简单的平均pcorrect那么容易。由于在多目标分类任务中,对于单个样本中通常只有少数类别同时处于正类,因此pcorrect的平均值将由负类占主导地位。

AFL通过对Focal Loss的改进,参数α和γ解决了不平衡问题的两个方面,并在学习模型中取得了良好的性能。最重要的是,AFL将更适合于具有挑战数据库中不平衡的问题。

3 实验结果与分析

3.1 实验环境和参数设置

实验仿真在Pytorch1.4框架,训练及测试的计算机硬件配置CPU为Intel XeonE5-2620 V4,GPU为NVDIA GeForce GTX 1080Ti,操作系统为Ubuntu16.04下进行的。

改进的Focal Loss通过600×600输入的训练和测试,批量大小设为64,共进行了60 000次迭代并采用了热身策略来提高学习速度。初始学习率设为0.01,权重衰减值设为0.000 5,在网络迭代20 000次后学习率设为0.001,网络迭代50 000次后学习率设为0.000 1。本文相关实验都采用了与上述相同的设置并在相同的训练集上进行训练。首先,训练了原始Focal Loss算法。在实验中,设置Focal Loss[11]中建议的α=0.25,γ=2。然后对本文提出的AFL进行了消融性实验,完成了改进的Focal Loss算法的训练和测试。

3.2 实验数据集和评价标准

在本文中,关于改进的Focal Loss算法都是在标准化数据集为PASCAL VOC2007和VOC2012[3]上实现的。模型训练阶段,使用VOC2007训练验证集和VOC2012训练验证集进行训练,测试阶段对VOC2007测试集和VOC2012测试集分别进行测试。VOC数据集由20个对象类别组成,带有注释的真实标签位置和每个图像的相应类别信息。

准确性是指目标检测算法对于不同种类目标的检测准确率,是考察目标检测算法优劣的一项重要指标。为了评价目标检测算法的准确性最常用的指标是通过计算模型在测试集上的平均准确率(AP)和所有类别的平均准确率均值(mAP)来评价模型的好坏。AP就是精确率(precision)/召回率(recall)曲线下面的面积,计算公式如下式所示:

式中,p表示precision,r表示recall,p是一个以r为参数的函数。TP(True Positive)表示被模型预测为正值的正样本,FP(False Positive)表示被模型预测为负值的正样本,FN(False Negative)表示被模型预测为负值的负样本。mAP是各个类别AP的平均值,值越高表示模型在全部类别中检测的综合性能越高。

3.3 消融性实验

本文通过引入自适应的加权因子和自适应的调制因子,解决了Focal Loss中依赖人工调节超参数的问题,提高了模型的训练效率。为验证本文算法的有效性,通过在Focal Loss损失函数中分别添加自适应的加权因子和自适应的调制因子,为本文算法做了消融性实验,在训练阶段,通过判断目标预测值是否小于某一阈值来计算目标损失,使用0.5阈值来训练网络。并在VOC2007数据集上做了相应的测试,其实验结果使用0.5的阈值对20类对象的平均准确率均值(mAP)如表1所示。

表1 不同算法在VOC2007数据集的实验结果Table 1 Experimental results of different algorithms on VOC2007 dataset

通过实验可知,添加自适应的加权因子和添加自适应的调制因子对模型均有不同程度的提高,并且使用添加自适应的加权因子和添加自适应的调制因子的AFL模型相比原始Focal Loss训练的模型提升了3.45个百分点。究其原因,AFL可以根据不同的训练数据动态的调整正负样本之间的关系和难易样本之间的关系,可以使训练数据得到更有效的利用。

3.4 VOC2007测试集的实验结果及分析

为了评估本文的AFL算法在目标检测中的有益影响,在VOC2007的20个类别上比较了AFL和原始的Focal Loss的AP值。实验结果如表2可知,Focal Loss和AFL结果对比,各类AP值提高了1~6个百分点。表明了模型在VOC2007测试集上,其中鸟、盆栽等类别为训练数据中较难训练的样本,因为其数据量少,且目标尺寸相对较小,故在神经网络的训练中对模型参数的影响较小。相比Focal Loss,AFL通过自适应的调制因子可以更好地聚焦在困难样本的训练上,并随训练进度改变实时修改模型对不同样本的关注度,故AFL在困难样本的识别上要优于Focal Loss。另外,AFL通过建立自适应的加权因子,相比Focal Loss可以更好地适应数据中不同程度的正负样本,通过上述两处改进,AFL的整体效果优于Focal Loss。

表2 不同算法各类的AP值对比情况Table 2 Comparison of AP values of different algorithms%

3.5 VOC2012测试集的实验结果及分析

为证明AFL的泛化性和有效性,除了在VOC2007数据集测试,本文继续测试了模型在VOC2012数据集上的mAP值,其实验结果如表3所示。其中AFL添加了自适应的加权因子和自适应的调制因子,由表3可知AFL算法在数据集VOC2012的测试效果依然优于Focal Loss,其结果提升了1.87个百分点。由此可知本文所建立的算法模型具有良好的泛化性,在多个不同的数据集上均可取得较好的结果。

表3 不同算法在VOC2012数据集的实验结果Table 3 Experimental results of different algorithms on VOC2012 dataset

为了进一步直观地评估本文的算法,提供了AFL与原始的Focal Loss进行了定性比较。图2显示了原始的Focal Loss和AFL在VOC2012测试集上的检测目标比较,不同颜色的盒子代表不同的类别。将置信度阈值设置为0.5。其中图2(a)、(c)为Focal Loss检测结果图,(b)、(d)为AFL检测结果图。观察对比可以看出,AFL比原始Focal Loss性能更好。减少了对目标检测中对象的遗漏,降低了对目标检测过程中的错误率,具有更强的检测和识别物体的能力。并且发现对于小目标的检测也有优异的效果。这些改进是由于本文提出的针对正负样本和难易样本更平衡的AFL损失函数,使得训练过程更平滑地收敛到更好的模型。

图2 不同算法在VOC2012数据集的效果图Fig.2 Effect of different algorithms on VOC2012 dataset

3.6 与其他先进目标检测算法的性能比较

为了验证和评估本文提出的方法的性能,对本文提出的AFL算法与其他先进的目标检测算法进行了比较。很容易从各自的文献获得SSD[2]、Faster R-CNN[5]、R-FCN[16]、DSSD[18]、YOLOv2[20]、YOLOv2+[20]、R-SSD[27]、RUN2WAY[28]和RUN3WAY[28]的性能。所有的模型首先用VOC2007训练验证集和VOC2012训练验证集进行训练,然后用VOC2007测试集进行测试。表4显示了实验结果,与Faster R-CNN[5]和R-FCN[16]相比,AFL提高了4.3个百分点和0.2个百分点。与YOLOv2[20]和YOLOv2+[20]相比,AFL提高了3.9个百分点和2.1个百分点。与SSD[2]、DSSD[18]和R-SSD[27]相比,AFL分别提高了3.6个百分点、2.1个百分点和2.2个百分点。与RUN2WAY[28]和RUN3WAY[28]相比,AFL提高了2.1个百分点和1.5个百分点。从表中可以看出AFL性能最好。

表4 VOC2007测试数据集在不同算法的比较Table 4 Comparison of different algorithms on VOC2007 test dataset

4 结束语

Focal Loss损失函数减少了正负样本不平衡和难易样本不平衡的影响,但仍然依赖于手动调节超参数α平衡和为任务选择一个调制因子γ,常数α和γ不能使正负样本的平衡和聚焦困难样本适应当前的训练进度。本文提出了克服这一问题的方法,通过计算依赖于训练进度的γ能够在训练过程中转移其聚焦的损失来有效地进行困难样本挖掘,以及通过计算每批次正负类样本来改进了加权因子α的定义从而实现自适应的动态平衡正负样本。最后在VOC2007测试集和VOC2012测试集进行了一系列的实验,并对AFL与原始的Focal Loss进行了性能的比较。结果表明,AFL优于原始的Focal Loss,并且发现对小目标的检测也有不错的结果。后续将进一步研究对提高小目标检测精度的方法,以及对在更复杂的数据集上有效提高目标检测精度的方法。

猜你喜欢
类别损失样本
胖胖损失了多少元
用样本估计总体复习点拨
玉米抽穗前倒伏怎么办?怎么减少损失?
推动医改的“直销样本”
随机微分方程的样本Lyapunov二次型估计
村企共赢的样本
服务类别
一般自由碰撞的最大动能损失
损失
论类别股东会