作者希望one-stage detector可以达到two-stage detector的准确率,同时不影响原有的速度。既然有了出发点,那么就要找one-stage detector的准确率不如two-stage detector的原因,作者认为原因是:样本的类别不均衡导致的。
1.解决训练过程中foreground和background类别极度不平衡的问题; 2.解决easy和hard样本的问题。
1.网络组成:Resnet + FPN + 2路FCN; 2.创新点:Focal Loss; 3.anchor:3中ratio{1:2, 1:1, 2:1}和3种size{20, 21/3, 22/3},面积从322到5212,金字塔等级[P3, P4, P5, P6, P7];
Focal loss是在交叉熵损失函数基础上改进的。 公式如下: ————————————— FL(pt) = - α \alpha αt(1-pt)r log(pt) ———————————————————————————————————————— 1.Pt是不同类别的分类概率, γ \gamma γ是个大于0的值, α \alpha αt 是个[0,1]间的小数。 2. P越大,权重(1-P)就越小,easy example就可以通过权重进行抑制,难分的目标就会增大Loss。 3. α \alpha αt用于调节positive和negative的比例。
论文中取值:alpha=0.25, gamma=2.0
features = [P3, P4, P5, P6, P7] sizes = [32, 64, 128, 256, 512] strides = [8, 16, 32, 64, 128] ratios = [0.5, 1, 2] scales = [2 ** 0, 2 ** (1.0 / 3.0), 2 ** (2.0 / 3.0)]
retinanet通过IOU阈值来定义正负样本,阈值定义如下:
# 阈值定义 overlap_threshold=0.5 ignore_threshold=0.4每个GT一定有对应的anchor负责预测,0.4以下是负样本,0.5以上并且是最大IOU的anchor是正样本,0.4~0.5之间的anchor是忽略样本。然后再通过Focal Loss来平衡分类loss。
每一类得分大于confidence_threshold的框和得分——IOU
1.Smooth Loss作用是计算目标回归框loss; 2.Focal Loss作用是计算所有未被忽略的种类的预测结果的交叉熵loss。