Focal Loss2

Introduction

此篇论文获得了ICCV最佳学生论文奖,指导人是FAIR的He Kaiming大神:

众所周知,detector主要分为以下两大门派:

- one stage系 two stage系
代表性算法 YOLOv1、SSD、YOLOv2、YOLOv3 R-CNN、SPPNet、Fast R-CNN、Faster R-CNN
检测精度
检测速度

这种鱼(speed)与熊掌(accuracy)不可兼得的局面一直成为Detection的瓶颈。

究其原因,就是因为one-stage受制于万恶的 “类别不平衡” 。

  1. 什么是“类别不平衡”呢?

    详细来说,检测算法在早期会生成一大波的bbox。而一幅常规的图片中,顶多就那么几个object。这意味着,绝大多数的bbox属于background。

  2. “类别不平衡”又如何会导致检测精度低呢?

    因为bbox数量爆炸。

    正是因为bbox中属于background的bbox太多了,所以如果分类器无脑地把所有bbox统一归类为background,accuracy也可以刷得很高。于是乎,分类器的训练就失败了。分类器训练失败,检测精度自然就低了。

  3. 那为什么two-stage系就可以避免这个问题呢?

    因为two-stage系有RPN罩着。

    第一个stage的RPN会对anchor进行简单的二分类(只是简单地区分是前景还是背景,并不区别究竟属于哪个细类)。经过该轮初筛,属于background的bbox被大幅砍削。虽然其数量依然远大于前景类bbox,但是至少数量差距已经不像最初生成的anchor那样夸张了。就等于是 从 “类别 极 不平衡” 变成了 “类别 较 不平衡” 。

    不过,其实two-stage系的detector也不能完全避免这个问题,只能说是在很大程度上减轻了“类别不平衡”对检测精度所造成的影响。

    接着到了第二个stage时,分类器登场,在初筛过后的bbox上进行难度小得多的第二波分类(这次是细分类)。这样一来,分类器得到了较好的训练,最终的检测精度自然就高啦。但是经过这么两个stage一倒腾,操作复杂,检测速度就被严重拖慢了。

  4. 那为什么one-stage系无法避免该问题呢?

    因为one stage系的detector直接在首波生成的“类别极不平衡”的bbox中就进行难度极大的细分类,意图直接输出bbox和标签(分类结果)。而原有交叉熵损失(CE)作为分类任务的损失函数,无法抗衡“类别极不平衡”,容易导致分类器训练失败。因此,one-stage detector虽然保住了检测速度,却丧失了检测精度。

这个时候,He Kaiming带着他的《Focal Loss》出现了。

该篇文章指出,“类别不平衡”是one-stage detector在精度上逊于two-stage detector的病结所在。

