Gradient Harmonized Single-stage Detector

  • 摘要
  • 介绍
  • 梯度协调机制
    • 问题描述
    • 梯度密度
    • GHM-C损失
    • Unit Region Approximation
      • 复杂度分析
      • 单位区域
      • 指数移动平均(EMA)
    • GHM-R 损失
  • 实验部分
    • 数据集
    • 实施细节
      • 网络设置:
      • 优化:

摘要

GHM( gradient harmonizing mechanism)的提出是为了解决单阶段检测器存在的正负样本和难易样本间差异巨大的问题。本文指出这种差异可以用梯度进行衡量,并据此提出了梯度平衡的机制GHM,该模块可以嵌入分类损失(GHM-C)和边框回归损失(GHM-R)中,从而达到平衡梯度流的作用。与Focal loss+soft L1相比COCO数据集mAP提高了0.8。

介绍

类别不平衡可以归为难易不平衡,难易不平衡可以归为梯度范数分布不平衡。所以类别(pos/neg)、难易(easy/hard)分布不平衡可以统称为属性(attribute)分布不平衡。
此外,梯度范数的分布暗示了不同属性(hard/easy和pos/neg)的样本的不均衡性。

梯度密度曲线如上图所示,横坐标是梯度的范数,纵坐标是样本数量,从图中可以看出,梯度范数小的简单负样本的数量要远多于梯度范数大的困难正样本的数量,这样即使对于单个样本而言简单负样本的梯度要小于困难正样本,但在如此多的数量的积累下也会是训练变得不充分。此外,我们还发现梯度范数非常大的样本(非常难的样本)的密度略大于中等的样本的密度。我们把这些非常困难的样本看作是离群值,因为即使在模型收敛的情况下它们也会稳定地存在。由于离群值的梯度可能与其他常见的样本有较大的差异,因此可能会影响模型的稳定性。

梯度协调机制

问题描述

设分类分支的输出为 xxx,则分类概率 p=S(x)p=S(x)p=S(x),其中S(x)S(x)S(x)是 SigmoidSigmoidSigmoid 激活函数。设分类的 GroundTruthGround TruthGroundTruth 为 p∗∈{0,1}p^*\in{\{0, 1\}}p∗∈{0,1}

分类交叉熵损失为:
LCE(p,p∗)=−(p∗×log(p)+(1−p∗)×log(1−p)){L_{CE}}(p, p^*)=-(p^*\times log(p)+(1-p^*)\times log(1-p))LCE​(p,p∗)=−(p∗×log(p)+(1−p∗)×log(1−p))
从而有:
g=∣∂LCE∂x∣=∣p−p∗∣g=|\frac{\partial{L_{CE}}}{\partial x}|=|p-p^*|g=∣∂x∂LCE​​∣=∣p−p∗∣
ggg 的值代表了一个样本的属性(例如容易或困难),并暗示了这个样本对全局梯度的影响。虽然梯度的严格定义是在整个参数空间上的,也就是说 ggg 是一个样本梯度的相对范数,但为了方便起见,本文将 ggg 称为梯度范数。


上图展示的是一个收敛模型的梯度范数 ggg 分布曲线,可以看出,非常简单的样本的数量是非常大的,这对全局梯度有很大的影响。此外,我们可以看到,收敛模型仍然不能处理一些非常困难的样本,这些样本的数量甚至大于中等难度的样本。这些非常难的样本可以看作是离群值,因为它们的梯度方向与其他大量样本的梯度方向相差很大。也就是说,如果收敛的模型被迫学会更好地对这些离群值进行分类,那么对大量其他样本的分类就会变得不那么准确。

梯度密度

