Generalized Focal Loss:Focal loss魔改以及预测框概率分布,保涨点 | NeurIPS 2020
为了高效地学习准确的预测框及其分布,论文对Focal loss进行拓展,提出了能够优化连续值目标的Generalized Focal loss,包含Quality Focal loss和Distribution Focal loss两种具体形式。QFL用于学习更好的分类分数和定位质量的联合表示,DFL通过对预测框位置进行general分布建模来提供更多的信息以及准确的预测。从实验结果来看,GFL能够所有one-stage检测算法的性能
来源:晓飞的算法工程笔记 公众号
论文: Generalized Focal Loss: Learning Qualified and Distributed Bounding Boxes for Dense Object Detection

Introduction
目前,dense detector(one-stage)是目标检测中的主流方向,论文主要讨论其中的两个做法:
- 预测框的表示方法(representation):可认为是网络对预测框位置的输出,常规方法将其建模为简单的Dirac delta分布,即直接输出位置结果。而有的方法将其建模为高斯分布,输出均值和方差,分别表示位置结果和位置结果的不确定性,提供额外的信息。

- 定位质量估计:最近一些研究增加了额外的定位质量预测,比如IoU-Net加入了IoU分数的预测和FCOS加入了centerness分数的预测,最后将定位质量以及分类分数合并为最终分数。
经过分析,论文发现上述的两个做法存在以下问题:

- 定位质量估计和分类分数实际不兼容:首先,定位质量估计和分类分数通常是独立训练的,但在推理时却合并使用。其次,定位质量估计只使用正样本点进行训练,导致负样本点可能估计了高定位质量,这种训练和测试的差异会降低检测的性能。
- 预测框表示方法不够灵活:大多算法将其建模为Dirac delta分布,这种做法没有考虑数据集中的歧义和不确定部分,只知道结果,不知道这个结果靠不靠谱。虽然有的方法将其建模为高斯分布,但高斯分布太简单粗暴了,不能反映预测框的真实分布。
为了解决上面的两个问题,论文分别提出了解决的策略:

- 对于定位质量估计,论文将其直接与分类分数进行合并,保留类别向量,每个类别的分数的含义变为与GT的IoU。另外,使用这种方式能够同时对正负样本进行训练,不会再有训练和测试的差异。

- 对于预测框的表示方法,使用general的分布进行建模,不再强加任何的约束,不仅能够获得可靠和准确的预测结果,还能感知其潜在的真实分布情况。如上图所示,对于存在歧义或不确定的边界,其分布会表现为较平滑的曲线,否则,其分布会表示为尖锐的曲线。
实际上,使用上述提到的两种策略会面临优化的问题。在常规的one-stage检测算法中,分类分支都使用Focal loss进行优化,而Focal loss主要针对离散的分类标签。在论文将定位质量与分类分数结合后,其输出变为类别相关的连续的IoU分数,不能直接使用Focal loss。所以论文对Focal loss进行拓展,提出了GFL(Generalized Focal Los),能够处理连续值目标的全局优化问题。GFL包含QFL(Quality Focal Los)和DFL( Distribution Focal Los)两种具体形式,QFL用于优化难样本同时预测对应类别的连续值分数,而DFL则通过对预测框位置进行general分布的建模来提供更多的信息以及准确的位置预测。
总体而言,GFL有以下优点:
- 消除额外的质量估计分支在训练和测试时的差异,提出简单且高效的联合预测策略。
- 很好地对预测框的真实分布进行灵活建模,提供更多的信息以及准确的位置预测。
- 在引入额外开销的情况下,能够提升所有one-stage检测算法的性能。
Method

Focal Loss (FL)
FL主要用于解决one-stage目标检测算法中的正负样本不平衡问题:

包含标准的交叉熵部分\(-log(p_t)\)以及缩放因子部分\((1-p_t)^{\gamma}\),缩放因子会自动将容易样本降权,让训练集中于难样本。
Quality Focal Loss (QFL)
由于FL仅支持离散标签,为了将其思想应用到分类与定位质量结合的连续标签,对其进行了扩展。首先将交叉熵部分\(-log(p_t)\)扩展为完整形式\(-((1-y)log(1-\sigma) + y\ log(\sigma))\),其次将缩放因子\((1-p_t)^{\gamma}\)泛化为预测值\(\sigma\)与连续标签\(y\)的绝对差值\(|y-\sigma|^{\beta}\),将其组合得到QFL:

\(\sigma=y\)为QFL的全局最小解。

缩放因子的超参数\(\beta\)用于控制降权的速率,表现如上图所示,假定目标连续标签\(y=0.5\),距离标签越远产生的权重越大,反之则趋向于0,跟FL类似。
Distribution Focal Loss (DFL)

