原文标题:Focal Loss for Dense Object Detection

概要

目标检测主要有两种主流框架,一级检测器(one-stage)和二级检测器(two-stage),一级检测器,结构简单,速度快,但是准确率却远远比不上二级检测器。作者发现主要原因在于前景和背景这两个类别在样本数量上存在很大的不平衡。作者提出了解决这种不平衡的方法,改进了交叉熵损失,使其对容易分类的样本产生抑制作用,使得损失集中在数量较少的难分类样本上。同时,作者提出了著名的RetinaNet,这个网络不仅速度快,而且精度不比二级检测器低,是个一出色的目标检测网络。

focal loss

一般来讲,如果对一个样本进行分类,这个样本分类很容易,比如说概率为98%,它的损失相应来讲也会很小。但是有一种情况,如果样本中存在极大的不平衡,这个容易分类的样本数量占很大的比例,那么它所产生的损失也会占大部分比例,就会使得难分类的样本占的损失比例较少,使得模型难以训练。
作者由此提出了focal loss,来解决样本不平衡的问题。
$ FL(p_t)=-(1-p_t)^rlog(p_t) $

RetinaNet 网络结构

retinaNet 是一个简单,一致的网络,它有一个主干网络(backbone)以及两个具有特殊任务的子网络。主干网络用来提取特征,有好多现成的,可以直接用。第一个子网络执行分类任务,第二个字网络执行回顾任务。

1.backbone

使用了特征金字塔(FPN)作为backbone,它可以提取不同尺度的特征。金字塔的每一层都可以用来检测物体,小特征可以检测大物体,大特征可以检测小物体。
将FPN建立在resnet的基础上,构成了从P3到P7的金字塔,(\(P_l\)比输入的图片尺寸小\(2^l\)倍)。所有的金字塔层,都有256个通道。

2.Anchors

  • 使用具有平移不变特性的Anchors。它们的大小从\(32^2\)到\(512^2\),对应P3到P7。Anchors使用3种长宽比,{1:2,1:1,2:1},使用3种大小比例{\(2^0,2^{1/3},2^{2/3}\)}.这样的设置可以提高AP。每个位置中anchor 的个数A= 3X3=9。
  • 每个Anchor都会分配一个长度为K的one-hot编码,K是类别的数量,包含背景类。并且分配一个长度为4的向量,代表框子的大小和定位。
  • 设置前景是IoU大于0.5的框,背景是IoU小于0.4的框,其他的忽略掉。每个Anchor都有一个one-hot编码,对应类别为1,其他为0.

    3.分类子网络

    这是一个小的全卷积神经网络,每个空间位置都会产生KA个预测,K是类别数,A是Anchor个数(9)。
    注意:只有一个分类子网络,金字塔的所有层都共享这一个网络中的参数。步骤如下:从金字塔中提取出C(256)通道的特征,然后子网络有4个卷积层,每个卷积层都使用3X3的卷积核.最后在跟着一个(KA)通道的卷积层。

    4.回归子网络

    这也是一个全卷积神经网络,与分类子网络并行存在着,它的任务是对预测框与距离最近的标注框(真实值,如果有的话)进行回归。它在每个空间位置有4A个预测。与其他方式不同,这种回归方式对于分类,是独立的,不可知的。这使用了更少的参数,但是同样有效。

    推断与训练

    推断

    为了提高速度,把阈值设置为0.05,最多使用前1000个最高分的回归框预测。最后融合所有层级的预测结果,使用非极大值抑制,阈值为0.5.

    focal loss

    r=2的时候效果好,focal loss 将用在每张图片的10万个anchors上,也就是说,focal loss是这10 万个anchor(经过归一化)产生的损失的和。参数a也有一个稳定的范围。这两个参数成反比关系。

    初始化

    除了最后一个卷积层,所有的卷积层都用b=0,高斯权重0.01.对于最后一个卷积层,b的设置有所不同,这是为了避免在训练开始的时候,出现不稳定现象

    实验结果

