Focal Loss for Dense Object Detection解读与tensorflow实现

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wangdongwei0/article/details/82766365

1、Motivation

在目标检测领域,有两种网络结构:
第一种是 one-stage detector
第二种是 two-stage detector
最开始出现的detector都是two-stage,比如RCNN、Fast RCNN、Faster RCNN的proposal box的思想。
one-stage detector的出现稍微晚一些,代表作当属YOLO系列,you only look once,速度的确比faster rcnn快了不少。
但是:one-stage detector的精度比Faster RCNN差了不少,虽然已经过去了几年,但是目标检测精度最高的还是Faster RCNN那一套。

2、Contribution

作者认为one-stage detector检测精度不高的原因是因为 extreme forground-background class imbalance,也就是说物体和背景的不平衡,一般来说一张图中的背景占了绝大部分,这种不平衡导致了训练时存在大量的easy example(包括easy positive和easy negetive,但主要是easy negative),虽然这些easy exmple容易识别、每一个的损失loss都比较小,但是由于数量巨大,主导了最终的loss,导致最终训练出来的模型偏向了easy example。
two-stage detector由于要先生成proposal box,根据proposal box与gtbox的IOU排序,提取前300个proposal box进行训练,这样就避免了模型偏向easy example的情况。但是one-stage detecor就没有这么幸运了。
在这里插入图片描述

3、Focal Loss

3.1 standard cross entropy loss
基本的cross entropy是各个训练样本交叉熵直接求和,也就说各个样本的权重是一样的。
在这里插入图片描述
我们发现,对于true class(也就是y=1)属于前景的概率越高他的损失函数就越小。我们将cross entropy loss的曲线画出来,如下图,最上面的蓝色曲线就是
在这里插入图片描述
我们定义true class的预测概率如果大于0.6,就认为是well-classified样本,但是他们的loss还是有点大。对于YOLO这样的one-stage detector,没有rpn网络的加持,而是对densely sampled window进行检测,这样的话负样本的数量会远远大于正样本的数量,而负样本中绝大多数又是easy example,积少成多,easy example的loss加起来就会远远超过hard example的loss了。
当hard example的loss对模型的更新没有什么影响的时候,得到的分类模型边界就往往不够准确,对于hard example比较容易错分。

3.2 balanced cross entropy
既然one-stage detector在训练的时候正负样本的数量差距很大,那么一种常见的做法就是给正负样本加上权重,负样本出现的频次多,那么就降低它的权重,正样本数量少,就相对的提高正样本的权重。

3.3 Focal Loss
作者实际上解决的是easy example 和 hard example不均衡的问题,这与正负样本不均衡是两码事,因为正负样本里面都会有简单的样本和容易分错的样本。
作者提出的focal loss,相当于各自的样本加上了各自的权重,这个权重和网络预测该样本属于true class的概率相关的,显然,如果网络预测的该样本属于true class的概率很大,那么这个样本对于网络来说就是easy example。如果网络预测的概率很小,那么这个样本对网络来说就是hard example。为了训练一个有效的网络,应该降低绝对大部分easy example的权重,相对增大hard example的权重,作者提出的focal loss如下

4、Experiments

猜你喜欢

转载自blog.csdn.net/wangdongwei0/article/details/82766365
今日推荐