参考  Gradient Harmonized Single-stage Detector - 云+社区 - 腾讯云

摘要

虽然两级检测器取得了巨大的成功,但是单级检测器仍然是一种更加简洁和高效的方法,在训练过程中存在着两种众所周知的不平衡,即正、负样本之间以及简单例子和困难例子之间在数量上的巨大差异。在这项工作中,我们首先指出,这两个不和谐的本质影响可以用梯度的形式来概括。此外,我们提出了一种新的梯度协调机制(GHM)来对冲不平衡。GHM背后的原理可以很容易地嵌入到交叉熵(CE)等分类损失函数和Smooth L1 (SL1)等回归损失函数中。为此,我们设计了两种新的损失函数GHM-C和GHM-R来平衡梯度流,分别用于anchor分类和bounding box细化。MS COCO的消融研究表明,无需费力的超参数调整,GHM-C和GHM-R都可以为单阶段检测器带来实质性的改进。在没有任何附加条件的情况下,该模型在COCO test-dev set上实现了41.6 mAP,比目前最先进的Focal Loss(FL) + SL1方法高出0.8。

简介

单阶段方法是一种高效、简洁的目标检测方法。但长期以来,单阶段检测器的性能与两阶段检测器有较大的差距。单阶段检测器的训练中,最具挑战性的问题是容易与难例、正例与反例之间的严重不平衡。大量简单的背景例子往往压倒了训练。由于设计方案的根本不同,两级检测器不存在上述问题。为了解决之前的不平衡问题,基于实例挖掘的方法如OHEM被广泛使用,但它们直接放弃了大部分的例子,训练效率低下。对于类不平衡,Focal Loss试图通过修改交叉熵损失函数来解决这个问题。然而,Focal Loss采用了两个超参数,需要进行大量的调整。它是一种静态损失,不适应数据分布的变化,随训练过程的变化而变化。

本文首先指出,类不平衡可以归结为难度的不平衡,难度的不平衡可以归结为梯度范数分布的不平衡。如果一个正例子分类很好,那么它就是一个简单的例子,模型从中获益很少,也就是说,这个样本会产生一个很小的梯度。错误分类的例子无论属于哪一类,都应该引起模型的注意。因此,如果从全局范围来看,大量的负面例子往往易于分类,而较难的例子通常是正面的。所以这两种不平衡大致可以归结为属性不平衡。

此外,我们认为梯度范数的分布可以反映不同属性(hard/easy和pos/neg)的例子之间的不平衡。为方便起见,我们将关于梯度范数称为梯度密度,其密度变化较大,如图1所示。梯度范数很小的例子密度较大,这与大量的简单反例相对应。虽然一个简单的例子在全局梯度上的贡献比一个困难的例子要小,但是大量简单例子的总贡献可以超过少数困难例子的贡献,训练过程将是低效的。此外,我们还发现梯度范数非常大的例子(非常困难的例子)的密度略大于中等例子的密度。我们认为这些非常困难的例子大多是异常值,因为它们即使在模型收敛时也稳定存在。由于异常值的梯度可能与其他常见的例子有较大的差异,因此可能会影响模型的稳定性。

受梯度范数分布的启发,提出了一种梯度协调机制(GHM),该机制能有效地训练单阶段目标检测模型。GHM首先对具有相似属性也就是梯度密度进行统计,然后根据密度为每个例子的梯度附加一个调和参数。GHM与CE、FL相比的效果如图1所示。利用GHM进行训练,可以对简单例子产生的大量累积梯度进行降权处理,对异常值也可以进行相对降权处理。最后,平衡各类型实例的贡献,提高训练的效率和稳定性。

在实际中,梯度的修正可以等价地通过重新构造损失函数来实现,将GHM嵌入到分类损失中,即GHM- C损失。这个损失函数的表达式很优雅,没有很多超参数需要调优。由于梯度密度是一个统计变量,依赖于样本在小批量中的分布,因此GHM-C是一种动态损失,能够适应每批数据分布的变化以及模型的更新。为了展示GHM的通用性,我们还在box regression分支中采用了GHM- R损失的形式。

