RetinaNet:Focal Loss for Dense Object Detection(CVPR2018)


文章目录

  • Abstract
    • 北京
    • 发现问题并给出方法
    • 成果
  • Introduction
  • Related Work
    • Robust 评估
  • Focal Loss
    • Balanced Cross Entropy
    • Focal Loss Definition
    • Class Imbalance and Model Initialization
    • Class Imbalance and Two-stage Detectors
  • RetinaNet Detector
  • Experiments
  • Conclusion

hh
源代码

Abstract

北京

迄今为止,精度最高的目标检测器是基于R-CNN推广的两阶段方法,其中分类器应用于候选目标位置的稀疏集。相比之下,应用于对可能的目标位置进行常规、密集采样的单级探测器有可能更快、更简单,但到目前为止还不如两阶段检测器的准确性。

发现问题并给出方法

在本文中,我们调查了为什么会出现这种情况。我们发现,在密集检测器训练过程中遇到的极端前景-背景类不平衡是主要原因我们建议通过重塑标准交叉熵损失来解决这种类不平衡,从而降低分配给分类良好的示例的损失的权重。我们的新Focal Loss将训练集中在一组稀疏的困难示例上,并防止在训练期间大量的简单负样本让检测器失去应有的功效(1T,1000F,全F错误率1/1001)。

成果

为了评估损失的有效性,我们设计并训练了一个简单的密度检测器RetinaNet。我们的研究结果表明,当使用焦损进行训练时,RetinaNet能够匹配先前的一级检测器的速度,同时超过所有现有的最先进的两级检测器的精度。

Introduction

对于两阶段检测器,第一阶段生成候选目标位置的稀疏集第二阶段使用卷积神经网络对每个候选位置提取特征区分前景和背景
我们提出了一种单阶段目标检测器,首次与更复杂的两阶段检测器的最先进的COCO AP相匹配,例如特征金字塔网络(FPN)[20]或Faster R-CNN[28]的Mask R-CNN[14]变体。为了达到这个结果,我们确定训练过程中的类不平衡是阻碍单阶段检测器达到最先进精度的主要障碍,并提出了一个新的损失函数(Focal Loss)来消除这个障碍

(好吧,也没我以为的那么潇洒)类不平衡在类r - cnn检测器中通过两阶段级联和抽样启发式来解决。提案阶段(例如,Selective Search [35], EdgeBoxes [39], DeepMask [24,25], RPN[28])迅速将候选对象位置的数量缩小到少量(例如,1-2k),过滤掉大多数背景样本。在第二个分类阶段,进行抽样启发式,例如固定的前景与背景比例(1:3),或在线硬示例挖掘(OHEM)[31],以保持前景和背景之间可管理的平衡

相比之下,单阶段检测器必须处理更大的候选对象位置集,这些候选对象位置在图像上定期采样。在实践中,这通常相当于枚举密集覆盖空间位置、尺度和纵横比的约100k个位置。虽然也可以应用类似的抽样启发式,但它们效率低下,因为训练过程仍然由易于分类的背景样本主导。这种低效率是目标检测中的一个经典问题,通常通过bootstrapping[33,29]或硬例挖掘[37,8,31]等技术来解决

在本文中,我们提出了一个新的损失函数,作为一个更有效的替代以前的方法来处理类不平衡。损失函数是动态缩放的交叉熵损失,随着正确类别置信度的增加,比例因子衰减到零,见图1

设置γ > 0减少了分类良好的示例(p t > .5)的相对损失,把更多的注意力放在困难的、错误分类的例子上

直观地说,这个比例因子可以在训练过程中自动降低简单示例的权重,并迅速将模型集中在困难示例上。实验表明,我们提出的Focal Loss使我们能够训练一个高精度的单阶段检测器,其性能明显优于使用抽样启发式或硬示例挖掘训练的替代方案,这是先前用于训练单阶段检测器的最先进技术。最后,我们注意到焦点损失的确切形式并不重要,并且我们展示了其他实例可以实现类似的结果

为了证明所提出的焦点损失的有效性,我们设计了一个简单的单级目标检测器RetinaNet,因其在输入图像中对目标位置进行密集采样而命名。它的设计特点是高效的网络内特征金字塔和锚盒的使用。它借鉴了来自[22,6,28,20]的各种最新思想。RetinaNet高效、准确;我们基于ResNet-101- FPN骨干网的最佳模型,在以5 fps运行时实现了39.1的COCO测试开发AP,超过了之前发布的单级和两级检测器的最佳单模型结果,见图2。

Related Work

介绍了下以往的经典检测器、一阶段、二阶段检测器。指出RetinaNet的设计与以前的密集检测器有许多相似之处,特别是RPN[28]引入的“锚”概念以及SSD[22]和FPN[20]中使用的特征金字塔。强调RetinaNet获得的最佳结果不是基于网络设计的创新,而是由于我们的新颖Focal Loss损失

