Focal loss

什么是样本不均衡?

大家都知道,one-stage的检测精度比不上two-stage,一个主要原因是训练过程样本不均衡造成的。

这里先记录下几个检测任务中的基本概念;

  1. 正样本:标签区域内部的图像区域,也就是目标图像块。
  2. 负样本:标签区域以外的图像区域,也就是背景区域。
  3. 易分正样本:容易正确分类的正样本,单个loss小,单数数量多,累计Loss大。
  4. 易分负样本:容易正确分类的负样本,单个loss小,单数数量多,累计Loss大。
  5. 难分正样本:错分成负样本的正样本,单个loss大,单数数量少,累计Loss小。
  6. 难分负样本:错分成正样本的负样本,单个loss大,单数数量少,累计Loss小。

有了上面的概念,不难理解,所谓样本不均衡是指两个不均衡:正样本数量和负样本数量不均衡(比例有1:1000),难易样本不均衡(简单样本累计loss大,主导了loss)。现在的目标检测中,训练数据集**正负样本一般保持1:3**.

two-stage为什么可以避免样本极不平衡?

two-stage方法在第一阶段生成候选框,RPN只是对anchor box进行简单背景和前景的区分,并不对类别进行区分,经过这一轮处理,过滤掉了大部分属于背景的anchor box,较大程度降低了anchor box正负样本的不平衡性(注意:只是减轻了样本不平衡并没有解决样本不平衡);同时在第二阶段采用启发式采样(如:正负样本比1:3)或者OHEM进一步减轻正负样本不平衡的问题。

one-stage为什么不能避免样本极不平衡?

one-stage方法为了提高检测速度,舍弃了生成候选框这一阶段,直接对anchor box进行难度更大的细分类(不只是区分前景背景,还区分anchor box属于什么类别),缺少了对anchor box的筛选过程。

概述

作者提出focal loss的出发点也是希望one-stage detector可以达到two-stage detector的准确率,同时不影响原有的速度。Focal loss就是专门为一阶段检测算法设计的,将易区分负例的loss权重降低,使得网络不会被大量的负例带偏。

one-stage detector的准确率不如two-stage detector的原因,本文给出的结论是:由样本的 类别不均衡 导致。

在目标检测算法中,对于输入的一张图像,可能会生成成千上万的预选框(region proposal),但是其中只有很少一部分是包含真实目标的,这就带来了类别不均衡问题。

那么类别不均衡会带来两个后果:

(1) training is inefficient as most locations are easy negatives that contribute no useful learning signal;

(2) the easy negatives can overwhelm training and lead to degenerate models.

总的来说,就是无用的易分反例样本会使得模型的整体学习方向跑偏,导致无效学习,即只能分辨出没有物体的背景,而无法分辨具体的物体。负样本数量太大,占总的loss函数输入参数的大部分,而且多是容易分类的,因此使得模型的优化方向(即loss函数的梯度下降方向)并不是我们所希望的那样。

先前也有一些算法来处理类别不均衡的问题,比如OHEM(online hard example mining),OHEM算法虽然增加了错分类(正、负)样本的权重,但是OHEM算法忽略了容易分类的(正)样本。

算法

介绍focal loss,在介绍focal loss之前,先来看看交叉熵损失,这里以二分类为例,原来的分类loss是各个训练样本交叉熵的直接求和,也就是各个样本的权重是一样的。公式如下:
在这里插入图片描述
在这里插入图片描述
有图可见,其中 y 是真实样本的标签(1正0负), y’ 是经过 sigmoid 激活函数的预测输出(数值在0-1之间)。可见普通的交叉熵对于正样本而言,输出概率越大损失越小。对于负样本而言,输出概率越小则损失越小。

作者由此提出Focal loss函数
在这里插入图片描述
首先在原有的基础上加了一个因子,其中γ>0使得减少易分类样本的损失,使得模型更关注于困难的、错分的样本。

例如:γ=2时,
在这里插入图片描述假设阈值0.7。

对于正样本,预测结果为0.95肯定是简单样本,原损失-log(0.95)=0.0223,现损失-(1-0.95)^2 *log(0.95)=0.000056,这时损失函数值就变得更小,缩小了0.0025倍。而预测概率为0.56的样本肯定是困难样本,原损失-log(0.56)=0.2518,现损失-(1-0.56)^2 *log(0.56)=0.048,仅仅缩小了0.2倍,其损失相对还是很大。

对于负样本而言同样,预测0.1肯定是简单样本,原损失-log(1-0.1)=0.046,现损失-(0.1)^2 *log(1-0.1)=0.00045,这时损失函数值就变得更小,缩小了0.01倍。而预测概率为0.5的样本肯定是困难样本,原损失-log(1-0.5)=0.3,现损失-(1-0.5)^2 *log(1-0.5)=0.075,仅仅缩小了0.25倍,其损失相对还是很大。

focal loss:
在这里插入图片描述
绘制图看如下Figure1,横坐标是pt,纵坐标是loss。CE(pt)表示标准的交叉熵公式,FL(pt)表示focal loss中用到的改进的交叉熵。Figure1中γ=0的蓝色曲线就是标准的交叉熵损失。
在这里插入图片描述
在此基础上,再引入一个平衡因子 Alpha,用来平衡正负样本本身的数量比例不均(即类别不均衡):
在这里插入图片描述
在这里插入图片描述

只添加Alpha虽然可以平衡正负样本的重要性,但是无法解决简单与困难样本的问题,因此针对难分样本的Gamma也必不可少。

这里的两个参数α和γ协调来控制,本文作者采用α=0.25(1:3),γ=2效果最好。

Gamma调节简单样本权重降低的速率,当Gamma为0时即为交叉熵损失函数,当Gamma增加时,调整因子的影响也在增加。

这里介绍下focal loss的两个重要性质:

1、当一个样本被分错的时候,pt是很小的,那么调制因子(1-Pt)接近1,损失不被影响;当Pt→1,因子(1-Pt)接近0,那么分的比较好的(well-classified)样本的权值就被调低了。因此调制系数就趋于1,也就是说相比原来的loss是没有什么大的改变的。当pt趋于1的时候(此时分类正确而且是易分类样本),调制系数趋于0,也就是对于总的loss的贡献很小。

2、当γ=0的时候,focal loss就是传统的交叉熵损失,当γ增加的时候,调制系数也会增加。 专注参数γ平滑地调节了易分样本调低权值的比例。γ增大能增强调制因子的影响,实验发现γ取2最好。直觉上来说,调制因子减少了易分样本的损失贡献,拓宽了样例接收到低损失的范围。当γ一定的时候,比如等于2,一样easy example(pt=0.9)的loss要比标准的交叉熵loss小100+倍,当pt=0.968时,要小1000+倍,但是对于hard example(pt < 0.5),loss最多小了4倍。这样的话hard example的权重相对就提升了很多。这样就增加了那些误分类的重要性

focal loss的两个性质算是核心,其实就是用一个合适的函数去度量难分类和易分类样本对总的损失的贡献。

作者在实验中采用的是公式5的focal loss(这样既能调整正负样本的权重,又能控制难易分类样本的权重):
在这里插入图片描述
参考(感谢)
https://blog.csdn.net/chenran187906/article/details/102668130
https://blog.csdn.net/qq_34199326/article/details/83824778

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值