原文标题:Focal Loss for Dense Object Detection网络
目标检测主要有两种主流框架,一级检测器(one-stage)和二级检测器(two-stage),一级检测器,结构简单,速度快,可是准确率却远远比不上二级检测器。做者发现主要缘由在于前景和背景这两个类别在样本数量上存在很大的不平衡。做者提出了解决这种不平衡的方法,改进了交叉熵损失,使其对容易分类的样本产生抑制做用,使得损失集中在数量较少的难分类样本上。同时,做者提出了著名的RetinaNet,这个网络不只速度快,并且精度不比二级检测器低,是个一出色的目标检测网络。框架
通常来说,若是对一个样本进行分类,这个样本分类很容易,好比说几率为98%,它的损失相应来说也会很小。可是有一种状况,若是样本中存在极大的不平衡,这个容易分类的样本数量占很大的比例,那么它所产生的损失也会占大部分比例,就会使得难分类的样本占的损失比例较少,使得模型难以训练。
做者由此提出了focal loss,来解决样本不平衡的问题。
$ FL(p_t)=-(1-p_t)^rlog(p_t) $编码
retinaNet 是一个简单,一致的网络,它有一个主干网络(backbone)以及两个具备特殊任务的子网络。主干网络用来提取特征,有好多现成的,能够直接用。第一个子网络执行分类任务,第二个字网络执行回顾任务。
spa
使用了特征金字塔(FPN)做为backbone,它能够提取不一样尺度的特征。金字塔的每一层均可以用来检测物体,小特征能够检测大物体,大特征能够检测小物体。
将FPN创建在resnet的基础上,构成了从P3到P7的金字塔,(\(P_l\)比输入的图片尺寸小\(2^l\)倍)。全部的金字塔层,都有256个通道。blog
设置前景是IoU大于0.5的框,背景是IoU小于0.4的框,其余的忽略掉。每一个Anchor都有一个one-hot编码,对应类别为1,其余为0.图片
这是一个小的全卷积神经网络,每一个空间位置都会产生KA个预测,K是类别数,A是Anchor个数(9)。
注意:只有一个分类子网络,金字塔的全部层都共享这一个网络中的参数。步骤以下:从金字塔中提取出C(256)通道的特征,而后子网络有4个卷积层,每一个卷积层都使用3X3的卷积核.最后在跟着一个(KA)通道的卷积层。backbone
这也是一个全卷积神经网络,与分类子网络并行存在着,它的任务是对预测框与距离最近的标注框(真实值,若是有的话)进行回归。它在每一个空间位置有4A个预测。与其余方式不一样,这种回归方式对于分类,是独立的,不可知的。这使用了更少的参数,可是一样有效。io
为了提升速度,把阈值设置为0.05,最多使用前1000个最高分的回归框预测。最后融合全部层级的预测结果,使用非极大值抑制,阈值为0.5.class
r=2的时候效果好,focal loss 将用在每张图片的10万个anchors上,也就是说,focal loss是这10 万个anchor(通过归一化)产生的损失的和。参数a也有一个稳定的范围。这两个参数成反比关系。基础
除了最后一个卷积层,全部的卷积层都用b=0,高斯权重0.01.对于最后一个卷积层,b的设置有所不一样,这是为了不在训练开始的时候,出现不稳定现象