Robust 评估

人们对设计鲁棒损失函数(例如,Huber损失[13])非常感兴趣,该函数通过降低具有大误差的示例(硬示例)的损失权重来减少异常值的贡献。相比之下,我们的焦点损失不是解决异常值,而是通过降低内部值(简单的例子)的权重来解决类别不平衡,这样即使它们的数量很大,它们对总损失的贡献也很小。换句话说,焦点损失执行与鲁棒损失相反的角色:它将训练集中在一组稀疏的硬示例上

Focal Loss

焦点损失是为了解决在训练期间前景和背景类之间存在极端不平衡的单阶段对象检测场景(例如1:1000)。我们从二元分类的交叉熵(cross entropy, CE)损失入手,引入焦损:

在上面,y∈{±1}指定基真类,p∈[0,1]是模型对标签y = 1的类的估计概率。

为了表示方便,我们定义p t:
所以CE(p,y)可以表示为

CE损失如图1中的蓝色(顶部)曲线所示。从图中可以很容易地看出,这种损失的一个显著特性是,即使是容易分类的例子(p t 》0.5)也会带来巨大的损失。当对大量简单的例子求和时,这些小的损失值可能会压倒罕见的类。

Balanced Cross Entropy

解决类失衡的一个常用方法是为类1引入一个加权因子α∈[0,1],为类- 1引入1 - α。在实际应用中,α可以用逆类频率来设定,也可以作为一个超参数,通过交叉验证来设定。为了表示方便,我们像定义p t一样定义α t。我们将α-平衡CE损失写成:

Focal Loss Definition

正如我们的实验将显示的那样,密集检测器训练过程中遇到的大类不平衡压倒了交叉熵损失。容易分类的底片构成了大部分的损失,并主导了梯度。虽然α平衡了积极/消极例子的重要性,但它并不区分简单/困难的例子。因此,我们建议重塑损失函数以降低简单示例的权重,从而将训练重点放在困难的否定上。
我们建议在交叉熵损失中加入一个调制因子(1−p t) γ,可调聚焦参数γ≥0。我们将焦损定义为:
图1显示了γ∈[0,5]的几个值下的焦损。我们注意到焦损的两个特性。(1)当样本被误分类,且p t较小时,调制因子接近1,损失不受影响。当p t→1时,因子趋于0,并且对分类良好的示例的损失是下加权的。(2)聚焦参数γ平滑地调整了简单样例降权的速率。当γ = 0时,FL相当于CE,并且随着γ的增加,调制因子的效果也同样增加(我们发现γ = 2在我们的实验中效果最好)。
直观地,调制因子减少了简单示例的损失贡献,并扩展了示例接收低损失的范围。例如,当γ = 2时,一个分类为p t = 0.9的例子的损失比CE低100倍,当p t≈0.968时,其损失比CE低1000倍。这反过来又增加了纠正错误分类示例的重要性(当p t≤0.5且γ = 2时,其损失最多减少4倍)。
实践中使用α-平衡焦点损失,发现γ=2,α=0.25时效果最好

最后我们注意到损失层结合sigmoid操作实现用损失计算p,使数值稳定性更强

Class Imbalance and Model Initialization

默认情况下,二元分类模型初始化为输出y = - 1或1的概率相等。在这种初始化下,在类不平衡的情况下,由于类的频繁而造成的损失会超过总损失,导致早期训练不稳定为了解决这个问题,我们引入了“先验”的概念,用于在训练开始时对罕见类(前景)的模型估计p值。我们用π表示先验,并将其设置为模型的估计值p(对于该类的例子)慢,例如0.01。我们注意到这是模型初始化的变化(见§4.1),而不是损失函数的变化。我们发现,在严重类不平衡的情况下,这可以提高交叉熵和焦点损失的训练稳定性

Class Imbalance and Two-stage Detectors

两级检测器通常使用交叉熵损失进行训练,而不使用α-平衡或我们提出的损失。相反,他们通过两种机制来解决类别不平衡问题:(1)两阶段级联和(2)有偏差的小批量抽样。第一个级联阶段是一个对象提议机制[35,24,28],它将几乎无限的可能对象位置集减少到一到两千个。重要的是,所选择的建议不是随机的,而是可能对应于真实的对象位置,这消除了绝大多数容易的否定。当训练第二阶段时,偏抽样通常用于构建小批量,例如,包含1:3比例的正样例与负样例。这个比率就像一个隐式的通过抽样实现的α平衡因子。我们提出的焦损是为了在一级检测系统中直接通过损失函数来解决这些机制。

RetinaNet Detector