COCO挑战基准的边界框检测上进行的实验表明,与传统的交叉熵损失相比,GHM-C损失具有较大的增益,略高于目前最先进的Focal Loss。而GHM-R损失也比常用的平滑L1损失具有更好的性能。GHM-C和GHM-R的结合在COCO tes-dev set上获得了一个新的最先进的性能。

本文的主要贡献如下:

  1. 揭示了单阶段检测器在梯度范数分布方面存在显著不平衡的基本原理,并提出了一种新的梯度协调机制(GHM)来解决这一问题。
  2. 我们将分类和回归的损失分别嵌入到GHM-C和GHM-R中,修正了不同属性样本的梯度贡献,对超参数具有鲁棒性。
  3. 通过与GHM的合并,我们可以很容易地训练一个单阶段检测器,而不需要任何数据采样策略,并在COCO基准上实现最优的结果。

相关工作

目标检测

目标检测是计算机视觉领域中最基本、最重要的任务之一。 基于深度卷积神经网络(CNN)的方法,由于网络架构的重大进展,近年来越来越发达并取得了巨大的成功。 先进的目标检测框架可分为两类:一阶段检测器和两阶段检测器。

大多数最先进的方法使用两级检测器。 它们主要基于Region CNN (R-CNN)架构。 这些方法首先从几乎无限的候选区域中获得可管理数量的区域提议,称为感兴趣区域(RoI),然后使用网络对每个RoI进行评估。

单级检测器具有结构简单、速度快等优点。 SSD, YOLO用于通用目标检测和RSA的人脸检测实现了良好的速度/准确性权衡。 然而,它们的精度很难超过两级检波器。 RetinaNet是目前最先进的一级对象检测器,其性能可与两级检测器相媲美。 它采用RPN)的架构,重点解决训练过程中的班级失衡问题。

用于目标检测器的目标函数:大多数检测模型使用基于交叉熵的损失函数进行分类。 而单级检测器面临着两级检测器所没有的极端类不平衡的问题。 早期的方法尝试使用难样本挖掘方法,但他们抛弃了大多数例子,不能很好地处理这个问题。 最近的工作重新构建了交叉熵损失,从而使容易的负的向下加权,而难的例子不受影响,甚至向上加权。 为了box回归的稳定训练,Fast R-CNN引入了平滑L1损失。 这种损失减少

对异常值的影响,使模型的训练能够更加稳定。 下面几乎所有的工作都将平滑L1损失作为框回归的默认值。

这项工作试图通过将目标改变为分布并使用直方图损失来计算预测和目标的K-L散度来提高回归性能。 该工作通过动态调整不同任务分支的梯度大小来平衡多任务损失。

我们基于GHM的损失在样本梯度分布的基础上协调了样本的贡献,因此它可以很好地处理类不平衡和离群值问题。 该算法还可以根据每个小批处理中数据分布的变化来调整权值。

1、梯度协调机制的原理

1、问题描述

我们在这里的工作重点是分类在一阶段的目标检测,其中的类(前景/背景)是相当不平衡的例子。对一个候选框,使是模型预测的概率,是对一个确定类的ground-truth标签。考虑二元交叉熵损失:

为模型的直接输出,令,则有关于的梯度:

定义如下:

等于对应的梯度范数。 的值表示一个例子的属性(例如easy或hard),表示这个例子对全局梯度的影响。虽然梯度的严格定义是在整个参数空间上,即是一个例子梯度的相对范数,但为了方便起见,本文将称为梯度范数。

下图为收敛的一级检测模型的分布。由于简单负样本占主导地位,使用log轴来显示样本的分数,以显示具有不同属性的样本方差的细节。可以看出,简单例子数量是非常大的,这对全局梯度有很大的影响。此外,可以看到收敛模型仍然不能处理一些非常困难的例子,这些例子的数量甚至比中等难度的例子还要多。这些非常困难的例子可以看作是异常值,因为它们的梯度方向往往与大量其他例子的梯度方向有很大的不同。也就是说,如果收敛模型被迫学习如何更好地对这些异常值进行分类,那么对大量其他示例的分类往往不那么准确。