那么,只要通过将原先训练 回归任务 惯用的 交叉熵误差 (CE(pt)=−αtlog⁡(pt)" role="presentation">CE(pt)=?αtlog(pt)CE(pt)=?αtlog?(pt)) 改为 FL (focal loss) 即可。

focal loss的标准公式非常简单:

FL(pt)=−(1−pt)γlog⁡(pt)=(1−pt)γCE(y^)i" role="presentation">FL(pt)=?(1?pt)γlog(pt)=(1?pt)γCE(y? )iFL(pt)=?(1?pt)γlog?(pt)=(1?pt)γCE(y^)i

也可以更复杂一点(论文中的实验即采用此公式):

FL(pt)=−αt(1−pt)γlog⁡(pt)" role="presentation">FL(pt)=?αt(1?pt)γlog(pt)FL(pt)=?αt(1?pt)γlog?(pt)

本质改进点在于,在原本的 交叉熵误差 (CE(pt)=−αtlog⁡(pt)" role="presentation">CE(pt)=?αtlog(pt)CE(pt)=?αtlog?(pt)) 前面乘上了 (1−pt)γ" role="presentation">(1?pt)γ(1?pt)γ 这一权重。

我推算了一下乘上该权重所带来的影响:

loss量级 量大的类别 (如background) 量少的类别
被正确分类时的loss 大幅↓" role="presentation">↓↓ 稍微↓" role="presentation">↓↓
被错误分类时的loss 适当↓" role="presentation">↓↓ 近乎保持不变

也就是说,一旦乘上了该权重,量大的类别所贡献的loss被大幅砍削,量少的类别所贡献的loss几乎没有多少降低。虽然整体的loss总量减少了,但是训练过程中量少的类别拥有了更大的话语权,更加被model所关心了。

为此,FAIR还专门写了一个简单的one-stage detector来验证focal loss的强大。并将该网络结构起名RetinaNet:

文章也对于 γ" role="presentation">γγ 的取值做了一番实验:

在实验中,发现 γ=2,α=0.25" role="presentation">γ=2,α=0.25γ=2,α=0.25 的取值组合效果最好。

Innovation

文章的两大贡献:

  1. new cls loss:Focal Loss

    FL(pt)=−(1−pt)γlog⁡(pt)" role="presentation">FL(pt)=?(1?pt)γlog(pt)FL(pt)=?(1?pt)γlog?(pt)

  2. new network:RetinaNet

    RetinaNet = FPN + sub-network + FL

Note

  • RetinaNet简单而十分强大,以至于成为了当下最佳(accuracy/speed/complexity trade-off)的detector之一。
  • RetinaNet的detector部分是两条平行pipe-line,且 设计相同 (除了尾部的output不一样) 但 参数不共享 (Faster R-CNN中第一层的参数是共享的) 。
  • reg_pipe-line直接输出target,所以是采用了无分类的bbox regressior(Faster R-CNN是每个类各一个bbox regressor)。

Result

新的detector标杆,state-of-the-art一词的新定义:

Thinking

  • focal loss的提出就像海面上的冰山。虽然看起来只是一个公式(冰山一角),但其实是来源于FAIR对于类别不平衡根本原因的深刻洞察和分析(海平面下的部分)。
  • 指出问题的意义远大于解决问题。focal loss很简单,但却是它第一个洞察到了one-stage detector的accuracy不高的问题根源在于“类别不平衡”。
  • RetinaNet就是一个FPN-based的one-stage detector,靠着最后面的focal loss来解决由于过量background而引起的类别不平衡。


[1] Focal Loss for Dense Object Detection

[2] 度学习: 分类 目标函数 (交叉熵误差(CE) -> 焦点误差(FL))

原文地址:https://www.cnblogs.com/leebxo/p/10434451.html

时间: 2024-07-30 21:37:11

Focal Loss2的相关文章

Focal Loss for Dense Object Detection 论文阅读

何凯明大佬 ICCV 2017 best student paper 作者提出focal loss的出发点也是希望one-stage detector可以达到two-stage detector的准确率,同时不影响原有的速度.one-stage detector的准确率不如two-stage detector的原因,作者认为原因是:样本的类别不均衡导致的.因此针对类别不均衡问题,作者提出一种新的损失函数:focal loss,这个损失函数是在标准交叉熵损失基础上修改得到的.这个函数可以通过减少易

Focal Loss 的理解

论文:<Focal Loss for Dense Object Detection> Focal Loss 是何恺明设计的为了解决one-stage目标检测在训练阶段前景类和背景类极度不均衡(如1:1000)的场景的损失函数.它是由二分类交叉熵改造而来的. 标准交叉熵 其中,p是模型预测属于类别y=1的概率.为了方便标记,定义: 交叉熵CE重写为: α-平衡交叉熵: 有一种解决类别不平衡的方法是引入一个值介于[0; 1]之间的权重因子α:当y=1时,取α; 当y=0时,取1-α. 这种方法,当

Focal Loss

转自:https://blog.csdn.net/u014380165/article/details/77019084 论文:Focal Loss for Dense Object Detection 论文链接:https://arxiv.org/abs/1708.02002 优化版的MXNet实现:https://github.com/miraclewkf/FocalLoss-MXNet RBG和Kaiming大神的新作. 我们知道object detection的算法主要可以分为两大类:t

Focal Loss for Dense Object Detection(RetinaNet)

Focal Loss for Dense Object Detection ICCV2017 RBG和Kaiming大神的新作. 论文目标 我们知道object detection的算法主要可以分为两大类:two-stage detector和one-stage detector.前者是指类似Faster RCNN,RFCN这样需要region proposal的检测算法,这类算法可以达到很高的准确率,但是速度较慢.虽然可以通过减少proposal的数量或降低输入图像的分辨率等方式达到提速,但是

focal loss for multi-class classification

转自:https://blog.csdn.net/Umi_you/article/details/80982190 Focal loss 出自何恺明团队Focal Loss for Dense Object Detection一文,用于解决分类问题中数据类别不平衡以及判别难易程度差别的问题.文章中因用于目标检测区分前景和背景的二分类问题,公式以二分类问题为例.项目需要,解决Focal loss在多分类上的实现,用此博客以记录过程中的疑惑.细节和个人理解,Keras实现代码链接放在最后. 框架:K

[论文理解]Focal Loss for Dense Object Detection(Retina Net)

Focal Loss for Dense Object Detection Intro 这又是一篇与何凯明大神有关的作品,文章主要解决了one-stage网络识别率普遍低于two-stage网络的问题,其指出其根本原因是样本类别不均衡导致,一针见血,通过改变传统的loss(CE)变为focal loss,瞬间提升了one-stage网络的准确率.与此同时,为了测试该loss对网络改进的影响,文章还特地设计了一个网络,retina net,证明了其想法. Problems 为啥one-stage网

Focal Loss解读

Focal loss论文详解 链接:https://zhuanlan.zhihu.com/p/49981234 何恺明大神的「Focal Loss」,如何更好地理解? 链接:https://zhuanlan.zhihu.com/p/32423092 原文地址:https://www.cnblogs.com/kandid/p/11453572.html

处理样本不平衡的LOSS—Focal Loss

0 前言 Focal Loss是为了处理样本不平衡问题而提出的,经时间验证,在多种任务上,效果还是不错的.在理解Focal Loss前,需要先深刻理一下交叉熵损失,和带权重的交叉熵损失.然后我们从样本权利的角度出发,理解Focal Loss是如何分配样本权重的.Focal是动词Focus的形容词形式,那么它究竟Focus在什么地方呢?详细的代码请看Gitee. 1 交叉熵 1.1 交叉熵损失(Cross Entropy Loss) 有\(N\)个样本,输入一个\(C\)分类器,得到的输出为\(X

Up to 8% free bonus for runescape 2007 gp on Rsorder as july best gift&Enjoy Telos During 7.1-7.22

Now, a small band of freedom fighters struggle to end the osrs gold  long, dark night of Daein's oppression. The big blog news of the day is that Vox Media has acquired Curbed Network. As an amulet you should be wearing an amulet of glory and if you