我个人认为,这篇论文的行文逻辑比较清晰,实验数据也比较充分,可以作为自己写论文的一个范本进行学习。
作者首先从一阶段与二阶段检测器的简要介绍开始,指出两者的共同点之一是都有采用anchor的机制,而其采用的anchor数量作者用massive来形容,但事实上只有很少的anchors会与物体相交较多,那么不采用anchor可以吗?当然可以,作者接着介绍了anchor-free的方式,最后引出本文想要解决的问题——the imbalance between foreground and background .
现有的解决此类问题的方法,主要可以分为hard sampling 与 soft sampling。
前者指从所有样本中,挑选一部分出来,主要的方法有:①mini-batch biased sampling,②online hard example mining(OHEM), ③Iou-balanced sampling等。
后者指为所有样本给予不同的权重,主要的方法有:①Focal loss,②gradient harmonizing mechanism(GHM)等。
诸如以上的这些sampling heuristics的方法,①只解决了训练过程中的不平衡问题,但没有解决推理过程中的不平衡。☆并且②会引入额外的超参,增加调参的难度。
既然存在这么多问题,那我们可以摒弃sampling heuristics的方法吗?现有的一些通过级联(cascade)的方式来减少背景样本的方法,尝试在这个方向有所突破,但①其会产生较多的计算量,②并且他们中的大多数还是没有完全摒弃sampling heuristics的方法。
这样看来不采用sampling heuristics的方法来训练检测器是不太现实的?作者首先对Non-Sampling Model进行训练,发现影响 非sampling heuristics 训练效果的关键在于:分类损失的体量与稳定性(其中稳定性由初始设置的偏置量大小决定,在保证速度的前提下,避免分类损失被负样本所淹没).
由此出发,提出了如下三个点,来构成本篇论文。
①Guided Loss Scaling
使用动态的w来约束分类损失的大小。
用作者的原话来说就是:
Use the regression loss value of the current mini-batch as the “target” of the rescaled classification loss value.
代码形式如下(Pytorch):
我们可以看到,这里的w是两个标量进行计算,即只改变分类损失的大小,其内部组成的比例没有改变,即不会改变梯度的方向。
作者这样做的理由也有如下三点:
1.基于之前对Non-Sampling Model进行的实验,无论是Focal Loss 还是 CE Loss,让分类损失与回归损失的数值相差不大时,会有较好的训练效果。
2.使用回归损失作为分类损失的导向,是简单好操作的。
3.回归损失不会被前后景不平衡所影响。
②Optimal Bias Initialization
也是基于之前对Non-Sampling Model进行的实验,发现当初始偏置到10的-5次方的时候,训练不会被负样本淹没。
同时,π = 1e-5时,整体的loss也最低,大大降低了训练初期梯度爆炸的风险。
作者通过CE对π进行求导,训练使得整体loss最低时的π值:
因此当π = Nf / N*C的时候,使得初始的CE值最小,避免其被负样本所淹没。
在RetinaNet中(不同网络这个值应该不一样)偏得统计得取N / Nf = 1000,C取COCO数据集的80类,因此得到π的最优值为1.25乘10的-5次方。
而计算出π值还未结束,本节的标题是最优偏置初始化,那为什么是偏置?
这里的π是经过最后一层神经网络分类分支的激活函数(sigmoid等)得到的值,而卷积层刚开始的时候初始化为0,即sigmoid(wx + bias) = sigmoid(bias) = π。
因此此时bias=-log(1-π/π),即bias的最优初始化值为:
③Adaptive Thresholding
类别自适应阈值的提出,其实是为了解决第二点初始化带来的负面影响,即使得RetinaNet-None预测的概率平均值是远远低于RetinaNet-FL,因此为了提高召回率,得降低这个阈值。
对每个类别,我们可以采用不同的过滤阈值。这里提出一种基于训练样本的类别自适应阈值(class-adaptive threshold):
其中第一项是正样本在负样本所占的比例,而第二项是各个类别在所有类中的所占比例。
实验验证及分析过程
挖个坑,后面再写。