2、梯度密度

针对梯度范数分布的不协调问题,提出了一种梯度密度的协调方法。训练实例的梯度密度函数表示为:

其中是第个实例的梯度范数,并且,

g的梯度密度表示以g为中心的区域内的样例数,其长度为,并按该区域的有效长度归一化。我们定义梯度密度平衡参数为:

是总共样例的个数。为了更好地理解梯度密度协调参数,可以将其改写为,分母是一个标准化器指示了邻域梯度到第个样本的样本分数。如果样例关于梯度均匀分布,对任何,每个样例有相同的,这意味着什么都没有改变。否则,密度较大的算例将被归一化器相对降权。

3、GHM-C Loss

我们将GHM嵌入分类损失由关于βi损失权重的第i个例子和梯度密度统一形式的损失函数是:

图3为不同损失下重新制定的梯度范数。CE的原始梯度准则,即,作为轴,便于查看,因为密度是根据计算的。我们可以看到Focal Loss和GHM-C损失的曲线有相似的趋势,这意味着焦损失与最好的超参数是类似于均匀梯度协调。此外,GHM-C还有一个被Focal Loss忽略的优点:降低了异常值梯度贡献的权重。

在GHM-C损失的情况下,大量的非常简单的例子大都是向下加权的,而异常值也稍微向下加权,这同时解决了属性不平衡问题和异常值问题。从损失比较可以看出,GHM-C较好地协调了不同样本组的梯度贡献总量。由于梯度密度是每次迭代计算得到的,所以算例的权值不像焦损那样是固定相关的(或),而是适应模型的当前状态和小批量数据。GHM-C损失的动态特性使训练更加高效、鲁棒。

4、单位区域近似

1、复杂分析

计算所有算例梯度密度值的朴素算法的时间复杂度为,即使是并行计算,每个计算单元的计算量仍然是,据我们所知,最好的算法是先用复杂度为的梯度范数对样本进行排序,然后用队列扫描样本,用得到样本的密度。这种基于排序的方法不能从并行计算中获得太多的好处。由于单阶段检测器中图像的N可以是甚至,直接计算梯度密度是相当费时的。因此,我们提出了一种近似求解算例梯度密度的方法。

2、单元区域

的值域空间划分为长度为的单个单位区域,有个单位区域。是编号为的单元区域,因此代表中的样本个数。我们定义也就是,这是区域单元中的指数函数。然后我们将近似梯度密度函数定义为:

得到近似梯度密度协调参数:

考虑特殊情况;只有一个单位区域,所有的例子都在其中,显然每个, 保持原始梯度贡献。每个例子最后得到重新表述的损失函数:

相同单元区域内的例子梯度密度相同。因此,我们可以使用直方图统计算法,计算所有梯度密度值的时间复杂度为。并且可以采用并行计算,使每个计算单元都有的计算量。在实际应用中,我们可以用相当少的单元区域获得良好的性能。相当小,损失计算很有效。

3、EMA

基于小批量统计的方法通常面临一个问题:当大量的极端数据在一个小批量中采样时,统计结果会产生严重的噪声,训练不稳定。指数移动平均(EMA)是解决这一问题的常用方法,如带动量的SGD和批量归一化。由于在近似算法中梯度密度来自于单元区域内的样本个数,因此我们可以在每个单元区域上应用均线来获得更稳定的梯度密度。 令是第j个单元中的第t次迭代。对取滑动平均值,我们有,

是动量参数,我们使用平均数来计算梯度密度而不是

使用EMA,梯度变化更加平滑并且对极端数据更加敏感。

4、GHM-R loss

考虑参数补偿,通过回归分组预测和目标补偿,通过ground-truth计算的,回归损失通常采用损失函数:

其中

其中是在二次部分和线性部分之间的分界点,在实际中通常设为1/9。

因为,,也是梯度平滑损失,可以表示为:

其中是符号函数。

注意,所有的例子大于除点,具有相同的梯度范数,这使得如果依赖梯度范数区分不同属性的例子变得不可能。一个可以替代的选择是直接使用作为不同属性的度量,但新的问题是在理论上可以达到无穷大,不能实现单位区域近似。

为了方便地将GHM应用于回归损失,我们首先将传统的损失修改为更简洁的形式:

这种损失与损失具有相似的性质:当很小时,它近似于二次函数(损失);当很大时,它近似于线性函数(L1损失)。由于修正后的损失函数具有良好的真实光滑性,我们将其表示为真实光滑L1 ()损失,这意味着所有阶导数都存在且连续。相比之下,光滑的损失的二阶导数不存在的点。此外,损失具有优雅的梯度形式,

梯度的范围仅为,因此回归中计算单位区域ASL1损失的密度与分类中计算CE损失一样方便。在实践中,我们设置µ= 0.02从损失与保持同样的性能损失。

我们定义的梯度准则从损失和收敛模型的梯度分布,如图4所示。我们可以看到有大量的异常值。注意,回归仅对正样本进行,因此分类与回归的分布趋势不同是合理的。综上所述,我们可以将GHM应用于回归损失:

图5为损失、损失和GHM-R损失的重新表述梯度贡献。轴采用,便于比较。

我们强调,在框回归中,并非所有的“简单例子”都不重要。分类中一个简单的例子通常是一个预测概率非常低的背景区域,并且肯定会被排除在最终候选区域之外。因此,这类例子的改进对精度几乎没有任何影响。但是在框回归中,一个简单的例子仍然与ground truth位置有偏差。任何例子的更好预测都将直接提高最终候选目标的质量。此外,高级数据集更关心定位精度。例如,COCO 以IoU阈值0.5到0.95之间的平均AP作为评价算法的度量。在这个度量中,一些所谓的简单示例(那些有小错误的)也很重要,因为减少它们的错误可以直接提高AP的高阈值(例如AP@ IoU = 0.75)。我们的GHM-R损失可以通过增加简单样本的重要部分的权重和降低异常值的权重来协调简单样本和困难样本对box回归的贡献。实验表明,该算法的性能优于

5、实验

我们在具有COCO挑战性的基准上评估我们的方法。在训练方面,遵循常用的做法将40k验证集划分为35k子集和5k子集。将35k验证子集与整个80k训练集结合起来进行训练,记为trainval35k集合。将5k验证子集记为minival集合,并对其进行消融研究。而我们的主要结果是在测试开发集上报告的。

1、实现细节

1、网络设置

我们使用RetinaNet作为网络架构,所有实验均采用ResNet作为骨干,采用特征金字塔网络(FPN) 结构。锚使用3个尺度和3个宽高比,便于与Focal Loss进行比较。所有实验的输入图像比例设置为800像素。所有消融研究均使用ResNet-50。而在test-dev上评估的最终模型采用ResNeXt-101。

2、优化

所有模型均采用常用的SGD算法进行优化。我们在8个GPU上训练模型,每个GPU上有2张图像,因此有效的小批量大小为16。所有模型训练14个epoch,初始学习率为0.01,在第9个epoch和第12个epoch分别下降了0.1倍和1倍。还使用了重量衰减参数0.0001和动量参数0.9。唯一的数据增强操作是水平翻转图像。对于梯度密度计算中使用的EMA,我们使用以来所有的实验结果对的精确值。

2、GHM-C Loss

关注GHM-C损失函数的影响,实验全部采用平滑损失函数和框回归分支。

1、baseline

训练了一个以标准交叉熵损失为baseline的模型。标准的初始化会导致快速的分歧,初始化最后一层的偏置项,以避免分歧。但是,在初始化过程中,分类的损失很小,因此我们将分类损失的权重提高了20,使求值损失更合理。但当模型收敛时,分类损失仍然很小,最终得到平均精度(AP)为28.6的模型。

