本文主要用于介绍各路大神(包括rbg, kaiming he等)于2017年提出的适用于目标领域的一种新的损失函数。本笔记主要为方便初学者快速入门,以及自我回顾。
论文链接:https://arxiv.org/abs/1708.02002
github主页:https://github.com/facebookresearch/Detectron
rbg大神个人主页:http://www.rossgirshick.info/#girshick2014rcnn
基本目录如下:
- 摘要
- 核心思想
- 总结
------------------第一菇 - 摘要------------------
1.1 论文摘要
目前最准确的目标检测模型就是以两阶段的R-CNN系列为代表的。相比之下,单阶段的目标检测模型虽然在准确率上依然落后于两阶段的模型,但是其简易和速度快的特性毫无疑问具有巨大的潜力。在这篇文章中,我们就深入调研为什么单阶段的模型其准确率会不甚理想。在调研过程中,我们发现最主要的一个问题就是在训练过程中的正负样本(背景和真实目标)不均匀。因此,我们设计了一个新的损失函数,来减少那些易于分类的样本带来的损失。我们新的Focal Loss损失函数重点关注那些难于被训练的(hard examples),并且尽量避免被那些负样本所带偏。为了验证我们模型的有效性,我们还重新设计了一个新的检测器,命名为RetinaNet,我们的实验表明,运用了新的损失函数以后,我们的RetinaNet在速度上已经能够媲美那些单阶段模型,同时在准确率上能够压制现存所有的两阶段模型(存疑)。
------------------第二菇 - 核心思想------------------
2.1 Focal Loss损失函数解释
既然本文把单阶段的模型不如多阶段的主要归因于正负样本不均衡这件事情,那我们就直接列出原文的观点。作者认为,正负样本不均衡将会导致,
1)training is inefficient as most locations are easy negatives that contribute no useful learning signal
2)en masse, the easy negatives can overwhelm training and lead to degenerate models
还是拿目标检测的场景来理解,单阶段的目标检测器通常会在第一阶段产生高达100k的候选目标,其中只有极少数是正样本,因此该场景就是一个典型的正负样本不平衡的问题(如下图所示),然后,正样本和负样本又都各自有难易之分,即有些正样本很容易区分,有些又很难区分,因此,正负样本又可以分为如下四类,
(注:如果有不明白的,结合具体的网上盗的一张示意图明白了【1】)
弄清楚了数据分布以后,我们再来看损失函数。我们最常用的在计算分类的时候常用的损失就是交叉熵损失(以二分类为例),
其中就是模型输出的概率(y=1),为了方便表述,通常定义,
此时,
然后,为了解决正负样本不平衡的问题,很自然的我们都会添加一个,该参数通常取决于正负样本的比例,
当然,只是平衡了正负样本对于最终损失的贡献度,但对难易不平衡的事情完全没有帮助。事实上,如上述第二条理由所述,在目标检测的任务中,存在着大量的易分样本,虽然单个来看每一个易分样本(置信度很高的样本)带来的损失很低,但是如果总的易分样本数量过多的话,积少成多,也会引领总的损失走向错误的方向。因此,本文作者也认为,模型应该重点关注那些难分的样本(hard examples),于是据此理论就提出了一个新的损失计算方法,
大家仔细研究一下这个公式就会发现,
1)当样本被错分的时候,通常是会比较小的,因此我们新加的权值项也是接近于1的,意思就是该项损失应该都有贡献;
2)而当样本是正确分类的时候,就会相对比较大,权值项也就对应变小了,意思就是该项损失的贡献是很少的;
因此,最终的Facal Loss就是结合了上述的2个点提出的,
这里也贴一张原论文中的图,作者发现的时候效果最佳~
2.2 RetinaNet网络介绍
其实整一套网络架构,跟RPN网络是比较像的,这里直接贴一张原论文中的网络架构图,
这里简单提几个关键的变化点,
1)其基础提取图片特征的模型采用的是ResNet,并且结合了FPN网络,用以构建不同层级对应的特征图,因此其基本的架构(backbone)就是ResNet + FPN的组合。
2)对应每一层级提出的特征,都会输入到2个结构一摸一样的子网络中(subnetworks),分别用于分类和回归!俩个子网络的架构是一样的,但是参数是不一样的(sharing a common structure, use separate parameters)。
3)Anchors的设计机制跟RPN中的是相似的,只不过对应到FPN中,每一层级特征图对应的Anchor大小是不一样的。每一个层级对应设置的Anchor比例为,每一种比例对应3种大小尺度,因此总的anchors数为9。
这里贴一张具体的实验结果图,方便以后查看(具体实验过程不再阐述),
当然作者本文的结论肯定就是,证明了这种Focal Loss设计的有效性了~
------------------第三菇 - 总结------------------
3.1 总结
到这里,整篇论文的核心思想已经说清楚了。本论文主要是提出了一个新的对于样本不均衡问题的损失函数的设计方法,并实验证明其可行性,为后续发展奠定了基础。
简单总结一下本文就是先罗列了一下该论文的摘要,再具体介绍了一下本文作者的思路,也简单表述了一下,自己对Focal Loss的理解。希望大家读完本文后能进一步加深对该论文的理解。有说的不对的地方也请大家指出,多多交流,大家一起进步~
参考文献:
【1】https://zhuanlan.zhihu.com/p/80594704