ggg 点的梯度密度定义为梯度范数落入以 ggg 为中心,长度为 ϵ\epsilonϵ 的区间内的样本的数量,并用区间的实际长度进行归一化:
GD(g)=1lϵ(g)∑k=1Nδϵ(gk,g)GD(g)=\frac{1}{l_\epsilon(g)}\sum_{k=1}^N\delta_\epsilon(g_k,g)GD(g)=lϵ​(g)1​k=1∑N​δϵ​(gk​,g)
δϵ(gk,g)={1if g−ϵ2≤gk<g+ϵ20otherwise\delta_\epsilon(g_k,g)=\begin{cases} 1& \text{if $g-\frac{\epsilon}{2}\leq g_k < g+\frac{\epsilon}{2}$} \\ 0& \text{otherwise}\end{cases}δϵ​(gk​,g)={10​if g−2ϵ​≤gk​<g+2ϵ​otherwise​
lϵ(g)=min(g+ϵ2,1)−max(g−ϵ2,0)l_\epsilon(g)=min(g+\frac{\epsilon}{2},1)-max(g-\frac{\epsilon}{2},0)lϵ​(g)=min(g+2ϵ​,1)−max(g−2ϵ​,0)
现在我们将梯度密度调和参数定义为:
βi=NGD(gi)=1GD(gi)/N\beta_i=\frac{N}{GD(g_i)}=\frac{1}{GD(g_i)/N}βi​=GD(gi​)N​=GD(gi​)/N1​
其中 NNN 是样本总数,GD(gi)/NGD(g_i)/NGD(gi​)/N 是梯度范数密度,上式表明,密度大的例子将被归一化器相对向下加权。

GHM-C损失

LGHM−C=1N∑i=1NβiLCE(pi,pi∗)=∑i=1NLCE(pi,pi∗)GD(gi)L_{GHM-C}=\frac{1}{N}\sum_{i=1}^N\beta_iL_{CE}(p_i, p_i^*) =\sum_{i=1}^N\frac{L_{CE}(p_i, p_i^*)}{GD(g_i)}LGHM−C​=N1​i=1∑N​βi​LCE​(pi​,pi∗​)=i=1∑N​GD(gi​)LCE​(pi​,pi∗​)​

如上图所示,最佳参数配置的Focal Loss的梯度范数的密度趋势与GHM-C Loss相似,但GHM-C还具备一个Focal Loss忽略了的特征,即对离群点的梯度贡献进行降低权重的处理。

在我们的GHM-C损失中,大量非常简单的样本大部分是向下加权的,离群值也略微向下加权,这同时解决了属性不平衡问题和离群值问题。

从上图中可以看出,GHM-C协调了不同样本组的总梯度贡献。由于在每次迭代中都对梯度密度进行了计算,因此与Focal Loss不同,GHM-C的权重不是固定的,而是根据当前模型的状态和小批量数据进行动态调整的。GHM-C损失的动态特性使得训练更加有效和健壮。

Unit Region Approximation

复杂度分析

现在来回顾一下梯度范数调和系数βi\beta_iβi​的计算过程,首先模型输入一批N个样本,这里的样本指的是Anchors,N=图片数量*每张图片的预置Anchor数量,然后对于每个样本 anchorianchor_ianchori​可以计算得到它的梯度范数gig_igi​,将计算得到的梯度范数g进行排序,然后按规定的区间长度ϵ\epsilonϵ计算各样本对应的梯度范数调和系数βi\beta_iβi​,总的复杂度为排序算法的O(NlogN)O(NlogN)O(NlogN)和逐个计算调和系数的O(N)O(N)O(N)。可以看出直接计算梯度密度比较费时。因此,我们引入了另一种方法来近似地获得样本的梯度密度。

单位区域

我们将 ggg 的取值区间划分为长度为 ϵ\epsilonϵ 的单位区间,则这样的单位区间有 M=1ϵM=\frac{1}{\epsilon}M=ϵ1​ 个,我们将第 jjj 个单位区间记为 rj=[(j−1)ϵ,jϵ)r_j=[(j-1)\epsilon,j\epsilon)rj​=[(j−1)ϵ,jϵ),用 RjR_jRj​ 表示位于区间 rjr_jrj​ 的样本数量,我们用方程 ind(g)=ts.t.(t−1)ϵ≤g<tϵind(g)=t \space \space s.t. \space (t-1)\epsilon\le g<t\epsilonind(g)=t  s.t. (t−1)ϵ≤g<tϵ 计算 ggg 所在的单位区间的序号,然后我们就可以将近似的梯度密度定义为:
GD^(g)=Rind(g)ϵ=Rind(g)M\hat{GD}(g)=\frac{R_{ind(g)}}{\epsilon}=R_{ind(g)}MGD^(g)=ϵRind(g)​​=Rind(g)​M
然后,我们有近似计算的梯度密度调和参数:
β^i=NGD^(gi)\hat{\beta}_i=\frac{N}{\hat{GD}(g_i)}β^​i​=GD^(gi​)N​
最终GHM-C损失的计算如下:
L^GHM−C=1N∑i=1Nβ^iLCE(pi,pi∗)=∑i=1NLCE(pi,pi∗)GD^(gi)\hat{L}_{GHM-C}=\frac{1}{N}\sum_{i=1}^N\hat{\beta}_iL_{CE}(p_i,p_i^*)=\sum_{i=1}^N\frac{L_{CE}(p_i,p_i^*)}{\hat{GD}(g_i)}L^GHM−C​=N1​i=1∑N​β^​i​LCE​(pi​,pi∗​)=i=1∑N​GD^(gi​)LCE​(pi​,pi∗​)​

指数移动平均(EMA)

基于小批量统计的方法通常面临这样一个问题:当许多极端数据出现在同一个小批量中时,统计结果会产生严重的噪声,训练也会不稳定。指数移动平均(EMA)是解决这一问题的常用方法。由于在近似算法中梯度密度来自于单位区域的样本数量,我们可以在每个单位区域上应用EMA来获得更稳定的样本梯度密度。用 Rj(t)R_j^{(t)}Rj(t)​ 表示第 ttt 次迭代的第 jjj 个单位区域内的样本数量,Sj(t)S_j^{(t)}Sj(t)​ 表示移动平均数,则
Sj(t)=αSj(t)+(1−α)Rj(t)S_j^{(t)}=\alpha S_j^{(t)}+(1-\alpha)R_j^{(t)}Sj(t)​=αSj(t)​+(1−α)Rj(t)​
其中 α\alphaα 是动量参数,然后我们用移动平均数SjS_jSj​来代替RjR_jRj​计算梯度密度:
GD^(g)=Sind(g)ϵ=Sind(g)M\hat{GD}(g)=\frac{S_{ind(g)}}{\epsilon}=S_{ind(g)}MGD^(g)=ϵSind(g)​​=Sind(g)​M
使用EMA,梯度密度将更加平滑,达到对极端数据脱敏的目的。

GHM-R 损失

设边界框回归分支预测的编码后的边界框的偏移量为t=(tx,ty,tw,th)t=(t_x,t_y,t_w,t_h)t=(tx​,ty​,tw​,th​),由ground−truthground-truthground−truth计算的目标偏移量为t∗=(tx∗,ty∗,tw∗,th∗)t^*=(t_x^*,t_y^*,t_w^*,t_h^*)t∗=(tx∗​,ty∗​,tw∗​,th∗​),则SmoothL1Smooth \space L_1Smooth L1​损失方程为:
Lreg=∑i∈{x,y,w,h}SL1(ti−ti∗)L_{reg}=\sum_{i\in{\{x, y,w,h\}}}SL_1(t_i-t_i^*)Lreg​=i∈{x,y,w,h}∑​SL1​(ti​−ti∗​)
SL1(d)={d22δif ∣d∣≤δ∣d∣−2δotherwiseSL_1(d)=\begin{cases} \frac{d^2}{2\delta} &\text{if $|d|\le \delta$}\\ |d|-2\delta& \text{otherwise}\end{cases}SL1​(d)={2δd2​∣d∣−2δ​if ∣d∣≤δotherwise​
其中,δ\deltaδ 是二次部分和线性部分之间的分割点,通常在实践中设置为1/9。

因此,Smooth L1损失相对于tit_iti​的损失计算如下:
∂SL1∂ti=∂SL1∂d∂d∂ti={dδif ∣d∣≤δsgn(d)otherwise\frac{\partial SL_1}{\partial t_i}=\frac{\partial SL_1}{\partial d}\frac{\partial d}{\partial t_i}=\begin{cases}\frac{d}{\delta}&\text{if $|d|\le \delta$}\\ sgn(d)&\text{otherwise}\end{cases}∂ti​∂SL1​​=∂d∂SL1​​∂ti​∂d​={δd​sgn(d)​if ∣d∣≤δotherwise​
其中,d=(ti−ti∗)d=(t_i-t_i^*)d=(ti​−ti∗​),sgnsgnsgn 是符号方程。

注意,所有 ∣d∣>δ|d|>\delta∣d∣>δ 的样本将具有统一的梯度范数111,这使得依据梯度范数来区分具有不同特征(正负/难易)的样本变得不可能,一个替代想法是用∣d∣|d|∣d∣来表示梯度范数,但是∣d∣|d|∣d∣的取值理论上可达正无穷,这使得梯度密度单位区域的近似算法无法使用。

为了将GHM应用于回归损失,需要对原始的Smooth L1 损失进行改进,使其梯度范数的取值在0-1之间,从而可以用单位区域的近似算法来计算梯度密度。改进后的回归损失ASL1ASL_1ASL1​损失的计算如下:
ASL1(d)=d2+μ2−μASL_1(d)=\sqrt{d^2+\mu^2}-\muASL1​(d)=d2+μ2​−μ

Smooth L1 Loss

Authentic Smooth L1 Loss

从图中可以看出ASL1 loss和SL1 loss的特性相近,当d取值小时,它近似于L2 loss,当d取值大时,它近似于L1 loss。与SL1相比,ASL1更加光滑(具有各阶导数)并且ASL1梯度的形式更加优雅:

∂ASL1∂d=dd2+μ2\frac{\partial ASL_1}{\partial d}=\frac{d}{\sqrt{d^2+\mu^2}}∂d∂ASL1​​=d2+μ2​d​
可以看出梯度的取值范围为[0,1)[0,1)[0,1),因此计算回归损失ASL1的梯度密度就和计算分类损失LCE的梯度密度一样简单。实际中我们设置μ=0.02\mu=0.02μ=0.02来保持与Smooth L1 Loss表现的一致。

我们将ASL1的梯度范数定义为gr=∣dd2+μ2∣gr=|\frac{d}{\sqrt{d^2+\mu^2}}|gr=∣d2+μ2​d​∣,收敛模型的梯度分布如下图所示:


可以看出存在大量离群样本,值得注意的是,回归只对正例进行回归,所以分类和回归的分布趋势不同是合理的。

基于此,GHM-R 损失的定义如下:
LGHM−R=1N∑i=1NβiASL1(di)=∑i=1NASL1(di)GD(gri)L_{GHM-R}=\frac{1}{N}\sum_{i=1}^N\beta_iASL_1(d_i)=\frac{\sum_{i=1}^NASL_1(d_i)}{GD(gr_i)}LGHM−R​=N1​i=1∑N​βi​ASL1​(di​)=GD(gri​)∑i=1N​ASL1​(di​)​

各损失的梯度贡献如下图所示:

上图的横坐标为∣d∣|d|∣d∣,我们强调,在框回归中,并非所有“简单的样本”都是不重要的。一个简单的分类样本通常是预测概率非常低的背景区域,它肯定会被排除在最终候选区域之外。因此这类样本的改进对精度几乎没有贡献。但在框回归中,一个简单的样本仍然有对ground-truth位置的偏差。任何样本的更好预测都将直接提高最终候选框的质量。我们的GHM-R损失可以协调简单样本和困难样本对箱型回归的贡献,方法是增加简单样本中重要部分的权重,降低离群样本的权重。实验表明,该算法的性能优于SL1和ASL1。

实验部分

数据集

使用COCO2014数据集,划分为:

  • trainval35k:80k(the whole training set)+35K(from the 40k validation set)张图像,用于训练。
  • minival:5k张图像(from the 40k validation set),用于消融实验。
  • test-dev:用于汇报主要的实验结果。

实施细节

网络设置:

  • 网络结构:RetinaNet+ResNet+FPN
  • Anchor设置:为了方便与Focal Loss进行对比,使用3 scales 和 3 aspect ratios
  • 输入图像尺寸:800 pixels
  • Backbone:所有消融实验使用ResNet-50,最终test-dev汇报使用ResNeXt-101
  • 专门的偏置初始化:Focal Loss需要,我们的不需要。

优化:

  • 优化算法:SGD
  • Batch Size:8 GPU,2 imgs/GPU,Batch Size = 16
  • Schedule:初始学习率设为0.01,在第9和第12个epoch学习率分别下降为原来的0.1倍,共训练14个epochs,权重衰减设为0.0001,动量设为0.9
  • 数据增强:图像水平翻转
  • 移动平均算法动量参数设置:α=0.75\alpha=0.75α=0.75

【GHM (AAAI‘2019)】相关推荐

  1. 管理站点复制 【Windows Server 2019】活动目录(Acitve Directory)——在同一区域安装多台域控制器

    [Windows Server 2019]活动目录(Acitve Directory)--在同一区域安装多台域控制器 https://blog.csdn.net/nowshut/article/det ...

  2. pfv和php,【Retina China 2019】工欲善其事必先利其器——影像学在眼底病中的应用与发展...

    原标题:[Retina China 2019]工欲善其事必先利其器--影像学在眼底病中的应用与发展 编者按 影像学是眼底病诊治的利器,伴随着近年来影像学的飞速发展,眼底病展现出一种蓬勃的朝气.2月21 ...

  3. 【更新】【Windows Server 2019】存储服务器的配置和管理——iSCSI的安装和配置(上)

    目录 更新说明 0 实验拓扑及说明 目标 拓扑图 1. 部署iSCSI服务器 1.1 准备工作 1.2 安装iSCSI 1.3 查看防火墙设置 (1)入站规则 (2)出站规则 1.4 配置iSCSI服 ...

  4. 【Windows Server 2019】组策略的配置与管理——配置基于本地的组策略

    目录 2. 配置基于本地的组策略 2.1 打开本地组策略编辑器 (1)禁止本机用户编辑注册表 (2)禁用Windows Server 2019服务器的[关闭事件追踪程序] (3)禁用互联网属性对话框中 ...

  5. 【Windows Server 2019】活动目录 (Active Directory) ——将计算机加入域和脱离域

    目录 8. 将计算机加入域和脱离域 8.1 将客户机加入到fjnu.local域中 8.2 验证客户机加入到域后的信息 8.3 使用域账户用户在客户机上登录 8.4 使用本地账户用户在计算机上登录 8 ...

  6. 【Windows Server 2019】发布服务器 | 远程桌面服务的安装与配置 Ⅱ——配置RemoteAPP和访问

    目录 4. 配置RemoteAPP 4.2 设置要发布的APP 4.1 如何找到访问链接 5. 访问发布的RemoteAPP 关联博文 4. 配置RemoteAPP 4.2 设置要发布的APP (1) ...

  7. 【Windows Server 2019】发布服务器 | 远程桌面服务的安装与配置 Ⅰ——理论,实验拓扑和安装基于RemoteAPP的RDS

    目录 1. 理论 1.1 什么是远程桌面服务 2. 实验拓扑 2.1 拓扑说明 3. 安装基于RemoteAPP的RDS 关联博文 1. 理论 1.1 什么是远程桌面服务 远程桌面服务 (RDS) 是 ...

  8. 【Windows Server 2019】活动目录 (Active Directory) ——在同一区域安装多台域控制器

    目录 6. 安装多台域控制器 实验目的 6.1 配置服务器DNS2的IP地址 6.2 安装Active Diretory服务 6.3 将服务器DNS2提升为fjnu.local的域控制器 (1)进入[ ...

  9. 【Windows Server 2019】FTP服务的配置与管理——配置FTP站点(上)IP地址限制、身份验证、授权规则和请求筛选

    目录 5. 配置FTP站点 5.1 FTP IP地址和域限制 5.2 FTP身份验证 5.3 FTP授权规则 5.4 FTP请求筛选 参考资料 关联博文 5. 配置FTP站点 5.1 FTP IP地址 ...

最新文章

  1. 多组两两比较用什么检验方法_用SPSS进行不同变量多组间两两比较卡方检验.pdf...
  2. 周志华:深度学习理论探讨比应用滞后太多
  3. Python Excel操作模块XlsxWriter之插入图片worksheet.insert_image
  4. 微软BI 之SSIS 系列 - 利用 SSIS 模板快速开发 SSIS Package
  5. 用户类java,通过Java中的类和接口实现不同的用户类型
  6. Open*** 服务器的搭建
  7. Java泛型主题讨论
  8. Java对象内存图一
  9. 分布式机器学习_229页,CMU博士张昊毕业论文公布,探索机器学习并行化的奥秘...
  10. thinkphp 学习 (资料收集)
  11. python ----元组方法以及修改细节
  12. struts1(转)
  13. matlab仿真的五个步骤,matlab仿真步骤
  14. Multisim 14元件伏安特性测量
  15. HTML5后台管理模板
  16. ClickHouse可视化DBM Release 1.12.0
  17. Date对象之获取和设置月份getMonthsetMonth
  18. nRF5340开发指南目录汇总
  19. Vivado时序约束之—— set_max_delay、set_min_dealy(最大最小延迟约束)
  20. MySQL中建表时 pk、nn、qu、b、un、zf、ai、g代表的意思

热门文章

  1. linux内核区分光口电口吗,服务器网卡光口和电口的区别?
  2. ICP算法进行点云匹配
  3. Vue Element Admin 用mock模块模拟数据
  4. matlab 毕业答辩,MATLAB的答辩.ppt
  5. 设备中LPC2368芯片个例参数问题导致故障的分析
  6. 为什么8G运行内存的电脑,开几个WORD文档,运行内存就被占满了,WPS很占用内存吗
  7. c语言程序无法打开文件,C语言fopen()总是提示无法正常打开文件
  8. 数据挖掘基础:独立性检验
  9. 数学建模:整数规划示例模型 (Python 求解)
  10. python与建筑行业_Python+AI+CC,这些建模“高级功能”,90%的人不知道