Focal Loss(RetinaNet) 与 OHEM
Focal Loss for Dense Object Detection-RetinaNet
YOLO和SSD可以算one-stage算法里的佼佼者,加上R-CNN系列算法,这几种算法可以说是目标检测领域非常经典的算法了。这几种算法在提出之后经过数次改进,都得到了很高的精确度,但是one-stage的算法总是稍逊two-stage算法一筹,于是就有了Focal Loss来找场子。
在Focal Loss这篇论文中中,作者认为one-stage精确度不如two-stage是因为下面的原因:
① 正负样本比例极度不平衡。由于one-stage detector没有专门生成候选框的子网络,无法将候选框的数量减小到一个比较小的数量级(主流方法可以将候选框的数目减小到数千),导致了绝大多数候选框都是背景类,大大分散了放在非背景类上的精力;
② 梯度被简单负样本主导。我们将背景类称为负样本。尽管单个负样本造成的loss很小,但是由于它们的数量极其巨大,对loss的总体贡献还是占优的,而真正应该主导loss的正样本由于数量较少,无法真正发挥作用。这样就导致收敛不到一个好的结果。
既然负样本数量众多,one-stage detector又不能减小负样本的数量,那么很自然的,作者就想到减小负样本所占的权重,使正样本占据更多的权重,这样就会使训练集中在真正有意义的样本上去,这也就是Focal Loss这个题目的由来。
其实在Focal Loss之前,就有人提出了OHEM(online hard example mining)方法。OHEM的核心思想就是增加错分类样本的权重,但是OHEM却忽略了易分类样本,而我们知道这一部分是所有样本中的绝大部分。
与OHEM不同,Focal Loss把注意力放在了易分类样本上,它的形式如图所示。Focal Loss是一种可变比例的交叉熵损失,当正确分类可能性提高时比例系数会趋近于0。这样一来,即使再多的易分类样本也不会主导梯度下降的过程,于是训练网络自然可以自动对易分类样本降权,从而快速地集中处理难分类样本。
可以看出,Focal Loss打败了所有state-of-the-art的算法,而且竟然在速度上也是一马当先,可以说相当有说服力。但是作者为了证明Focal Loss的有效性,并没有设计更新颖的网络,这与其他算法提高精确度的做法是不一样的——他们要么改造原有算法的网络结构,要么另辟蹊径。另外,Focal Loss函数的形式并不是不可变的,只要可以达到对易分类样本降权的目的,可以在形式上有所变化。
总之,Class imbalance是阻碍one-stage方法提高准确率的主要障碍,过多的easy negative examples会在训练过程中占据主导地位,使训练结果恶化,所以要用Focal Loss对easy negative examples进行降权,而把更多的注意力集中在hard examples上。
OHEM: Training Region-based Object Detectors with Online Hard Example Mining
Hard example mining:https://github.com/abhi2610/ohem
主要有2种参见Hard example mining算法,优化SVM时候的算法和非SVM时的利用。
在优化SVM中使用Hard example mining时,训练算法主要维持训练SVM和在工作集上收敛的平衡迭代过程,同时在更新过程中去除一些工作集中样本并添加其他特殊的标准。这里的标准即去掉一些很容易区分的样本类,并添加一些用现有的模型不能判断的样本类,进行新的训练。工作集为整个训练集中的一小部分数据。
非SVM中使用时,该Hard example mining算法开始于正样本数据集和随机的负样本数据集,机器学习模型在这些数据集中进行训练使其达到该数据集上收敛,并将其应用到其他未训练的负样本集中,将判断错误的负样本数据(false positives)加入训练集,重新对模型进行训练。这种过程通常只迭代一次,并不获得大量的再训练收敛过程。
网络结构框架:
OHEM算法基于Fast R-CNN算法进行改进,作者认为Fast R-CNN算法中创造mini-batch用来进行SGD算法,并不具有高效和最优的状态,而OHEM可以取得lower training loss,和higher mAP。对比下图两种算法Fast R-CNN和OHEM结构:
对比可以发现,文章提出的OHEM算法里,对于给定图像,经过selective search RoIs,同样计算出卷积特征图。但是在绿色部分的(a)中,一个只读的RoI网络对特征图和所有RoI进行前向传播,然后Hard RoI module利用这些RoI的loss选择B个样本。在红色部分(b)中,这些选择出的样本(hard examples)进入RoI网络,进一步进行前向和后向传播。
Focal Loss(RetinaNet) 与 OHEM的更多相关文章
- 目标检测 | RetinaNet:Focal Loss for Dense Object Detection
论文分析了one-stage网络训练存在的类别不平衡问题,提出能根据loss大小自动调节权重的focal loss,使得模型的训练更专注于困难样本.同时,基于FPN设计了RetinaNet,在精度和速 ...
- 论文阅读笔记四十四:RetinaNet:Focal Loss for Dense Object Detection(ICCV2017)
论文原址:https://arxiv.org/abs/1708.02002 github代码:https://github.com/fizyr/keras-retinanet 摘要 目前,具有较高准确 ...
- focal loss和ohem
公式推导:https://github.com/zimenglan-sysu-512/paper-note/blob/master/focal_loss.pdf 使用的代码:https://githu ...
- focal loss和retinanet
这个是自己用的focal loss的代码和公式推导:https://github.com/zimenglan-sysu-512/Focal-Loss 这个是有retinanet:https://git ...
- Focal Loss理解
1. 总述 Focal loss主要是为了解决one-stage目标检测中正负样本比例严重失衡的问题.该损失函数降低了大量简单负样本在训练中所占的权重,也可理解为一种困难样本挖掘. 2. 损失函数形式 ...
- 深度学习笔记(八)Focal Loss
论文:Focal Loss for Dense Object Detection 论文链接:https://arxiv.org/abs/1708.02002 一. 提出背景 object detect ...
- [论文理解]Focal Loss for Dense Object Detection(Retina Net)
Focal Loss for Dense Object Detection Intro 这又是一篇与何凯明大神有关的作品,文章主要解决了one-stage网络识别率普遍低于two-stage网络的问题 ...
- 技术干货 | 基于MindSpore更好的理解Focal Loss
[本期推荐专题]物联网从业人员必读:华为云专家为你详细解读LiteOS各模块开发及其实现原理. 摘要:Focal Loss的两个性质算是核心,其实就是用一个合适的函数去度量难分类和易分类样本对总的损失 ...
- 论文阅读|Focal loss
原文标题:Focal Loss for Dense Object Detection 概要 目标检测主要有两种主流框架,一级检测器(one-stage)和二级检测器(two-stage),一级检测器, ...
随机推荐
- View 的滑动
View 的滑动 学习自 <Android开发艺术探索> 滑动漫谈 因为Android手机屏幕大小的原因,所以为了显式更多的信息,我们必须采用滚动的方式来处理,因为滚动就涉及到了滑动,有的 ...
- 运行程序,解读this指向---case5
function OuterFn() { innerFn = function() { console.log(1); }; return this; } OuterFn.innerFn = func ...
- 使用Plant Simulation连接SQL Server
1. 在管理类库中添加ODBC. 2. 在控制面板->管理工具中设置ODBC,添加SQL Server服务. 3. 在plant simulation中将信息流中的ODBC添加到Frame中. ...
- Android任务和返回栈完全解析(转)
转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/41087993 本篇文章主要内容来自于Android Doc,我翻译之后又做了些加工 ...
- BZOJ2888 : 资源运输
显然资源集合处就是树的重心,这题需要动态维护树的重心. 每个连通块以重心为根,用link-cut tree维护每个点的子树大小以及子树内所有点到它的距离和. 合并两个连通块时,考虑启发式合并,暴力往大 ...
- HDU 4770 Lights Against Dudely (2013杭州赛区1001题,暴力枚举)
Lights Against Dudely Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Ot ...
- [译] Go 并发编程基础
原文:Fundamentals of concurrent programming 译者:youngsterxyf 本文是一篇并发编程方面的入门文章,以Go语言编写示例代码,内容涵盖: 运行期并发线程 ...
- gnu--libc
https://www.gnu.org/software/libc/manual/html_node/index.html
- mysql slave 主从 指定表 通配符
slave配置 slave端有可能,只复制部分表,有一些表不需要备份配置如下: 有一些表你可能做水平或则垂直的处理.如果表的前几位一样,就可以用通配符%匹配 replicate-wild-ignore ...
- 大不列颠百科全书Encyclopaedia Britannica Ultimate 2014光盘镜像
大不列颠百科全书又名大英百科全书,是目前最古老的百科全书之一.大英百科全书每10余年出一个版本,如今已经推出到Encyclopaedia Britannica Ultimate 2014.此次推荐的是 ...