目标检测4: retinanet网络focal loss分析,网络结构原理

    个人理解错误难免,推荐看原文(https://arxiv.org/abs/1708.02002)

    作者首先提出了一个问题:在目标检测中,one stage效果较差于two stage的主要原因是:one stage在训练时样本比例不均衡(比如上面的yolov3,在训练时要生成3*13*13 + 3*26*26 + 3*52*52 = 10647个box,但这些box中真正有物体的也就几个,其他都是背景,这样导致背景太多物体太少严重失衡;而two stage的faster-cnn通过RPN可以过滤掉大量的box,保留2000个,虽然也不均衡,但相对于one stage好的多)。

目前常见的解决方法是:在训练的时候用不同的采样频率;给予不同的权重。而提出的focal loss不需要这些步骤。

1. focal loss如何实现的?

    focal loss基于交叉熵进行改进。主要思路是降低分类效果好(网络预测的置信度confidence高)的样本的loss值,让模型聚焦在难学习的样本中。

    下图显示了交叉熵:为了方便,把红色框中的式子用pt表示,这样交叉熵CE=-log(pt)

    下图显示了交叉熵loss和focal loss的关系,横轴表示网络预测该类物体的置信度。当r=0时,cross entropy = focal loss,不同的r代表了不同的惩罚力度,作者使用r=2效果最好。在confidence高时,用cross entropy 时loss的值相对于focal loss大,如果使用cross entropy loss, 它使得模型倾向于这些样本的训练(由于预测的置信度已经很高了,无需再多关注这个样本),使用focal减小了这种倾向,使模型不过于关注效果好的样本。在confidenct很低时,很有可能预测错误,此时focal loss和交叉熵loss十分接近,二者但作用接近。

2. retinanet结构
  为了测试focal loss的效果设计了一个one stage的检测模型

  该模型采用resnet50/resnet101作为基础网络提取特征。之后用FPN(特征空间金字塔)进行多尺寸地预测。共输出三种尺寸的输出,每种输出为两路进行分类和box框的回归,输出时采用9个anchor(yolov3 每个输出采用3个)。

3. 总损失 = 分类损失 + 回归损失
loss = focalloss(分类) + smooth L1 loss(回归loss和faster-rcnn一样)

下一篇:faster-rcnn改进版, yolov3, retinanet效果比较https://blog.csdn.net/u010397980/article/details/85058838

猜你喜欢

转载自blog.csdn.net/u010397980/article/details/85058767
今日推荐