Focal Loss for Dense Object Detection

Intro

这又是一篇与何凯明大神有关的作品,文章主要解决了one-stage网络识别率普遍低于two-stage网络的问题,其指出其根本原因是样本类别不均衡导致,一针见血,通过改变传统的loss(CE)变为focal loss,瞬间提升了one-stage网络的准确率。与此同时,为了测试该loss对网络改进的影响,文章还特地设计了一个网络,retina net,证明了其想法。

Problems

  1. 为啥one-stage网络的准确率普遍会低于two-stage呢?

文章指出,one-stage网络是在训练阶段,极度不平衡的类别数量导致准确率下降,一张图片里box为目标类别的样本就那么点,而是背景没有目标的样本却远远高于目标样本,这导致分类为背景的样本数目占据样本数目极大部分,因此,这种不平衡导致了模型会把更多的重心放在背景样本的学习上去。常规的做法可以是负样本挖掘,来维持正负样本1:3的比例,这似乎起到了点作用。但是,本文的做法是改变原有的loss,提出新的loss来解决。由于容易被分类的负样本的数量非常庞大,所以这些样本就会左右梯度的方向,继而使得模型更专注于分负样本而非具体的类别。

  1. 为啥two-stage的准确率不会受到样本类别不均衡的影响呢?

因为two-stage网络一般会经历类似rpn网络,第一个网络已经滤去了大多数背景样本,在第二个网络里负样本的数量大量减少,因此对分类的影响也会减少。但two-stage网络仍然有大量负样本,只是不均衡程度减轻了,所以,这是识别准确率不高的根本原因在于样本类别是否均衡。

Loss

一般的ce loss是这样的:

下面给一张图,来说明下作者到底是怎么想的。对于普通的ce loss,由于负样本数量巨大,因此有大量的简单样本(如置信度大于0.5)会占据loss的主导,尽管困难样本单个的loss非常大,但是其数量不如简单样本多,所以loss会由简单样本来主导。那么好的做法就是,尽量减小简单样本loss所占的比例,就是把置信度大于0.5以上的样本loss压低。于是本文的想法大致就成型了。

首先要让正负样本所占的比例均衡,没有使用负样本挖掘等手段,本文直接在ce loss前面乘以一个参数α,这样可以方便控制正负样本loss所占的比例:

随后呢,为了解决简单样本累积loss太大的问题,又提出下面这个loss:

由上面的图可以看出,当γ为5的时候,简单样本的loss占比已经非常小了,困难样本的loss依然很大,这样就能大幅减少简单样本的占比,算是解决了 这个问题吧。

然后,最终的loss长这个样子:

Trick

类别不平衡问题在训练最开始阶段会导致训练不是很稳定,这是因为我们一般初始化参数的时候都会认为参数其结果服从一个先验分布,一般我们就认为是正太分布,对于分类的最后一层,我们的初始化就是让每个类别的概率都相等,这样做的结果是在反向过程中会使得训练初期训练不稳定,因为负样本非常多,你让各种类别概率相等之后显然是增加了负样本分错的数目,也就是增加了负样本在训练时候的loss,所以好的做法是让最后一层的分布符合正样本相对负样本的分布,这样做能够保证训练初期的稳定性。

RetinaNet Detector

retinanet的网络结构是在FPN的每个特征层后面接两个子网络,分别是classification subnet 和 bbox regression subnet。

前者是先用四次C个3*3的卷积核卷积+relu激活,然后用KA个3*3的卷积核卷积,用sigmoid来激活最后一层,对每个特征层进行类别预测。KA是K种类别A个anchor的预测结果,实验中设置C = 256。

后者也差不多,也是接一个FCN(不含全连接的全卷积),最后预测的是4*A个量,这个与faster rcnn中的类似。

与RPN相比的话,retinanet并没有共享预测类别的网络权重和回归网络的权重,因为作者说他们这样不共享网络权重最终得到的准确率远比调整超参效果要好。

网络结构如图:

OHEM

(Online Hard Example Mining)OHEM是来帮助two-stage网路训练的方法,OHEM作用是在NMS之前,先将各个样本的loss排序,只留下loss较大的样本继续NMS,这样做也可以更加专注于错分样本的训练,但是其也有缺点,其直接扔掉了简单样本,显然会导致简单样本的训练出现问题。作者通过实验说明了FL比OHEM更加有效。

