FL & RetinaNet 学习笔记
Abstract & Introduction
目标检测算法主要分为two-stage detector和one-stage detector。一般来说,two-stage detector比one-stage detector的精度要高,但是速度较慢。虽然two-stage detector可以通过减少proposal的数量或降低输入图像的分辨率等方式来提高速度,但是速度没有质的提升。对于one-stage detector来说,对可能的目标位置进行常规密集采样可能更快、更简单,但迄今为止,其精度落后于two-stage detector。
论文发现,在训练密集检测器时遇到的 前景-背景 样本类别极端的不平衡 是精度高的主要原因。我们知道在目标检测领域,一张图像可能生成成千上万的candidate locations,但其中只有很少一部分是包含objects的,这就带来了样本类别不平衡。
在R-CNN系列检测器中,通过两级级联和抽样启发(sampling heuristics)来解决类别不平衡的问题。proposal stage(像SS和RPN等)通过滤除大量的背景样本来快速降低candidate object locations的数量。在后面的classification stage,抽样启发(比如设置前景和背景的比例为1:3)或是OHEM(OHEM的主要思想:In OHEM each example is scored by its loss, non-maximum suppression (nms) is then applied, and a minibatch is constructed with the highest-loss examples。OHEM算法虽然增加了错分类样本的权重,但是OHEM算法忽略了容易分类的样本),维持着前景和背景之间可管理的平衡。
相反,one-stage detector相较于两阶段的需要处理更多的candidate object locations。虽然也有用到抽样启发,但是增益不大,并且训练还是被容易分类的背景样本所主导。这个目标检测的经典问题通常通过bootstrapping或者hard example mining解决。
论文通过 改进标准的cross entropy loss(交叉熵损失),即focal loss,来解决问题,类似像用降低分类良好的样本的损失权重。focal loss通过动态调整交叉熵损失来解决类别不平衡的问题。通过添加的比例因子可以在训练过程中自动降低简单样本的权重,并快速将模型集中在难分样本上。focal loss使得可以在不抽样的情况下有效地训练所有的样本,并且防止简单负样本会压倒loss和梯度计算(压倒loss的理解:由于简单负样本太多,以至于虽然他们的loss不大,但是由于数量庞大,他们的loss总和就会很大,因此就压倒了loss)。
同时,为了评估focal loss的有效性,设计出了RetinaNet。并且结果显示,在使用focal loss进行训练时,RetinaNet能够与以前的one-stage detector的速度相匹配,同时超过所有现有最先进的two-stage detector的精度。
Focal loss
对于Binary classification(二元分类),标准的Cross entropy (CE)loss(交叉熵损失函数):
其中,y∈{±1}来表示ground-truth的类别;p∈[0,1] 是标签为y=1的类的模型估计概率。
定义p_t来简化交叉熵损失:
于是交叉熵损失函数可以表示为:CE(p, y)=CE( pt )= - log( pt )
即使容易分类的样本(pt≫0.5)也会产生不小的损失。在对大量简单样本进行总结时,就算损失小,但是由于样本量较大,也会使得rare class的损失被掩盖。
· Balanced Cross Entropy
引入权重因子α来解决类别不平衡的问题:
因此,α-balanced CE loss:
· Focal Loss Definition
容易分类负样本构成了损失的绝大部分,并且主导了梯度下降。
虽然 α 平衡了正负样本的重要性,但是没有区分简单/难分样本。因此,需要降低简单样本的权重,将训练聚焦于难分样本上。
引入可调聚焦参数 γ≥0 ,调节因子 (1-pt)γ 到交叉熵损失上,就构成了focal loss:
Focal loss的性质:
- 当一个样本被错误分类,它的p_t就会很小,那么它的调节因子就会接近于1,它的损失就不会被影响。当p_t→1时,调节因子就会趋向于0,那么容易分类的样本的权重就降低了;
- 聚焦参数 γ 平缓地调整了简单样本的向下加权率。当 γ=0 时,FL就等于CE;当 γ 增长时,调节因子的影响也相应地增长了。
直观的说,调节因子减少了简单样本在损失中的贡献,并扩展了样本接受低损失的范围。比如说,当 γ=2 时,pt=0.9的样本将有比CE小100倍的损失,pt≈0.968小1000倍。这反过来又增加了纠正错误分类样本的重要性(对于pt≤ .5和γ=2,其损耗最多减少4倍)。
论文使用了带有α平衡变量的focal loss:
· Class Imbalance and Model Initialization
在默认情况下,二元分类模型初始化为输出y=-1或1的概率相等。在这种初始化、类别不平衡的情况下,频繁类别造成的损失会主导总的损失,并且导致早期训练的不稳定性。为了解决这个问题,引入了“ prior ”(先验)的概念,即在训练开始时由模型对稀有类(前景)所估计的p值。
我们用 π 表示prior,并将其设置为模型对稀有类例子的估计p很低,例如0.01。这是模型初始化的一个变化,而不是损失函数的变化。在类严重失衡的情况下,这可以提高CE和FL的训练稳定性。
RetinaNet Detector
·Backbone:运用现成的卷积网络来在整张输入图像上计算特征图
·Two task-specific subnetworks:第一个子网对backbone的输出进行卷积对象分类;第二个子网执行卷积边界框回归。
· Feature Pyramid Network Backbone:ResNet + FPN
l表示金字塔的层数(Pl比输入图像的分辨率低2l倍)
用P3到P7特征图来构成特征金字塔:
- P3到P5是由ResNet的残差层(C_3到C_5)进行自顶向下和横向链接得到的;
- P6是通过对C5进行大小为3×3,步距为2的卷积得到的;
- P7是通过对P6进行大小为3×3,步距为2的卷积、再接上ReLU得到的。
虽然许多设计选择并不重要,但论文强调FPN主干网的使用至关重要;仅使用最后一个ResNet层的特征进行的初步实验产生了较低的AP。
· Anchors
Areas of anchors:{ 322,642,1282, 2562,5122 } 分别对应 {P3,P4,P5,P6,P7 }
Aspect ratios:{ 1:2 , 1:1 , 2:1 }
并且,为了更加密集地覆盖到每一层,在每一级都增加了原本3个纵横比anchor集的 { 20,21/3,22/3 } 的anchors。
因此,每层都有9种anchors,它们覆盖了网络输入图像的32-813(512*22/3≈813)pixel的比例范围。
含义 | 数量 |
---|---|
类别的数目(不包含背景) | K |
分类的向量长度 | K |
边界框回归的向量长度 | 4K |
前景/背景 | IoU阈值范围 |
---|---|
前景(向量中K个值中对应的元素赋值1,其余为0) | ≥0.5 |
分类的向量长度 | [0, 0.4) |
丢弃 | [0.4, 0.5) |
*边界框回归目标被计算为每个anchor与其分配的object box之间的offset,如果没有分配,则省略不计。
· Classification Subnet
Classification Subnet预测A种anchors中的每一种anchor和K种对象类在每个空间位置上目标存在的概率。
含义 | Channel大小 | |
---|---|---|
输入 | 特征金字塔层的每一层特征图 | C |
中间层 | 4层3×3卷积层,每层后都跟着ReLU | C |
输出 | 3×3卷积层 | K A |
原文中说:Finally sigmoid activations are attached to output the KA binary predictions per spatial location——最后附加了sigmoid激活函数来输出K A 每个空间位置的二元预测(是这个类或不是这个类)
· Box Regression Sucnet
与分类子网并行,对FPN的每一层输出接上一个边界框回归子网,预测的是每个anchor和它对应的一个GT位置的偏移量(如果匹配到的话)。
含义 | Channel大小 | |
---|---|---|
输入 | 特征金字塔层的每一层特征图 | C |
中间层 | 4层3×3卷积层,每层后都跟着ReLU | C |
输出 | 3×3卷积层 | 4 A |
最后一层是4A维度,即对每一个anchor,回归一个(x,y,w,h)偏移量的四维向量。注意,此时的位置回归是类别无关的。
分类和回归子网虽然是相似的结构,但是参数是不共享的。但是对于每一层特征层来说,是共用分类和回归这两个子网的,即每层特征层都共享预测器的参数。
Inference and Training
· Inference
Inference只涉及将图片在网络中进行前向传播。为了提高速度,将检测器的置信度阈值定为0.05后,我们只对每个FPN level的最多1k个最高分边界框预测进行解码。所有级别的最高预测边界框被合并,并应用0.5阈值的NMS,以产生最终的检测结果。
· Focal Loss
Focal loss作用于每张图片的所有~100k个anchors上。
一张图像的focal loss为∼100k个anchors的focal loss之和,通过分配给gt的anchor数量来进行标准化。我们通过有对应gt的anchor的数量来进行标准化,而不是总的anchor的数量,因为绝大多数anchors都是简单负样本的,在focal loss下的损失值可以忽略不计。
分配给rare class的权重α也有一个稳定的范围,但它与γ相互作用,因此两个参数要同时运用。一般来说,就是随着γ的增加,α略微降低。
· Initialization
Backbone:ResNet-50-FPN/ResNet-101-FPN(在ImageNet1k上进行过预训练)
除RetinaNet subnets中的最后一层外,所有新的conv层都使用偏置b=0和高斯权重σ=0.01进行初始化。
分类子网的最后一层的偏置用b= - log((1-π)/π)来初始化(在训练之前,每个anchor都应被标记为置信度~ π的前景,论文中设置π=0.01,防止大量背景anchor在训练的第一次迭代中产生巨大的不稳定的损失值)
· Optimization
RetinaNet是用随机梯度下降法(SGD)训练的。论文在8个GPU上使用同步SGD,每个minibatch共有16幅图像(每个GPU2幅)。除非另有说明,所有模型都训练了9万次迭代,初始学习率为0.01,然后在6万次迭代时除以10,在8万次迭代时再次除以10。除非另有说明,仅使用水平图像翻转作为唯一的数据增量形式。使用0.0001的权重衰减和0.9的动量。训练损失是focal loss和用于边界框回归的Smooth L1 loss之和。
Experiments
COCO数据集
· train:trainval35k split(union of 80k images from train and a random 35k subset of images from the 40k image val split)
· val:minival split (the remaining 5k images from val).
· test:test-dev split
· Training Dense Detection
· backbone:ResNet-50+FPN/ResNet-101+FPN
· image scale:600 pixels
- Network Initialization
只需初始化模型的最后一层,使检测到物体的先验概率为π=0.01。(用ResNet-50训练RetinaNet,这个初始化已经在COCO上达到了可观的30.2AP。结果对π的精确值不敏感,因此我们在所有实验中使用π=0.01)
- Balanced Cross Entropy
损失函数:
当α=0.75时的效果最好
- Focal loss
损失函数:
当 γ = 0 时,FL就等于CE;
当 γ = 2 时,FL比α-balanced CE loss有2.9AP的提高。
α的最佳范围 [0.25, 0.75]
在实验中选择γ = 2,α = 0.25
实验结论: We observe that lower α’s are selected for higher γ’s(as easy negatives are down-weighted, less emphasis needs to be placed on the positives),就是简单负样本的权重已经通过γ降低了,就不太需要用α来降低正样本的权重了。
- Analysis of Focal loss
实验目的: 为了更好理解focal loss,分析了一个收敛模型的损失的经验分布。
实验步骤(大概):
- 将模型应用于大量随机图像,采样107的负样本窗口和105的正样本窗口的预测概率。
- 分别计算正样本和负样本的FL,并且将他们标准化,使所有loss的总和为1(即将所有loss加在一起,然后用样本原先的loss除以总loss)
- 再将分别将正、负样本标准化后的FL从小到大排列,并分别绘制正负样本累计分布函数(cumulative distribution function, CDF)(也就是再将他们累加),设置不同的γ来进行实验。
左图说明: 随着γ的增加,hard positive examples占的loss越多,但是γ的影响不大(即 随着γ的增加,曲线增长地也越缓慢,说明更多的loss集中在了难分正样本上)
(approximately 20% ofthe hardest positive samples account for roughly half of the positive loss, as γ increases more of the loss gets concentrated in the top 20% of examples, but the effect is minor.)
右图说明: 随着γ的增加,更多的loss权重集中在了hard negative examples上面。对于γ = 0,正样本的CDF和负样本的CDF非常相似。然而,随着γ的增加,更多的loss权重集中在hard negative examples上。事实上,对于γ=2(默认设置),绝大多数损失来自一小部分样本(难分负样本)。
实验结论: FL可以有效地降低简单负样本的影响,将注意力全都放在hard negative examples上。
- Online Hard Example Mining(OHEM)
OHEM:each example is scored by its loss, non-maximum suppression (nms) is then applied, and a minibatch is constructed with the highest-loss examples. OHEM puts more emphasis on misclassified examples, completely discards easy examples.
OHEM变体:After applying nms to all examples, the minibatch is constructed to enforce a 1:3 ratio between positives and negatives to help ensure each minibatch has enough positives.
实验结果(ResNet-101):
(1) OHEM及其变体中,OHEM(没有1:3 ratio,batch size 128,nms0.5)效果最好, 32.8AP。
(2) FL:36.0AP, 比OHEM最好的高3.2AP
实验结论: FL比OHEM在密集检测器中更有效。
· Model Architecture Design
- Anchor Density(密度)
scale:20,21/4,21/2,23/4
aspect ratios:1:2, 1:1, 2:1(一种的只用1:1)
2种尺度+三种比例效果最好
但论文中取了 3种尺度+三种比例 的anchor来完成实验。
- Speed vs Accuracy
Figure2中5个点对应5个scale的输入,400-800pixel per 100。
带有ResNet-101-FPN和600像素图像缩放的RetinaNet(为了简单起见,用RetinaNet-101-600表示)与backbone为ResNet-101-FPN的Faster R-CNN的精度相匹配。
实验结论: 使用更大的图片尺寸可以使RetinaNet超越素有二阶段方法,同时还更快。
- Comparison to State of Art
39.1和上面的(e)图37.8多了1.3个点,因为用了scale jitter技术。
实验结论: 在 one-stage 中的最好结果基础下提升了特别多(33.2-39.1),也技压 two-stage(36.8-39.1)。backbone 换成 ResNeXt 效果进一步提升。