阅读笔记7——Focal Loss

news2024/11/26 12:39:46

一、提出背景

  当前一阶的物体检测算法,如SSD和YOLO等虽然实现了实时的速度,但精度始终无法与两阶的Faster RCNN相比。是什么阻碍了一阶算法的高精度呢?何凯明等人将其归咎于正、负样本的不平衡,并基于此提出了新的损失函数Focal Loss及网络结构RetinaNet,在与同期一阶网络速度相同的前提下,其检测精度比同期最优的二阶网络还要高。
  为了解决一阶网络中样本的不均衡问题,何凯明等人首先改善了分类过程中的交叉熵函数,提出了可以动态调整权重的Focal Loss。

二、交叉熵损失

1. 标准交叉熵损失

  标准的交叉熵函数,其形式如式(2-1)所示:
C E ( p , y ) = { − l o g ( p ) i f ( y = 1 ) − l o g ( 1 − p ) o t h e r w i s e (2-1) CE(p,y)=\left\{\begin{matrix} -log(p) & if(y=1) & \\ -log(1-p) & otherwise & \end{matrix}\right.\tag{2-1} CE(p,y)={log(p)log(1p)if(y=1)otherwise(2-1)

  公式中, p p p代表样本在该类别的预测概率, y y y代表样本标签。可以看出,当标签为1时, p p p越接近1,则损失越小;标签为0时, p p p越接近0,则损失越小,符合优化的方向。
  为了方便表示,按照式(2-2)将 p p p标记为 p t p_{t} pt
p t = { p i f ( y = 1 ) 1 − p o t h e r w i s e (2-2) p_{t}=\left\{\begin{matrix} p & if(y=1) & \\ 1-p & otherwise & \end{matrix}\right.\tag{2-2} pt={p1pif(y=1)otherwise(2-2)
  则交叉熵可以表示为式(2-3)的形式:
C E ( p , y ) = C E ( p i ) = − l o g ( p i ) (2-3) CE(p,y)=CE(p_{i})=-log(p_{i})\tag{2-3} CE(p,y)=CE(pi)=log(pi)(2-3)

  标准的交叉熵中所有样本的权重都是相同的,因此如果正、负样本不均衡,大量简单的负样本会占据主导地位,少量的难样本与正样本会起不到作用,导致精度变差。

2. 平衡交叉熵损失

  为了改善样本的不平衡问题,平衡交叉熵在标准的基础上增加了一个系数 α t \alpha _{t} αt来平衡正、负样本的权重, α t \alpha _{t} αt由超参数 α \alpha α按照式(2-4)计算得来, α \alpha α取值在[0,1]区间内。

α t = { α i f ( y = 1 ) 1 − α o t h e r w i s e (2-4) \alpha _{t}=\left\{\begin{matrix} \alpha & if(y=1) & \\ 1-\alpha & otherwise & \end{matrix}\right.\tag{2-4} αt={α1αif(y=1)otherwise(2-4)

  有了 α t \alpha _{t} αt,平衡交叉熵损失公式如式(2-5)所示:

C E ( p t ) = − α t l o g ( p t ) (2-5) CE(p_{t})=-\alpha _{t}log(p_{t})\tag{2-5} CE(pt)=αtlog(pt)(2-5)

  尽管平衡交叉熵损失改善了正、负样本间的不平衡,但由于其缺乏对难易样本的区分,因此没有办法控制难易样本之间的不均衡。

三、Focal Loss

  Focal Loss为了同时调节正、负样本与难易样本,提出了如式(3-1)所示的损失函数:

F L ( p t ) = − α t ( 1 − p t ) γ l o g ( p t ) (3-1) FL(p_{t})=-\alpha_{t}(1-p_{t})^{\gamma}log(p_{t})\tag{3-1} FL(pt)=αt(1pt)γlog(pt)(3-1)

  对于该损失函数,又如下3个属性:

  • 与平衡交叉熵类似,引入了 α t \alpha_{t} αt权重,为了改善正负样本的不均衡,可以提升一些精度。
  • ( 1 − p t ) γ (1-p_{t})^{\gamma} (1pt)γ是为了调节难易样本的权重。当一个边框被误分类时, p t p_{t} pt较小,则 ( 1 − p t ) γ (1-p_{t})^{\gamma} (1pt)γ接近于1,其损失几乎不受影响;当 p t p_{t} pt接近于1时,表明其分类预测较好,是简单样本, ( 1 − p t ) γ (1-p_{t})^{\gamma} (1pt)γ接近于0,因此其损失被调低了。
  • γ \gamma γ是一个调制因子, γ \gamma γ越大,简单样本损失的贡献度会越低,

四、RetinaNet

  为了验证Focal Loss的效果,何凯明等人还提出了一个一阶物体检测结构RetinaNet,其结构如图4-1所示:

在这里插入图片描述

图4-1 RetinaNet网络结构图
  • 在Backbone部分,RetinaNet利用ResNet与FPN构建了一个多尺度特征的特征金字塔。
  • RetinaNet使用了类似于Anchor的预选框,在每一个金字塔层,使用了9个大小不同的预选框。
  • 分类子网络:分类子网络为每一个预选框预测其类别,因此其输出特征大小为KA×W×H,A默认为9,K代表类别数。中间使用全卷积网络与ReLU激活函数,最后利用Sigmoid函数输出预测值。
  • 回归子网络:回归子网络与分类子网络平行,预测每一个预测框的偏移量,最终输出特征的大小为4A×W×W。与当前主流工作不同的是,两个子网络没有权重的共享。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JUC并发编程(上)

✨作者:猫十二懿 ❤️‍🔥账号:CSDN 、掘金 、个人博客 、Github 🎉公众号:猫十二懿 学习地址 写在最前 JUC(Java Util Concurrent)学习内容框架: #mermaid-svg-r5jN6ICeVruSjU0I …

MySQL一隐式转换

我相信90%以上的同学们在平时开发时,或多或少都被隐式转换(CONVERT_IMPLICIT)坑过,甚至测出bug前你都浑然不知。你还别不信,“无形之刃,最为致命!” mysql> SELECT * from t_user; ---------…

【LeetCode】剑指 Offer 11. 旋转数组的最小数字 p82 -- Java Version

题目链接:https://leetcode.cn/problems/xuan-zhuan-shu-zu-de-zui-xiao-shu-zi-lcof/ 1. 题目介绍(11. 旋转数组的最小数字) 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 给你一个可能存在 重复 元素值…

关于微前端,你想知道的都在这!

更多请关注微前端专题 https://codeteenager.github.io/Micro-Frontends/ 介绍 微前端官网:https://micro-frontends.org/ 问题:如何实现多个应用之间的资源共享? 之前比较多的处理方式是npm包形式抽离和引用,比如多个应用项目之…

浅谈Redisson实现分布式锁的原理

1.Redisson简介 Redis 是最流行的 NoSQL 数据库解决方案之一,而 Java 是世界上最流行(注意,我没有说“最好”)的编程语言之一。虽然两者看起来很自然地在一起“工作”,但是要知道,Redis 其实并没有对 Java…

windows共享文件夹(目录)(SMB服务)

SMB服务,文件共享服务,俗称文件夹(目录)、打印机等共享 一、创建共享用户 windos系统中,文件夹共享需要设置指定用户与密码,通过输入用户和密码进行连接,在设置共享时系统中有Everyone所有人设…

【Linux学习笔记】1.Linux 简介及安装

前言 本章介绍Linux及其安装方法。 Linux 简介 Linux 内核最初只是由芬兰人林纳斯托瓦兹(Linus Torvalds)在赫尔辛基大学上学时出于个人爱好而编写的。 Linux 是一套免费使用和自由传播的类 Unix 操作系统,是一个基于 POSIX 和 UNIX 的多…

【基础语法】JavaScript 全栈体系(四)

JavaScript 基础 第五章 类型转换 一、为什么需要类型转换? JavaScript是弱数据类型: JavaScript也不知道变量到底属于那种数据类型,只有赋值了才清楚。 坑: 使用表单、prompt 获取过来的数据默认是字符串类型的,此…

JVM及其内存模型

目录儿一、JVM1.1 为什么需要JVM?1.2 JVM内存模型1.3 堆(Heap)1.4 方法区(Method Area)1.5 虚拟机栈(JVM Stack)1.6 本地方法栈(Native Stack)1.7 程序计数器(PC Register)一、JVM JVM是Java V…

I-Cache 和 D-Cache

定义ICache和DCache是一种内存,虽然目前接触了好几种内存,寄存器,DDR等,它们在物理上的工作原理虽然不同,但是访问属性却很像。在速度上CPU > 寄存器 > Cache > SRAM >PS&…

100种思维模型之六顶帽思维模型-018

工作中,经常开会,开会于工作当然无可厚非。 可是,现实中的会议,往往存在效率低,效果不佳的问题。如,连续开一天的研究讨论会,最后没能讨论出个所以然,又或者会议有了决策&#xff0c…

QT_dbus(ipc进程间通讯)

QT_dbus(ipc进程间通讯) 前言: 参考链接: https://www.cnblogs.com/brt3/p/9614899.html https://blog.csdn.net/weixin_43246170/article/details/120994311 https://blog.csdn.net/kchmmd/article/details/118605315 一个大型项目可能需要多个子程序同…

《计算机网络:自顶向下方法》实验5:ARP协议分析 Wireshark实验

实验13:ARP协议分析 1 What is the 48-bit Ethernet address of your computer? 00:d0:59:a9:3d:68 2 What is the 48-bit destination address in the Ethernet frame? Is this the Ethernet address of gaia.cs.umass.edu? (Hint: the answer is no). What device has …

推荐算法—widedeep原理知识总结代码实现

wide&deep原理知识总结代码实现1. Wide&Deep 模型的结构1.1 模型的记忆能力1.2 模型的泛化能力2. Wide&Deep 模型的应用场景3. Wide&Deep 模型的代码实现3.1 tensorflow实现3.2 pytorch实现今天,总结一个在业界有着巨大影响力的推荐模型&#xff0c…

设计模式.工厂模式.黑马跟学笔记

设计模式.工厂模式4.创建型模式4.2 工厂模式4.2.1 概述4.2.2 简单工厂模式4.2.2.1 结构4.2.2.2 实现4.2.2.4 优缺点4.2.2.3 扩展4.2.3 工厂方法模式4.2.3.1 概念4.2.3.2 结构4.2.3.3 实现4.2.3.4 优缺点4.2.4 抽象工厂模式4.2.4.1 概念4.2.4.2 结构4.2.4.2 实现4.2.4.3 优缺点4…

C语言进阶(六)—— 结构体

1. 结构体基础知识1.1 结构体类型的定义struct Person{char name[64];int age; };typedef struct _PERSON{char name[64];int age; }Person;注意:定义结构体类型时不要直接给成员赋值,结构体只是一个类型,编译器还没有为其分配空间&#xff0…

【Kubernetes 入门实战课】Day02——初识容器

系列文章目录 【Kubernetes 入门实战课】Day01——搭建kubernetes实验环境(一) 文章目录系列文章目录前言一、Docker的诞生二、Docker的形态1、Docker Desktop2、Docker Engine二、Docker的安装1、服务器连接外网安装2、服务器不通外网三、Docker的使用三、Docker的架构总结前…

JavaWeb11-死锁

目录 1.死锁定义 1.1.代码演示 1.2.使用jconsole/jvisualvm/jmc查看死锁 ①使用jconsole:最简单。 ②使用jvisualvm:(Java虚拟机)更方便,更直观,更智能,更高级,是合适的选择。 …

Melis4.0[D1s]:2.启动流程(GUI桌面加载部分)跟踪笔记

文章目录0. 控制台输出信息等级设置0.1 设置log level 4 无法正常启动1.宏观启动流程1.1 控制台入口函数finsh_thread_entry()执行《startup.sh》1.2 《startup.sh》启动桌面GUI模块1.2.1 《startup.sh》加载 desktop.mod1.2.2 desktop.mod加载 init.axf1.2.3 init.axf 介绍1.…

C#与三菱PLC MC协议通信,Java与三菱PLC MC协议通信

三菱PLC的MC协议是一种常用的通信协议,用于实现三菱PLC与其他设备之间的通信。以下是一些关于MC协议的基本信息:协议格式MC协议的通信数据格式如下:数据头网络编号PC编号目标模块IO编号目标模块站号本机模块IO编号本机模块站号请求数据长度请…