[论文理解]Focal Loss for Dense Object Detection(Retina Net)的更多相关文章

  1. 目标检测 | RetinaNet:Focal Loss for Dense Object Detection

    论文分析了one-stage网络训练存在的类别不平衡问题,提出能根据loss大小自动调节权重的focal loss,使得模型的训练更专注于困难样本.同时,基于FPN设计了RetinaNet,在精度和速 ...

  2. focal loss for dense object detection

    温故知新 focal loss for dense object detection,知乎上一人的评论很经典.hard negative sampling, 就是只挑出来男神(还是最难追的),而foc ...

  3. 论文阅读笔记四十四:RetinaNet:Focal Loss for Dense Object Detection(ICCV2017)

    论文原址:https://arxiv.org/abs/1708.02002 github代码:https://github.com/fizyr/keras-retinanet 摘要 目前,具有较高准确 ...

  4. Focal Loss for Dense Object Detection 论文阅读

    何凯明大佬 ICCV 2017 best student paper 作者提出focal loss的出发点也是希望one-stage detector可以达到two-stage detector的准确 ...

  5. [论文理解] Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks

    Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks 简介 Faster R-CNN是很经典的t ...

  6. 论文阅读|Focal loss

    原文标题:Focal Loss for Dense Object Detection 概要 目标检测主要有两种主流框架,一级检测器(one-stage)和二级检测器(two-stage),一级检测器, ...

  7. 论文阅读 | FCOS: Fully Convolutional One-Stage Object Detection

    论文阅读——FCOS: Fully Convolutional One-Stage Object Detection 概述 目前anchor-free大热,从DenseBoxes到CornerNet. ...

  8. 论文阅读之 DECOLOR: Moving Object Detection by Detecting Contiguous Outliers in the Low-Rank Representation

    DECOLOR: Moving Object Detection by Detecting Contiguous Outliers in the Low-Rank Representation Xia ...

  9. 论文笔记:Structure Inference Net: Object Detection Using Scene-Level Context and Instance-Level Relationships

    Structure Inference Net: Object Detection Using Scene-Level Context and Instance-Level Relationships ...

随机推荐

  1. Android 的 AlarmManager 和 wakeLock联合使用

    http://stackoverflow.com/questions/6864712/android-alarmmanager-not-waking-phone-up 主要说的是,对于android ...

  2. codeforces 199a

    link:http://codeforces.com/contest/342/problem/A 恩恩,读错题了.人家是at most 7,我理解成了at lease 7.好欢乐~ #include ...

  3. ionic cordova plugin simple demo

    要用cordova plugin 的话还是需要设置一下的 1. 下载 ng-cordova.js download the zip file here 2. 在index.html 中引用 (cord ...

  4. 弹性布局学习-详解 flex-direction【决定主轴的方向】(二)

    弹性布局学习-详解 flex-direction[决定主轴的方向](二)

  5. (转载)css垂直水平居中的整理

    方法一 .demo1 { width:180px; height:180px; line-height:180px; *font-size:160px; border:1px solid #ddd; ...

  6. iphone开发小记

    程序功能:点击Button实现按钮的文本变换 一,打开Xcode,新建single view based application,拖动一个Button控件到屏幕中间 项目目录树下包含AppDelega ...

  7. java mongoTemplate的group统计

    @Service public class MongoCountServiceImpl implements MongoCountService { @Autowired private MongoT ...

  8. 论YUV422(YUYV)与YUV420相互转换

    Example 2.13. V4L2_PIX_FMT_YUYV 4 × 4 pixelimage start + 0: Y'00 Cb00 Y'01 Cr00 Y'02 Cb01 Y'03 Cr01 ...

  9. 第四次作业 重写equals方法

    使用上几次用到得User实体类,在其中重写equals方法. @Override public boolean equals(Object obj) { if(obj==null)return fal ...

  10. Oracle核心技术之 SQL TRACE

    1.SQL TRACE说明: 参数类型 布尔型 缺省值 false 参数类别 动态 取值范围 True|false 2.类型 1)sql trace参数:alter system改变对全局进程影响,如 ...