论文阅读|Focal loss的更多相关文章

  1. [论文理解]Focal Loss for Dense Object Detection(Retina Net)

    Focal Loss for Dense Object Detection Intro 这又是一篇与何凯明大神有关的作品,文章主要解决了one-stage网络识别率普遍低于two-stage网络的问题 ...

  2. 深度学习笔记(八)Focal Loss

    论文:Focal Loss for Dense Object Detection 论文链接:https://arxiv.org/abs/1708.02002 一. 提出背景 object detect ...

  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. 论文阅读笔记四十七:Generalized Intersection over Union: A Metric and A Loss for Bounding Box Regression(CVPR2019)

    论文原址:https://arxiv.org/pdf/1902.09630.pdf github:https://github.com/generalized-iou 摘要 在目标检测的评测体系中,I ...

  6. Focal loss论文解析

    Focal loss是目标检测领域的一篇十分经典的论文,它通过改造损失函数提升了一阶段目标检测的性能,背后关于类别不平衡的学习的思想值得我们深入地去探索和学习.正负样本失衡不仅仅在目标检测算法中会出现 ...

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

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

  8. 论文阅读 | FoveaBox: Beyond Anchor-based Object Detector

    论文阅读——FoveaBox: Beyond Anchor-based Object Detector 概述 这是一篇ArXiv 2019的文章,作者提出了一种新的anchor-free的目标检测框架 ...

  9. 论文阅读 | Region Proposal by Guided Anchoring

    论文阅读 | Region Proposal by Guided Anchoring 相关链接 论文地址:https://arxiv.org/abs/1901.03278 概述 众所周知,anchor ...

随机推荐

  1. VIM键盘映射 (Map)

    http://www.pythonclub.org/linux/vim/map VIM键盘映射 (Map) 设置键盘映射 使用:map命令,可以将键盘上的某个按键与Vim的命令绑定起来.例如使用以下命 ...

  2. [C++] JsonCPP 的使用 完整配置过程

    最近准备开发一个程序 需要用到C++ 解析json 原始的C++解析json是不现实的 自己也写不出来json解析方法(主要是不靠谱) 所以找到了jsoncpp 这个库 但是... 因为各种原因 配置 ...

  3. python 更换数据源

    1.Win+R打开cmd输入%HOMEPATH%打开自己的HOMEPATH路径文件夹 2.在此路径下建立一个文件夹pip, 里边放一个文件pip.ini内容如下: [global] timeout = ...

  4. try catch 语句中有return 的各类情况

    在牛客上做java题时遇到过多到关于try catch语句的问题,看了很多答案解析,在这里记录一下. 首先给出一道题目: 下面代码的运行结果为? A.catch语句块 和是43 B.编译异常 C.fi ...

  5. 使用maven构建项目时,SSM和springboot项目的打包与云服务器部署

    下面讲讲如何打包SSM和springboot项目,并部署到云服务器上. 由于使用的IDE不同,有的使用eclipse,有的使用idea,所以如果在IDE中按照 maven clean 再 maven ...

  6. IIS的部署(二)------虚拟目录的使用

    IIS的虚拟目录 一个站点的网页的存储位置目录是固定的,而且结构和物理保存网页的磁盘路径相同.例如:默认网页的存储位置是c:\inetpub\wwwroot,当访问localhost即访问c:\ine ...

  7. opencv:轮廓匹配

    #include <opencv2/opencv.hpp> #include <iostream> using namespace cv; using namespace st ...

  8. DVWA全级别之Brute Force(暴力破解)

    Brute Force Brute Force,即暴力(破解),是指黑客利用密码字典,使用穷举法猜解出用户口令. 首先我们登录DVWA(admin,password),之后我们看网络是否为无代理,: ...

  9. Visual Studio Code修改全屏背景

    打开VSCode安装目录,找到workbench.desktop.main.css文件 在最后一行添加以下代码: body{ pointer-events:auto !important; backg ...

  10. Hello 2020D(多重集)

    如果有一对时间对在某一场馆有时间重合而这一对时间对在另一场馆没有时间重合,则输出NO,否则输出YES. #define HAVE_STRUCT_TIMESPEC #include<bits/st ...