论文跟其它one-stage检测算法一样,将当前位置到目标边界的距离作为回归目标。常规的方法将回归目标\(y\)建模为Dirac delta分布,Dirac delta分布满足\(\int^{+\infty}_{-\infty}\delta(x-y)dx=1\),可通过积分的形式求得标签\(y\):

如前面说到的,这种方法没有体现预测框的真实分布,不能提供更多的信息,所以论文打算将其表示为general的分布\(P(x)\)。给定标签\(y\)的取值范围\([y_0, y_n]\),可像Dirac delta分布那样从建模的genreal分布得到预测值\(\hat{y}\):

为了与神经网络兼容,将连续区域\([y_0, y_n]\)的积分变为离散区域\(\{y_0, y_1, \cdots, y_i, y_{i+1}, \cdots, y_{n-1}, y_n \}\)的积分,离散区域的间隔\(\Delta=1\),预测值\(\hat{y}\)可表示为:

\(P(x)\)可通过softmax操作\(\mathcal{S}(\cdot)\)获得,标记为\(\mathcal{S}_i\),预测值\(\hat{y}\)可使用常规的方法进行后续的end-to-end学习,比如Smooth L1、IoU loss和GIoU Loss。

但实际上,同一个积分结果\(y\)可由多种不同分布所得,会降低网络学习的效率。考虑到更多的分布应该集中于回归目标\(y\)的附近,论文提出DFL来强制网络提高最接近\(y\)的\(y_i\)和\(y_{i+1}\)的概率,由于回归预测不涉及正负样本不平衡的问题,所以DFL仅需要交叉熵部分:

DFL的全局最优解为\(\mathcal{S}_i=\frac{y_{i+1}-y}{y_{i+1}-y_i}\),\(\mathcal{S}_{i+1}=\frac{y - y_i}{y_{i+1}-y_i}\),使得\(\hat{y}\)无限接近于标签\(y\)。
Generalized Focal Loss (GFL)
QFL和DFL可统一地表示为GFL,假定值\(y_l\)和\(y_r\)的预测概率分别为\(p_{y_l}\)和\(p_{y_r}\),最终的预测结果为\(\hat{y}=y_l p_{y_l}+y_r p_{y_r}\),GT标签为\(y\),满足\(y_l \le y \le y_r\),将\(|y-\hat{y}|^{\beta}\)作为缩放因子,GFL的公式为:

GFL的全局最优在\(p^{*}_{y_l}=\frac{y_r-y}{y_r-y_l}\),\(p^{*}_{y_r}=\frac{y-y_l}{y_r-y_l}\)。

FL、QFL和DFL均可认为是GFL的特殊情况。使用GFL后,与原来的方法相比有以下不同:
- 分类分支的输出直接用于NMS,不用再进行两分支输出合并的操作
- 回归分支对预测框的每个位置的预测,从原来的输出单个值变为输出\(n+1\)个值
在使用GFL后,网络损失\(\mathcal{L}\)变为:

\(\mathcal{L}_{\mathcal{B}}\)为GIoU损失
Experiment

性能对比。

对比实验。

基于ATSS与SOTA算法进行对比。
Conclusion
为了高效地学习准确的预测框及其分布,论文对Focal loss进行拓展,提出了能够优化连续值目标的Generalized Focal loss,包含Quality Focal loss和Distribution Focal loss两种具体形式。QFL用于学习更好的分类分数和定位质量的联合表示,DFL通过对预测框位置进行general分布建模来提供更多的信息以及准确的预测。从实验结果来看,GFL能够所有one-stage检测算法的性能。
如果本文对你有帮助,麻烦点个赞或在看呗~
更多内容请关注 微信公众号【晓飞的算法工程笔记】

