重新看这篇文章是因为最近看到一篇论文FoveaBox算法的基础框架是RetinaNet,所以干脆重新记录一下。
1.Focal loss:
在文章中提出 one-stage 的检测模型在精度上没有two-stage的检测模型好的原因是类别不平衡,Focal loss 的提出是为了解决检测中简单-困难样本不均衡的问题【提高困难样本对模型的影响】。
------------------------------------------------------------------------------------------------------------------------------------------------------------------
关于类别不平衡:
一幅图像中目标是有限的,因此生成的bbox大部分是属于background,少数属于ground truth,这就是类别不平衡。
针对one-stage的检测,可以知道是直接对一开始生成的bbox进行分类回归,存在过多的容易分类的负样本,虽然能加快检测精度,但是因为类别不平衡容易使得训练失败,影响精度。
针对two-stage的检测,可以知道因为有RPN网络的存在首先筛选了一开始生成的bbox,缓解了bbox中类别不平衡的程度
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
Focal Loss的公式如下:
主要的改进:
- 原有的交叉熵loss之前添加了项,其中是大于0的,该因子的存在可以区分简单-困难样本。
1)当样本为困难样本,即非常小时,影响因子趋近于1,样本对模型的影响近乎不变
2)当样本为非困难样本,即趋近于1时,影响因子趋近于0,则样本对模型的影响会降低
3)可以改变简单样本对模型的影响权重:
当时, ;当增大时,影响因子的影响力也增加
【在论文实验中,为2时,实验效果最好】
- 因子的存在可以平衡正负样本。
对于ground truth来说为,background为
【在论文实验中,为0.25时,实验效果最好】
------------------------------------------------------------------------------------------------------------------------
在论文中还有几个结果:
1)一般默认情况下,二进制分类中正负样本的分类初始概率是相同的,在这种初始化中,由于类别不平衡,会造成早期训练的不稳定(即,在样本中占有数量多的会在一开始起主导作用,造成不稳定)
解决方法:设置初始化的值。
在论文里提出,在一开始,引入了前景(数量少的类)类的先验概率概念,用表示先验概率。并且将这个概率值设置为一个较低的数值(文中取:=0.01),使得初始化时,难检测样本(量少的样本/前景样本)的概率较低,能够保留这些样本对模型的影响力,能够缓解早期不稳定的现象。
在实验过程中,除了子网络的最后一层的所有新的卷积层都采用初始化参数:;
对于子分类网络的最后卷积层,将偏差初始化设置为
2),时的实验结果最好,两个参数要一起设置。
------------------------------------------------------------------------------------------------------------------------
2.RetinaNet是为了验证Focal loss的实验框架:
实质上是一个基于FPN思想的one-stage检测框架,最后的loss函数是Focal loss。
RetinaNet 网络是由一个主网络和两个特定的子任务网络组成,是one-stage检测模型。
主网络:计算整个输入图像的卷积特征图
第一个特定子网络:对对象分类;第二个特定子网络:对边界框进行回归。
1)ResNet+FPN网络:主网络,构建多尺度特征(P3-P7)金字塔,用于检测不同尺度比例的物体。
2)Anchors:与RPN中的类似。
在P3-P7尺度上分别有322-5122个区域。使用的anchors尺度比例为{1:2; 1:1, 2:1}.此外还添加了,这样子的操作能提升AP。假设对象类别为K,则A个anchors中的每个anchor都对应了长度为K的向量和4个边框回归的向量。
3)分类子网络:预测A个anchors与K个对象之间存在的概率。该网络是连接到每个FPN尺度的小型FNC网络。
4)回归子网络:与分类子网络并行,也是一个小的FNC结构,回归anchor的边框偏移量。
- 对每个尺度的特征图来说,两个子网络的参数都是共享的。
- 两个子网络之间的参数是互相独立的。