2、区域单元的数量

表1为单位区域数的变化结果,是单位区域数。EMA在这里不应用。当过小时,密度对不同梯度范数的变化不大,性能也不太好。所以当不太大时,我们可以得到更多。然而,并不一定很大,当 = 30时,GHM-C损失比baseline有足够大的改善。

3、速度

因为我们的方法是一个损失函数,所以它不会改变推断的时间。对于训练而言,较小的,比如30就足以获得良好的性能,因此梯度密度计算所花费的时间并不长。表2显示了训练中每次迭代的平均时间和平均精度。这里使用梯度密度的原始定义实现了“GHM-C标准”,“GHM-C RU”表示区域单元近似算法的实现。实验在1080Ti GPU上进行。可以看到,区域单元近似算法加快了训练的幅度,对性能的影响可以忽略不计。与CE相比,GHM-C损失的降低也是可以接受的。由于我们的损失还没有完全实现GPU现在,仍然有改进的空间。

4、与其他方法的比较

表4显示了使用我们的损失与其他损失函数或抽样策略的比较结果。由于所报道的使用Focal Loss的缩小结果是用600像素的输入图像比例尺训练的,为了公平比较,我们使用800像素的比例尺重新训练了焦损模型,并保留了最佳的焦损参数。可以看到我们的损失比Focal Loss稍微好一些。

3、GHM-R Loss

1、与其他损失的比较

本文的实验采用了分类支路的GHM-C损失的最佳配置。所以第一个baseline是模型(使用SL1 loss训练),在GHM-C loss实验中AP为35.8。我们采用损失与损失得到类似的结果,获得一个公平baselineGHM-R损失。表5显示了baseline损失与损失以及GHM-R损失的结果。基于损失,我们可以看到增益为0.7。表6显示了不同IoU阈值下AP的详细情况。GHM-R损失稍微降低了AP@IoU=0.5,但是当阈值更高时,会增加,这表明我们的主张,即所谓的回归中的简单示例对于准确定位非常重要。

  

两阶段检测器:用于回归的GHM-R损失不限于一阶段检测器。为此,我们对两级检测器进行了实验验证。我们的baseline的方法是Fast R-CNN和Res50-FPN模型,使用loss进行box回归。表7显示GHM-R损失既适用于两阶段检测器,也适用于单阶段。

4、Main Results

我们使用32x8d的FPN-ResNext101主干和RetinaNet模型,其中GHM-C损失用于分类,GHM-R损失用于box回归。实验在test-dev set上进行。表3显示了我们的主要结果,并与最先进的方法进行了比较。我们的方法实现了出色的性能,并在大多数度量中优于Focal Loss。

6、结论和讨论

本文针对单阶段检测器中存在的两种不平衡问题,将这两种不平衡问题归结为梯度密度不协调问题,即样本的难易程度。提出了GHM-C和GHM-R两种损失函数,分别用来克服分类和边界盒回归的不协调。实验表明,单阶段与GHM协同工作,其性能可以很容易地超越具有相同网络骨干网的FPN、Mask R-CNN等现代最先进的两级检测器。

尽管选取均匀分布作为优化目标,但我们仍然认为梯度的最优分布难以确定,需要进一步研究。

