论文阅读笔记四十四:RetinaNet:Focal Loss for Dense Object Detection(ICCV2017)
论文原址:https://arxiv.org/abs/1708.02002
github代码:https://github.com/fizyr/keras-retinanet
摘要
目前,具有较高准确率的检测器基于双阶段的目标检测算法实现,单阶段通过对可能存在的位置进行密集的采样操作,一定程度上要比双阶段的方法要更简单快速,但是准确率会有所损失。在进行训练时,前景与背景二者之间较大的类别不平衡是产生上述问题的原因。针对上述问题,本文对常规的损失函数进行修改,降低易分类样本产生的损失的贡献度。本文设计了密集采样检测器-RetinaNet用于评估Focal损失的效果,实验发现速度可以超过当前的单阶段目标检测,同时准确率要高于双阶段的目标检测。
介绍
目前最好的目标检测算法基于双阶段的,由proposal驱动的方法,单阶段目标检测的方法对目标物的位置进行大小及尺寸的密集采样,单阶段检测速度更快但准确率相对为双阶段的10~40%左右。本文认为类比的不平衡是单阶段方法准确率较低的主要原因,并提出了一个新的损失函数。
类别不平衡问题在双阶段过程中得到解决,主要通过双阶段的级联及启发的方式进行。比如,在proposal阶段通过将背景的候选框剔除来控制候选框的数量(1k~2K),在第二阶段分类过程中,通过固定前景背景量的比例1:3,或者online hard example mining 方法进行前景/背景之间的平衡。
单阶段中产生的候选位置大约为(100k),相同的启发方式对其作用不大,容易分类的背景仍然对损失造成很大的影响。
本文提出动态的比例交叉熵损失,比例系数大小随着正确分类样本置信度的增加逐渐趋向于0。如下图,直观上,比例系数可以降低简单样本贡献度的权重,让模型更注重于Hard examples的优化。本文最好发现,Focal loss对单阶段准确率的提升有很大效果,但损失函数不局限于固定的形式,使用了高效的特征金字塔及anchor boxes的方法。RetinaNet基于ResNet-101-FPN,在COCO test数据集上实现了39.1的AP,同时,速度为5fps,如下右图所示。
类别不平衡
单阶段检测方法中存在更多的类别不平衡问题,每张图片大约产生10e4-10e5个候选位置,但包含目标物的只有少数。产生不平衡的原因如下:(1)大多数负样本产生无用的学习信号对训练没有意义。(2)易于分类的负样本很容易就占据训练的主导地位,进而会使模型退化。一种常规的解决方法是类似于Hard example mining或者是更加复杂的采样或者重新分配权重的方法。而本文设计的Focal loss不需要借助采样手段也可以有效的解决类别不平衡的问题。
Robust Estimation
该方法主要针对损失函数进行设计,比如降低异常值产生的较大损失的权重进而控制Hard example对损失的贡献度。而Focal loss降低简单样本对损失的贡献,将关注点放在Hard example上。
Focal Loss
该损失用于单阶段检测场景,解决前景/背景(1:1000)的极端不平衡情况。常规的交叉熵损失如下。
该损失有一个特点就是大量易于分类的负样本的产生的训练信号最终会主导模型的训练方向。
Balanced Cross Entropy
解决不平衡的一个方法是增加一个权重系数。本文定义带有权重的交叉损失函数如下。
Focal Loss定义
上述的权重系数可以控制正负样本的比例,但对于easy/hard example样本作用不大,本文增加了一个调制系数。损失函数如下
当一个样本被误分类同时其概率特别小时,其调制系数近似为1,该损失函数不受影响。而当易分类样本的Pt趋于1时,该调制系数降低,对损失函数影响较小。focusing 参数r平滑的调整easy样本的衰减权重。本文实验发现r为2时效果最好。本文实际使用的损失函数定义如下。
类别失调及模型初始化
对于二分类的输出初始化相等的概率,这种情况下,类别失调及频率较高的类别会主导total loss进而在早期的训练过程会变的不稳定。因此,本文在训练开始时引入模型对于稀少类别概率预测值的“先验”概念。本文定义先验为pi,模型预测少数类的概率值是很低的比如,0.01.值得注意的是先验是在模型的初始化时变化的而不是损失函数上。
RetinaNet Detecor
该网络由一个backbone及两个任务明确的subnet组成,backbone由卷积网络组成用于提取整张图片的feature map,第一个subnet在backbone输出上进行卷积分类操作,第二个subnet在其进行卷积边界框回归操作。结构图如下
FPN backbone
本文使用FPN作为backbone,FPN通过自上而下的路径及lateral 连接来构建特征,其对于单分辨率的输入图片具有更丰富,多尺寸的特征信息。FPN中金字塔的每一层都可以用于不同尺寸大小的目标检测,并使用全卷积网络进(FCN)行增强。本文利用FPN构建了特征金字塔,p3~p7,数字越大,该层的分辨率尺寸越小,特征金字塔的每层通道数为256,
Anchors
随着层数p3~p7,anchor的大小由32x32变为512x512,在每一层anchor的比例大小为{1:2,1:1,2:1},在此基础上增加了三个缩放比例{20,21/3,22/3},在每层共有九个anchors,相对于网络的输入覆盖范围由32-813个像素。
每个anchor都标记一个宽度为k(类别数)的one-hot向量的分类标记及一个四个向量的边界框回归目标。将anchor与ground truth IOU超过0.5的标记为前景,0~0.4的标记为背景。将IOU在0.4~0.5之间的anchor进行忽略。框回归目标由每个anchor及assigned目标物框的偏移量计算得到,如果没有assigned框则忽略。
分类分支
该分支在FPN的每一层上做类似于全卷积操作,预测每个空间位置上每个anchor的K个类别的概率值,其参数在FPN的所有层都进行共享操作。具体操作为,输入某一层的特征,通道数为C,后街四个3x3xC的卷积层,每层都接ReLU,然后一个3x3xkXA的卷积,最后接sigmoid激活层,每个位置预测KA个binary predictions,实验中大部分C设置为256,A设置为9。注意的是分类分支与边界框分支的参数之间是独立的,不进行共享。
边界框回归分支
与分类分支平行,本文增加了另一个小型的FCN网络用于边界框回归。每个位置包含4A个线性输出。在每个空间位置的A个anchor上,四个输出用于预测每个anchor与ground truth box的相对偏移量。本文使用类别不确定的边界框回归,其参数量更少,但效果相同。分类分支与回归分支结构相同,但二者参数相互独立。
Inference and training
为了提速,本文将检测器的阈值设置为0.05后,只对FPN每层中分数高的前1000个预测值进行decode box 预测。最后将所有层得到的结果进一步使用阈值0.5进行NMS处理完成最终的检测。
Focal Loss
本文在分类分支中使用focal loss,将r(取值分为0.5~5)设置为2效果较好。训练RetinaNet时超过100k个anchors,toatal focal loss由所有anchor的损失的和normalized assigned a ground truth box anchor的数量,原因时anchor中包含大量的easy negative 样本。其权重a的值有一定的范围,随着r的增加其a的值不断减小。
初始化
本文实验了Resnet-50-FPN,ResNet-101-FPN两种backbones。basenet restnet-50及resnet-101在ImageNet1k上进行预训练。新添加的所有卷积层除了最后一层都按照bias为0,高斯分布()的权重进行初始化。分类分支的最后一层卷积按照
初始化,pi代表开始训练时每个anchor被标记为前景的概率先验,本文都设置为.01。该方法有效的防止在训练时的第一次迭代中大量背景anchors生成损失值。
优化
本文基于SGD使用8块GPU进行同步训练,每个batch设置为16.所有模型的初始学习率为0.01,迭代90k步。权重衰减为0.0001及动量大小设置为0.9,损失用的focal loss用于分类及smoth L1损失用于回归,模型训练用时10到35个小时。
实验
References
[1] S. Bell, C. L. Zitnick, K. Bala, and R. Girshick. Insideoutside net: Detecting objects in context with skip pooling and recurrent neural networks. In CVPR, 2016. 6
[2] S. R. Bulo, G. Neuhold, and P. Kontschieder. Loss maxpooling for semantic image segmentation. In CVPR, 2017.3
[3] J. Dai, Y. Li, K. He, and J. Sun. R-FCN: Object detection via region-based fully convolutional networks. In NIPS, 2016. 1
[4] N. Dalal and B. Triggs. Histograms of oriented gradients for human detection. In CVPR, 2005. 2
[5] P. Doll´ar, Z. Tu, P. Perona, and S. Belongie. Integral channel features. In BMVC, 2009. 2, 3
[6] D. Erhan, C. Szegedy, A. Toshev, and D. Anguelov. Scalable object detection using deep neural networks. In CVPR, 2014.
论文阅读笔记四十四:RetinaNet:Focal Loss for Dense Object Detection(ICCV2017)的更多相关文章
- 论文阅读笔记五十六:(ExtremeNet)Bottom-up Object Detection by Grouping Extreme and Center Points(CVPR2019)
论文原址:https://arxiv.org/abs/1901.08043 github: https://github.com/xingyizhou/ExtremeNet 摘要 本文利用一个关键点检 ...
- 论文阅读笔记五十二:CornerNet-Lite: Efficient Keypoint Based Object Detection(CVPR2019)
论文原址:https://arxiv.org/pdf/1904.08900.pdf github:https://github.com/princeton-vl/CornerNet-Lite 摘要 基 ...
- [论文理解]Focal Loss for Dense Object Detection(Retina Net)
Focal Loss for Dense Object Detection Intro 这又是一篇与何凯明大神有关的作品,文章主要解决了one-stage网络识别率普遍低于two-stage网络的问题 ...
- 目标检测 | RetinaNet:Focal Loss for Dense Object Detection
论文分析了one-stage网络训练存在的类别不平衡问题,提出能根据loss大小自动调节权重的focal loss,使得模型的训练更专注于困难样本.同时,基于FPN设计了RetinaNet,在精度和速 ...
- focal loss for dense object detection
温故知新 focal loss for dense object detection,知乎上一人的评论很经典.hard negative sampling, 就是只挑出来男神(还是最难追的),而foc ...
- 论文阅读笔记五十四:Gradient Harmonized Single-stage Detector(CVPR2019)
论文原址:https://arxiv.org/pdf/1811.05181.pdf github:https://github.com/libuyu/GHM_Detection 摘要 尽管单阶段的检测 ...
- 论文阅读笔记三十四:DSSD: Deconvolutiona lSingle Shot Detector(CVPR2017)
论文源址:https://arxiv.org/abs/1701.06659 开源代码:https://github.com/MTCloudVision/mxnet-dssd 摘要 DSSD主要是向目标 ...
- Focal Loss for Dense Object Detection 论文阅读
何凯明大佬 ICCV 2017 best student paper 作者提出focal loss的出发点也是希望one-stage detector可以达到two-stage detector的准确 ...
- 论文阅读笔记六十四: Architectures for deep neural network based acoustic models defined over windowed speech waveforms(INTERSPEECH 2015)
论文原址:https://pdfs.semanticscholar.org/eeb7/c037e6685923c76cafc0a14c5e4b00bcf475.pdf 摘要 本文研究了利用深度神经网络 ...
随机推荐
- 其它综合-企业级CentOS 7.6 操作系统的安装
企业级CentOS 7.6版本安装过程 1. 环境: 使用的虚拟机软件是VMware,版本为 12 .(网上一搜一大推,在此不再演示.) 使用的ISO镜像为CentOS7.6.(自己也可以在网上搜镜像 ...
- 4月10日java上机任务
1. 一维数组的创建和遍历. 声明并创建存放4个人考试成绩的一维数组,并使用for循环遍历数组并打印分数.要求: (1) 首先按“顺序”遍历,即打印顺序为:从第一个人到第四个人: (2) ...
- Google Translation Via Python
没什么好说的,直接送包 https://github.com/mouuff/mtranslate
- centos7.5误删python2.7之后,导致yum和Pythonm命令无法使用
问题描述 最近想要将服务器上的Python2.7升级成3.x的版本时.使用了如下命令: (1)强制删除已安装python及其关联 # rpm -qa|grep python|xargs rpm -ev ...
- 【并发编程】【JDK源码】J.U.C--AQS 及其同步组件(2/2)
原文:慕课网高并发实战(七)- J.U.C之AQS 在[并发编程][JDK源码]AQS (AbstractQueuedSynchronizer)(1/2)中简要介绍了AQS的概念和基本原理,下面继续对 ...
- <数据结构基础学习>(四)链表 Part 2
一.使用链表实现栈 增,删,查只对链表头进行操作,时间复杂度都为O(1) 链表头作为栈顶 LinkedListStack<E> implements Stack<E> publ ...
- pycharm pip安装包
第一种方式为命令行模式,在pycharm界面按alt+F12调出命令行窗口,在窗口内输入pip install matplotlib回车即可,如图1所示 方法二:使用菜单项File——settings ...
- 使用idea搭建maven项目
前言---2018-11-24 博主最近呀,也是一直在看书,但是呢有许多小伙伴和博主反应,在eclipse都会搭建maven项目,但是呢到了idea就不会了,于是了博主就起了个早床写一遍博客咯.希望对 ...
- CSS盒模型深入理解
前言 所有文档元素都生成一个矩形框,这称为元素框(element box),它描述了一个元素在文档布局中所占的空间大小.而且,每个框影响着其他元素框的位置和大小 宽高 宽度width被定义为从左内边界 ...
- Vorticity directions 1: self-improving property of the vorticity
在 [Li, Siran. "On Vortex Alignment and Boundedness of $ L^ q $ Norm of Vorticity." arXiv p ...