了解focal loss

Focal Loss理解

1. 总述

Focal loss主要是为了解决one-stage目标检测中正负样本比例严重失衡的问题。该损失函数降低了大量简单负样本在训练中所占的权重,也可理解为一种困难样本挖掘。

 

2. 损失函数形式

Focal loss是在交叉熵损失函数基础上进行的修改,首先回顾二分类交叉上损失:

是经过激活函数的输出,所以在0-1之间。可见普通的交叉熵对于正样本而言,输出概率越大损失越小。对于负样本而言,输出概率越小则损失越小。此时的损失函数在大量简单样本的迭代过程中比较缓慢且可能无法优化至最优。那么Focal loss是怎么改进的呢?

 

 

 

首先在原有的基础上加了一个因子,其中gamma>0使得减少易分类样本的损失。使得更关注于困难的、错分的样本。

例如gamma为2,对于正类样本而言,预测结果为0.95肯定是简单样本,所以(1-0.95)的gamma次方就会很小,这时损失函数值就变得更小。而预测概率为0.3的样本其损失相对很大。对于负类样本而言同样,预测0.1的结果应当远比预测0.7的样本损失值要小得多。对于预测概率为0.5时,损失只减少了0.25倍,所以更加关注于这种难以区分的样本。这样减少了简单样本的影响,大量预测概率很小的样本叠加起来后的效应才可能比较有效。

此外,加入平衡因子alpha,用来平衡正负样本本身的比例不均:文中alpha取0.25,即正样本要比负样本占比小,这是因为负例易分。

 

只添加alpha虽然可以平衡正负样本的重要性,但是无法解决简单与困难样本的问题。

gamma调节简单样本权重降低的速率,当gamma为0时即为交叉熵损失函数,当gamma增加时,调整因子的影响也在增加。实验发现gamma为2是最优。

 

3. 总结

作者认为one-stage和two-stage的表现差异主要原因是大量前景背景类别不平衡导致。作者设计了一个简单密集型网络RetinaNet来训练在保证速度的同时达到了精度最优。在双阶段算法中,在候选框阶段,通过得分和nms筛选过滤掉了大量的负样本,然后在分类回归阶段又固定了正负样本比例,或者通过OHEM在线困难挖掘使得前景和背景相对平衡。而one-stage阶段需要产生约100k的候选位置,虽然有类似的采样,但是训练仍然被大量负样本所主导。

 

![在这里插入图片描述](https://img-blog.csdnimg.cn/2020091017081964.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3NoaXRvdWNvbWluZw==,size_16,color_FFFFFF,t_70#pic_center ![alpha(https://img-blog.csdnimg.cn/20200910170934240.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3NoaXRvdWNvbWluZw==,size_16,color_FFFFFF,t_70#pic_center)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在YOLOv7中使用Focal Loss,你需要进行以下步骤: 1. 首先,了解Focal Loss的原理。Focal Loss是一种针对目标检测任务的损失函数,用于解决类别不平衡和难易样本问题。它通过降低易分类样本的权重,提高难分类样本的权重,来增强模型对困难样本的学习能力。 2. 在YOLOv7的源代码中,找到损失函数的部分。这通常位于模型的训练脚本中,例如`train.py`或`yolo_loss.py`。 3. 在损失函数中,根据YOLOv7的网络结构和输出层的设置,计算每个预测框的分类损失。通常,YOLOv7使用交叉熵损失作为默认的分类损失函数。 4. 在计算分类损失时,修改损失函数的权重计算部分,以引入Focal Loss的公式。Focal Loss的公式如下: ![Focal Loss](https://miro.medium.com/max/1400/1*6XlKCgTfFGhiAFu3pL9nUQ.png) 其中,α是平衡因子,γ是调节因子。通过调整这两个参数,可以控制易分类样本与难分类样本之间的权重差异。 5. 根据Focal Loss的公式,修改损失函数的权重计算部分。具体地,将每个预测框的分类损失乘以Focal Loss的权重。 6. 重新训练YOLOv7模型,并观察Focal Loss对模型性能的影响。根据实际情况,可以调整α和γ的取值,以获得更好的结果。 请注意,以上步骤仅提供了一种在YOLOv7中使用Focal Loss的方法。具体的实现细节可能因你使用的代码库或框架而有所不同。建议查阅YOLOv7相关的代码和文档,以了解如何在你的特定环境中使用Focal Loss

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值