RetinaNet是由一个骨干网和两个任务子网组成的单一、统一的网络。主干负责计算整个输入图像上的卷积特征映射,是一个离自卷积网络。第一子网对主干网的输出执行卷积对象分类;第二个子网执行卷积边界盒回归。这两个子网的特点是我们专门为单阶段密集检测提出的简单设计,见图3。虽然这些组件的细节有许多可能的选择,但大多数设计参数对实验中显示的精确值并不特别敏感。接下来我们将描述RetinaNet的每个组成部分。
简单来说RetinaNet在ResNet架构上添加了FPN瓶颈,然后分别用分类子网和边界盒回归子网进行分类和回归
RetinaNet使用特征金字塔层p3到p7,其中p3到p5是从对应的ResNet剩余阶段(c3到c5)的输出中使用自上而下和横向连接计算的,p6通过对c5进行3×3步幅2转换获得,p7通过应用ReLU然后对p6进行3×3 stride-2转换来计算。
(1)由于计算原因,我们没有使用高分辨率金字塔级p2
(2) p6是通过跨行卷积而不是下采样计算的
(3)我们包括p7以改进大型目标检测。这些微小的修改提高了速度,同时保持了准确性。

Experiments


Conclusion

在这项工作中,我们认为类不平衡是阻碍单阶段目标检测器超越表现最好的两阶段方法的主要障碍。为了解决这个问题,我们提出了焦点损失,它将调制项(1−p t) γ应用于交叉熵损失,以便将学习集中在硬负例上。我们的方法简单而高效,我们通过设计一个全卷积单级检测器(RetinaNet)来证明其有效性,并报告了广泛的实验分析,表明它达到了最先进的精度和速度。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/264366.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

服务器加装了14T硬盘,显示不出来,戴尔R730阵列卡配置阵列RAID0

戴尔H730阵列卡配置阵列RAID0,1,5,10_哔哩哔哩_bilibili 然后依据下面的视频进行操作,ctrlr,选raid0 戴尔H730阵列卡配置阵列RAID0,1,5,10_哔哩哔哩_bilibili

超级逼真人脸生成,Stable Diffusion的3个关键技巧

大家好,你是否曾想过,为什么别人可以使用AI图像生成技术生成如此逼真的人脸,而自己的尝试却充满了错误和瑕疵,让人一眼看出是假的。尝试过调整提示和设置,但似乎仍无法与他人的质量相匹配。 本文将带大家了解使用Stab…

第一部分 数理逻辑

目录 什么是命题 注意: 例1 下列句子中那些是命题? 联结词 例2 将下列命题符号化. 注意: 例4 设 p:天冷,q:小王穿羽绒服,将下列命题符号化 例5 求下列复合命题的真值 例如 真值表: 例&#xff1…

活动回顾 (上) | 2023 Meet TVM 系列活动完美收官

作者:xixi 编辑:三羊、李宝珠 2023 Meet TVM 年终聚会于 12 月 16 日在上海圆满落幕,本次 meetup 不仅邀请到了 4 位 AI 编译器专家为大家带来了精彩的分享,还新增了圆桌讨论环节,以更多元的视角和各位共同讨论大模型…

SICP :讨论分层及封装性的又一极好例子。

.h文件 #ifndef WIDGET_H #define WIDGET_H#include <QWidget>QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACEclass Widget : public QWidget {Q_OBJECTpublic:Widget(QWidget *parent nullptr);~Widget();void Draw_Element(QPainter *p, QPoint…

Flink 运行时[Runtime] 整体架构

一、基本组件栈 在Flink整个软件架构体系中&#xff0c;同样遵循着分层的架构设计理念&#xff0c;在降低系统耦合度的同时&#xff0c;也为上层用户构建Flink应用提供了丰富且友好的接口。从下图中可以看出整个Flink的架构体系基本上可以分为三层&#xff0c;由上往下依次是 …

融资项目——vue之数据绑定

如上图&#xff0c;当变量{{title}}不在标签内的时候&#xff0c;vue可以正常渲染&#xff0c;点击链接后可正常跳转到百度。但如下图&#xff0c;如果{{title}}在标签内&#xff0c;则此时会产生错误&#xff0c;点击链接后并没有如愿跳转到百度页面。 此时&#xff0c;需要使…

加密算法学习

最近在写一些加密的东西。所以就整理一下常见的加密算法。 欢迎帮助纠错&#xff0c;谢谢。 废话不多直接上图&#xff1a; 加密学习一级介绍描述常见算法常见算法细分非对称加密解释 非对称加密需要两个密钥&#xff1a;公钥 (publickey) 和私钥 (privatekey)。公钥和私钥是…

到底需要会那些技能?才算一个5年经验合格的软件测试工程师

一&#xff1a;经历讲解 微软外包自动化测试两年&#xff0c;而后转入互联网公司做移动端自动化测试一年&#xff0c;经历了入行时的迷茫&#xff0c;而后的笃定&#xff0c;转入移动后对自身定位和价值的怀疑&#xff0c;继而对自动化测试的重新认识&#xff0c;职场三年&…