Generalized Focal Loss:Focal loss魔改以及预测框概率分布,保涨点 | NeurIPS 2020的更多相关文章
- Bert文本分类实践(二):魔改Bert,融合TextCNN的新思路
写在前面 文本分类是nlp中一个非常重要的任务,也是非常适合入坑nlp的第一个完整项目.虽然文本分类看似简单,但里面的门道好多好多,博主水平有限,只能将平时用到的方法和trick在此做个记录和分享 ...
- 魔改——MDI多视图模板Tab/标签页 初始化/操作控件
==================================声明================================== 本文原创,转载在正文中显要的注明作者和出处,并保证文章的完 ...
- 魔改——MFC SDI程序 转换为 MDI程序
==================================声明================================== 本文原创,转载在正文中显要的注明作者和出处,并保证文章的完 ...
- 魔改——MFC MDI程序 定制 文档模板 运行时全部打开 禁用关闭按钮
==================================声明================================== 本文原创,转载在正文中显要的注明作者和出处,并保证文章的完 ...
- L1 loss, L2 loss以及Smooth L1 Loss的对比
总结对比下\(L_1\) 损失函数,\(L_2\) 损失函数以及\(\text{Smooth} L_1\) 损失函数的优缺点. 均方误差MSE (\(L_2\) Loss) 均方误差(Mean Squ ...
- 【题解】BZOJ4241: 历史研究(魔改莫队)
[题解]BZOJ4241: 历史研究(魔改莫队) 真的是好题啊 题意 给你一个序列和很多组询问(可以离线),问你这个区间中\(\max\){元素出现个数\(\times\)元素权值} IOI国历史研究 ...
- Asp.Net Core Identity 骚断腿的究极魔改实体类
前言 默认的 Identity 实体类型在大多数时候已经基本够用,很多时候也只是稍微在 IdentityUser 类中增加一些自定义数据字段,比如头像.这次,我要向园友隆重介绍我魔改之后的 Ident ...
- 你没有见过的【高恪】船新版本(SX3000 NAT1 X86魔改)
最近魔改了高恪SX3000 X86,做了如下更改: 开启了SSH 集成了插件(酸酸乳.V2RXY.SMB等等) 开启了NAT1 DIY了主题 精简了官方内置的无用应用和模块 截图(建议右击图片,在新标 ...
- [7b2美化]柒比贰 魔改系列|7B2-分类封面添加波浪效果&每日诗词
本文转载自:钻芒博客 https://www.zmki.cn/5105.html 效果如图: 代码: 首先在style.css样式表里添加波浪样式 /*浪来了*/ .lang { overflow: ...
- 【题解】LOJ2462完美的集合(树DP 魔改Lucas)
[题解]LOJ2462完美的集合(树DP 魔改Lucas) 省选模拟考这个??????????????????? 题目大意: 有一棵树,每个点有两个属性,一个是重量\(w_i\)一个是价值\(v_i\ ...
随机推荐
- STC89C52控制74HC595,74HC138双色16x16点阵屏循环显示汉字
简介 常见的LED点阵除了使用MAX7219, 还有一部分是使用74HC595, 前者能主动刷新, 后者需要上位机主动扫描刷新. 手里这块是德飞莱的16x16LED点阵模块, 板上印的型号LY-LED ...
- sentry 在加载模块时闪退
这是一个很久之前的问题了,今天记录一下,以便遇到同样问题的同学能够看到此文章 崩溃环境: 目前仅收到 windows 7 的部分用户反馈,在程序启动时发生闪退 问题分析: 查看用户提供的日志,可以看见 ...
- AirtestProject浅尝辄止
AirtestProject是什么 AirtestProject是由网易游戏推出的UI自动化测试解决方案,主要包含3部分内容: 1.Airtest框架:跨平台的,基于图像识别的UI自动化测试框架,支持 ...
- 正则函数及面向对象开发初识---day19
1.正则函数 # ### 正则函数 import re #search 通过正则匹配出第一个对象返回,通过group取出对象中的值 strvar = "1+2 3*4" obj = ...
- Alpine安装gcc g++ make编译环境
apk add gcc g++ make cmake gfortran libffi-dev openssl-dev libtool
- 制作docker方式执行Gitlab Runner所需要的镜像
背景知识 启动Gitlab Runner时,使用Gitlab提供的官方镜像gitlab/gitlab-runner:latest即可. Runner以容器的方式启动以后,根据前文我们注册到Gitlab ...
- 【应用服务 App Service】App Service 中部署Java项目,查看Tomcat配置及上传自定义版本
当在Azure 中部署Java应用时候,通常会遇见下列的问题: 如何部署一个Java的项目呢? 部署成功后,怎么来查看Tomcat的服务器信息呢? 如果Azure提供的默认Tomcat版本的配置跟应用 ...
- 【Azure Developer】解答《美丽的数学》一书中P120页的一道谜题:寻找第四个阶乘和数
一道谜题 在观看<美丽的数学>一书中,在120页中有一道谜题: 数字145被称为一个阶乘和数, 因为它具有以下有趣的属性,如果我们将它的各位数字的阶乘相加,会得到该数字本身 1! +4! ...
- 【Azure Redis 缓存】使用Azure Redis服务时候,如突然遇见异常,遇见命令Timeout performing SET xxxxxx等情况,如何第一时间查看是否有Failover存在呢?
问题描述 使用Azure Redis服务时,如突然遇见异常,命令Timeout performing SET xxxxxx等情况,如何第一时间查看是否有Failover存在呢?看是否有进行平台的维护呢 ...
- kotlin协程小记
转载请标明出处:https://www.cnblogs.com/tangZH/p/16849169.html -[kotlin协程小记]-[协程的async使用]- [kotlin协程异常处理之-tr ...