GHM论文笔记(CVPR2019)
目录
作者要解决的问题
仍然是one-stage中的一个经典问题,正负、难易样本不均衡。因为anchor的原因,pos : neg>= 1 : 70。负样本大多比较简单,所以也导致了难易样本的问题。
Focal loss(CVPR2017)
Focal loss的解决方案
传统的交叉熵损失函数:
\[
L_{CE} = -[p^*(log(p) + (1-p^*)log(1-p)]
\]
\(p^*=\{0, 1\}\)为真实标签,\(p \in (0, 1)\)为网络的预测概率。可以看到,传统的交叉熵损失函数平等的看待正负样本。
Focal loss
\[
L = -[\alpha p^\gamma p^*log(p) + (1-\alpha)(1-p)^\gamma (1-p^*)log(1-p)]
\]
可以看到Focal loss引入了两个超参数\(\alpha, \gamma\),\(\alpha\)用来平衡正负样本,\(\gamma\)用来平衡难易样本。简单分析一下,加号的左侧是正样本的损失,右侧是负样本的损失。通过乘上不同的系数\((\alpha, 1-\alpha)\),来平衡正负样本。对于简单样本,其loss较小,概率值更接近真实标签,这样概率的\(\gamma\)次方越小,相反地,难样本的就会变大,使难样本的损失上升,使网络关注难样本。
Focal loss的不足
虽然Focal loss这篇论文也在一定程度上解决了正负样本不均衡的问题,但是Focal loss引入了两个超参数,调参费劲,且只能应用到box分类上,无法解决回归的问题。
设计思路
梯度与样本的关系
作者观察到难易样本的分布与梯度有着如下的关系,可以看到,梯度较小时(简单样本),样本数量非常多,梯度适中时,样本较少。另外值得注意的一点是,梯度在1左右的样本数量还是不少的。作者将这些样本视为异常值,解决特别难的样本会导致其他的样本准确率下降。

针对以上发现,作者采用梯度分布(梯度附近的样本数)来处理难易样本不平衡的问题。简单思路就是梯度小的样本数比较大,那就给他们乘上一个小系数,梯度大的样本少乘以一个大的系数。不过这个系数不是靠自己调的,而是根据样本的梯度分布来确定的。
梯度分布计算方法:将0-1的梯度切bin,计算每个bin内落入的样本数量。

其中\(\epsilon\)是每个bin的宽度,\(M\)是\(\epsilon\)的倒数,表示将0-1切分成多少个bin,\(R_{ind(g)}\)表示每个bin内落入的样本数,计算方法如下:
\[
R_{ind(g)} = \sum_{k=1}^{N} \delta(g_k,g) \quad \delta(g_k,g) =
\begin{cases}
1 \quad if \quad g-\frac{\epsilon}{2} <= g_k <= g+\frac{\epsilon}{2}\\
0 \quad otherwise
\end{cases}
\]
\[
\beta_i = \frac{N}{GD(g_i)}
\]
\(g\)是某点的梯度模,可以理解为以这一点创建一个bin,\(g_k\)是样本的梯度模,N是样本总数。
从上面式子可以看到,梯度分布越大,系数越小。
梯度模计算方法
具体的在二分类中,损失函数为上面提到的交叉熵函数
\[
L_{CE} = -[p^*(log(p) + (1-p^*)log(1-p)] \\
p=sigmoid(x)
\]
对x的梯度
\[
\begin{aligned}\frac{\partial L_{CE}}{\partial x} &= \frac{\partial L_{CE}}{\partial p} \times \frac{\partial p}{\partial x}\\&= (-\frac{p^*}{p} + \frac{1-p^*}{1-p}) \times p(1-p)\\&= p-p^*\end{aligned}
\]
定义梯度模\(g = |p-p^*|\)
改进
GHM-C损失函数
由此,作者提出分类的损失函数GHM-C
\[
L_{GHM-C} = \frac{1}{N}\sum\beta_i L_{CE}(p_i, p_{i}^{*})
\]

还是以这个图为例,在梯度较小时,样本数较大,梯度分布\(GD(g)\)较大,则系数较小,损失较小,这样就有效的减少了大量简单样本的作用。反之亦然。同样可以分析出特别难的样本也被抑制了。这一点也是作者希望看到的。
下面这张图的横坐标代表原先的梯度分布,纵坐标代表处理后的梯度分布。对比未经任何处理的CE曲线,在0附近的梯度,GHM-C处理后梯度被减小了,0.5左右的样本梯度被放大了,尤其值得一提的是,对于前面提到的异常样本,梯度同样被抑制了。对比Focal loss曲线,明显可以看出GHM-C更加优秀。

GHM-R损失函数
按理说像之前一样求下梯度分布就好了,不过这里有一个问题。
对于边框回归的传统损失函数smooth_L1

求梯度模
\(d= t_i - t_i^*\)

可以看到,当\(d>\delta\)时,梯度模横为1,无法衡量样本的难易程度。所以作者这里改了一下

d比较小的时候,类似于\(L_2\),d较大时候类似\(L_2\),和\(SL_1\)类似。最终的损失函数如下:

注意一点:回归的损失函数是只计算正样本的。
最终结果
COCO数据集上的比较

只有GHM-C的比较

只有GHM-R的比较

GHM论文笔记(CVPR2019)的更多相关文章
- Deep Learning论文笔记之(四)CNN卷积神经网络推导和实现(转)
Deep Learning论文笔记之(四)CNN卷积神经网络推导和实现 zouxy09@qq.com http://blog.csdn.net/zouxy09 自己平时看了一些论文, ...
- 论文笔记之:Visual Tracking with Fully Convolutional Networks
论文笔记之:Visual Tracking with Fully Convolutional Networks ICCV 2015 CUHK 本文利用 FCN 来做跟踪问题,但开篇就提到并非将其看做 ...
- Deep Learning论文笔记之(八)Deep Learning最新综述
Deep Learning论文笔记之(八)Deep Learning最新综述 zouxy09@qq.com http://blog.csdn.net/zouxy09 自己平时看了一些论文,但老感觉看完 ...
- Twitter 新一代流处理利器——Heron 论文笔记之Heron架构
Twitter 新一代流处理利器--Heron 论文笔记之Heron架构 标签(空格分隔): Streaming-process realtime-process Heron Architecture ...
- Deep Learning论文笔记之(六)Multi-Stage多级架构分析
Deep Learning论文笔记之(六)Multi-Stage多级架构分析 zouxy09@qq.com http://blog.csdn.net/zouxy09 自己平时看了一些 ...
- Multimodal —— 看图说话(Image Caption)任务的论文笔记(一)评价指标和NIC模型
看图说话(Image Caption)任务是结合CV和NLP两个领域的一种比较综合的任务,Image Caption模型的输入是一幅图像,输出是对该幅图像进行描述的一段文字.这项任务要求模型可以识别图 ...
- 论文笔记(1):Deep Learning.
论文笔记1:Deep Learning 2015年,深度学习三位大牛(Yann LeCun,Yoshua Bengio & Geoffrey Hinton),合作在Nature ...
- 论文笔记(2):A fast learning algorithm for deep belief nets.
论文笔记(2):A fast learning algorithm for deep belief nets. 这几天继续学习一篇论文,Hinton的A Fast Learning Algorithm ...
- 论文笔记:Towards Diverse and Natural Image Descriptions via a Conditional GAN
论文笔记:Towards Diverse and Natural Image Descriptions via a Conditional GAN ICCV 2017 Paper: http://op ...
随机推荐
- Spring注解开发系列Ⅲ --- 生命周期
Bean的生命周期 Spring Bean 的生命周期在整个 Spring 中占有很重要的位置,掌握这些可以加深对 Spring 的理解. 首先看下生命周期图: 再谈生命周期之前有一点需要先明确: S ...
- UNIX 版本
一般UNIX系统都来源于AT&T公司的System V UNIX系统,BSD UNIX或其他类UNIX系统. System V UNIX:当今市场上大多数主要的商业UNIX系统都是基于AT&a ...
- 10个很多人不知道的Redis使用技巧
前言 Redis 在当前的技术社区里是非常热门的.从来自 Antirez 一个小小的个人项目到成为内存数据存储行业的标准,Redis已经走过了很长的一段路.随之而来的一系列最佳实践,使得大多数人可以正 ...
- Arduino系列之中断函数
今天我将简单记录中断函数 函数分为外部中断和定时中断 外部中断的定义:一般由外设发出中断请求,如:键盘中断.打印机中断.外部中断需外部中断源发出中断请求才能发中断. 定时中断的定义:是指主程序在运行一 ...
- C语言指针及占据内存空间
第一.了解内存空间 本文章文字有点多,会有点枯燥,配合图文一起看可以缓解枯燥,耐心阅读哦!!! 先了解内存地址,才更好的理解指针! 我们可以把内存想象为成一列很长很长的货运火车,有很多大小相同的车厢, ...
- CSS 故障艺术
本文的主题是 Glitch Art,故障艺术. 什么是故障艺术?我们熟知的抖音的 LOGO 正是故障艺术其中一种表现形式.它有一种魔幻的感觉,看起来具有闪烁.震动的效果,很吸引人眼球. 故障艺术它模拟 ...
- 用ExpressionTree实现JSON解析器
今年的春节与往年不同,对每个人来说都是刻骨铭心的.突入其来的新型冠状病毒使大家过上了“梦想”中的生活:吃了睡,睡了吃,还不用去公司上班,如今这样的生活就在我们面前,可一点都不踏实,只有不停的学习才能让 ...
- Go语言项目中使用zap日志库(翻译)
本文先介绍了Go语言原生的日志库的使用,然后详细介绍了非常流行的Uber开源的zap日志库,同时介绍了如何搭配Lumberjack实现日志的切割和归档. 在Go语言项目中使用Uber-go的Zap L ...
- GBM,XGBoost,LightGBM
GBM如何调参:https://www.analyticsvidhya.com/blog/2016/02/complete-guide-parameter-tuning-gradient-boosti ...
- python笔记带你走向测试开发之路-第一篇(数据类型之数字,序列)
数字 数字的类型 数字是 Python中比较常用的数据类型,数字有可以分为: 整型 int如 1,2,3 浮点型 float如 2.1,3.5 长整型 long如 3L,需要注意的是 Python2. ...