HrSegNet 23年裂缝检测新文章基于PaddelPaddle和Paddleseg的复现

本文章是对2023年发表在Automation in Construction上论文 Real-time High-Resolution Neural Network with Semantic Guidance for Crack Segmentation 的复现。 我参考了作者上传至github的代码&#xff0c;并得到了作者的帮助。https://github.com/CHDyshli/HrSegNet4Cra…

【机器学习】【线性回归】梯度下降

文章目录 [toc]数据集实际值估计值估计误差代价函数学习率参数更新Python实现线性拟合结果代价结果 数据集 ( x ( i ) , y ( i ) ) , i 1 , 2 , ⋯ , m \left(x^{(i)} , y^{(i)}\right) , i 1 , 2 , \cdots , m (x(i),y(i)),i1,2,⋯,m 实际值 y ( i ) y^{(i)} y(i) 估计值 h …

销量影响因素分析:从多维度解析商品市场表现

在商品市场中&#xff0c;销量是衡量一个商品或品牌成功与否的关键指标。然而&#xff0c;销量的影响因素众多&#xff0c;包括产品品质、价格、品牌知名度、营销策略、竞争环境等。为了深入了解商品市场的表现&#xff0c;我们需要从多个维度对销量影响因素进行分析。本文将通…

FreeRTOS之二值信号量(实践)

信号量相当于一个标志&#xff0c;实现对资源多少的管理。 比如停车场空位的数量。 这里使用的是二值信号量&#xff0c;其队列长度为1&#xff0c;只有空或满两种状态。 1、步骤&#xff1a; 1.1、创建信号量 1.2、释放信号量 1.3、获取信号量 注&#xff1a;若想深入还…

c++11特新:弱引用智能指针

弱引用智能指针std::weak_ptr可以看做是shared_ptr的助手&#xff0c;它不管理shared_ptr内部的指针。std::weak_ptr没有重载操作符*和->&#xff0c;因为它不共享指针&#xff0c;不能操作资源&#xff0c;所以它的构造不会增加引用计数&#xff0c;析构也不会减少引用计数…

DMR与DPMR以及DMR的分层

数字移动无线电 (DMR) 和数字专用移动无线电 (dPMR) 是数字对讲机中使用的流行通信技术。 与传统模拟无线电相比&#xff0c;这两种技术都提供了改进的音频质量、增强的安全功能和增加的网络容量。 但是&#xff0c;DMR 和 dPMR 无线电之间使用的技术存在重大差异&#xff…

【三维生成与重建】ZeroRF:Zero Pretraining的快速稀疏视图360°重建

系列文章目录 题目&#xff1a;ZeroRF: Fast Sparse View 360◦ Reconstruction with Zero Pretraining 任务&#xff1a;稀疏重建&#xff1b;拓展&#xff1a;Image to 3D、文本到3D 作者&#xff1a;Ruoxi Shi* Xinyue Wei* Cheng Wang Hao Su &#xff0c;来自UC San Dieg…

Redis 6 性能大揭秘:如何优化缓存命中率?

Redis 6的性能优化&#xff0c;特别是关于如何优化缓存命中率。 这篇文章会包含10个代码示例&#xff0c;帮助深入理解和应用相关的技巧 1、 监控缓存命中率 在优化之前&#xff0c;首先要了解当前的缓存命中率。Redis提供了INFO命令来查看性能指标&#xff0c;包括命中率。…

51单片机模数转换ADC原理与代码一

51单片机模数转换ADC原理与代码一 1.概述 这篇文章是模数转换的入门文章&#xff0c;这篇文章主要介绍模数的概念、原理、核心指标、专业术语&#xff0c;以及一个模数转换的实例代码实现检测电位器的数值变化。 2.ADC介绍 2.1.ADC概念 ADC(Analog-to-Digital Converter)是…

TrustZone之安全启动与引导失败处理

一、引导和信任链 引导是任何TrustZone系统的关键部分。只有在引导流程中之前运行的所有软件组件都是可信的情况下,才能信任某个软件组件。这通常被称为信任链。下图显示了一个简化的信任链: 在我们的示例中,首先运行的代码是boot ROM。我们必须隐式信任boot ROM,因…

「完美世界」石昊调戏清漪,告白欲以身相许,渡劫神莲淬炼肉身

Hello,小伙伴们&#xff0c;我是拾荒君。 《完美世界》第142集已经更新。石昊在齐道临赠予的令牌庇护下&#xff0c;成功潜入仙池&#xff0c;借助着他的重瞳&#xff0c;他发现那神秘的渡劫神莲正位于这仙池之中。然而&#xff0c;渡劫神莲的位置上空雷云翻滚&#xff0c;宛如…