Gradient Harmonized Single-stage Detector相关推荐

  1. 目标检测--Accurate Single Stage Detector Using Recurrent Rolling Convolution

    Accurate Single Stage Detector Using Recurrent Rolling Convolution CVPR 2017 商汤科技关于目标检测的文献 Code: htt ...

  2. 人脸检测--SSH: Single Stage Headless Face Detector

    SSH: Single Stage Headless Face Detector ICCV2017 https://github.com/mahyarnajibi/SSH 本文的人脸检测算法走的是又快 ...

  3. 《Gradient Harmonized Single-stage Detector》论文阅读以及代码分析

    由于香港中文大学多媒体实验室在深度学习时代发表论文的数量以及质量都是值得称赞的,故此对于算法工程师好好学习下https://github.com/open-mmlab/mmdetection是很有必要 ...

  4. 【阅读笔记】Gradient Harmonized Single-stage Detector

    Li B , Liu Y , Wang X . Gradient Harmonized Single-stage Detector[J]. 2018. https://github.com/libuy ...

  5. #Paper Reading# Gradient Harmonized Single-stage Detector

    论文题目: Gradient Harmonized Single-stage Detector 论文地址: https://www.aaai.org/ojs/index.php/AAAI/articl ...

  6. 论文阅读三:GHM《Gradient Harmonized Single-stage Detector》

    论文链接:Gradient Harmonized Single-stage Detector 论文来自香港中文大学 一.论文出发点    我们都知道,one-stage检测器一个极大的问题就是easy ...

  7. 论文阅读笔记五十四:Gradient Harmonized Single-stage Detector(CVPR2019)

    论文原址:https://arxiv.org/pdf/1811.05181.pdf github:https://github.com/libuyu/GHM_Detection 摘要 尽管单阶段的检测 ...

  8. 【3D 目标检测】3DSSD: Point-based 3D Single Stage Object Detector

    一 核心思路 本篇通过观察point-based目标检测方法中,在PointNet++的上采样层(FP层)和refinement Module上面耗费了大量时间,因此作者借此提出了one-stage的 ...

  9. 解决one-stage目标检测正负样本不均衡的另类方法--Gradient Harmonized

    正负样本不均衡问题一直是One-stage目标检测中被大家所诟病的地方,He Keming等人提出了Focal Loss来解决这个问题.而AAAI2019上的一篇论文<Gradient Harm ...

最新文章

  1. java使用类似ini文件IniProperties的类
  2. 【转】Linux添加/删除用户和用户组
  3. FFmpeg编译出错_img_convert 找不到
  4. 上手深度学习之前,我们先聊聊“数学”
  5. ScrollView 里面捕获OnTouchMove事件
  6. Atitit SpringCache缓存使用 艾提拉 attilax总结 1. Spring的抽象已经做得够好了,适合于大多数场景,非常复杂的就需要自己AOP实现了。 1 1.1. 设置配置文件支持
  7. OpenCV 网络视频传输 C++ 和 python实现
  8. 微pe工具箱 系统安装教程_微PE工具箱《U盘给电脑装GHOST系统》教程
  9. [Echarts][全网唯一]X轴axisLabel随文字长度自动旋转的实现思路
  10. 明基 X3000i 怎么样
  11. 【C++】由于找不到xxx.dll,无法继续执行代码,重新安装程序可能会解决此问题。(解决办法)
  12. 针对e场景活动发布网站使用及产品介绍
  13. 华为注册“鸿蒙”商标为自研操作系统铺路,或已经用于华为设备中。
  14. _15-骑士精神(IDA*)
  15. 大中型规模灵活定制的网吧组网方案(转)
  16. 矩阵理论及其应用课后习题作业:第五章 第六章
  17. HDU--1871--细节处理--记忆化暴力查找
  18. SIM卡套卡住的解决方法
  19. 三菱服务器动力插头型号,三菱q系列plc可编程控制器型号及说明.pdf
  20. LDN DM(SM)RGB 60 REV:1.0B 蓝牙5.2双模PCB说明

热门文章

  1. Java JCEF集成Chromium
  2. #{}和${}的使用
  3. 学习大数据前应该了解什么?
  4. JAVA-操作excel模版进行写入
  5. MySQL-学习数据库必备的基础知识
  6. java发现城市_java实现简单注册选择所在城市
  7. 数组传参(一维数组、二维数组)
  8. espn配置路由_华为敏捷网络解决方案.ppt
  9. 暑期实训心得及总结_史国旭
  10. Oracle中修改表列名(SQL语句)