【YOLO系列】 YOLOv4之Focal Loss损失函数

论文下载:Focal Loss for Dense Object Detection


一、简介

        Focal Loss损失函数何凯明大神在RetinaNet网络中提出来的,主要是为了解决one-stage目标检测中正负样本比例严重失衡的问题。该损失函数降低了大量简单负样本在训练中所占的比重,也可以理解为一种困难样本的挖掘。它通过调整标准的交叉熵损失函数,使得模型在训练过程中更加关注难以分类的样本

二、损失函数形式

        Focal Loss是在交叉熵损失函数基础上进行的修改,首先回顾二分类交叉熵损失:

        y'是经过激活函数的输出,所以在0-1之间。

        可见普通的交叉熵对于正样本而言,输出概率越大损失越小。对于负样本而言,输出概率越小则损失越小。

        此时的损失函数在大量简单样本的迭代过程中比较缓慢且可能无法优化至最优。那么Focal Loss是怎样改进的呢?

        Focal Loss会在常规的交叉熵损失函数基础上增加一个调整项,这个调整项的目的是减小容易分类样本对总损失的贡献,而增加难分类样本对总损失的贡献。通过这种方式,模型在训练过程中会更加关注那些难以分类的样本,从而提高模型的分类性能。

        1、首先在原有的基础上加了一个因子其中γ>0使得减少易分类样本的损失。使得更关注于困难的、错分的样本。

        例如,gamma=2时,对于正类样本而言,预测样本结果为0.95肯定是简单样本,所以(1-0.95)的gamma次方就会很小,这时损失函数值就变得更小。

        而预测概率为0.3的样本其损失相对很大。对于负类样本而言同样,预测0.1的结果应当远比预测0.7的样本损失值要小得多。对于预测概率为0.5时,损失只减少了0.25倍。

        所以更加关注与这种难以区分的样本。这样减少了简单样本影响,大量预测概率很小的样本叠加起来后的效应才可能比较有效。

        2、此外,文中还加入平衡因子alpha,用来平衡正负样本本身的比例不均:当alpha取0.25,即正样本要比负样本占比小,这是因为负例易分。所以剩下来的困难样本重负样本反而少了,所以加权。

        只添加alpha虽然可以平衡正负样本,但是无法解决简单与困难样本的问题。

        gamma调节简单样本权重减低的速率,当gamma=0时,即为交叉熵损失函数。当gamma增加时,调整因子的影响也在增加。

三、总结

        作者认为one-stage和two-stage的表现差异主要原因是大量前景背景类别不平衡导致。作者设计了一个简单密集型网络RetinaNet来训练,在保证速度的同时达到了精度最优。

        为什么two-stage可以避免样本极不平衡?

        在双阶段算法中,在候选框阶段,通过得分和NMS筛选过滤掉了大量的负样本,然后在分类回归阶段又固定了正负样本比例,或者通过OHEM在线困难挖掘是的前景和背景相对平衡。

        为什么one-stage不能避免样本极不平衡?

        one-stage阶段需要产生100k的候选位置,虽然有类似的采样,但是训练仍然被大量负样本所主导。

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

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

相关文章

MySQL中判断字段的字符数

CHAR_LENGTH函数用于返回字符串的长度,长度单位为字符 不管汉字,数字或是字母都算是一个字符,包括中英文标点符号,空格也算是一个字符 语法结构: CHAR_LENGTH(str) 示例: 表:Tweets ----------------…

安装Anaconda遇到的问题

报错如下: Anaconda3 5.1.0(64-bit) Setup Error:Due to incompatibility with several Pyth on libraries, Destination Folder’cannot contain non-ascii characters(special characters or diacritics). Please choose another location. 原因:安装…

JavaScript三元运算

JavaScript 中的三元运算符是一种简洁的条件语句,其语法结构如下: 条件 ? 表达式1 : 表达式2;这里的“条件”是一个布尔表达式(即其结果为 true 或 false)。如果条件为 true,则执行并返回“表达式1”的结果&#xff…

【Vue3】3-1 : 章节介绍 - Vue3组件应用及单文件组件

本书目录:点击进入 一、本章学习目标 二、课程安排 一、本章学习目标 Vue3组件相关概念掌握组件之间的通信封装一个可复用的组件单文件组件SFC:即.vue文件 样式 结构 逻辑脚手架的使用和底层实现机制工程化的认知 二、课程安排 组件的概念及组件的基…

AIGC笔记--CVAE模型的搭建

目录 1--CVAE模型 2--代码实例 1--CVAE模型 简单介绍: 与VAE类似,只不过模型的输入需要考虑图片和条件(condition)的融合,融合结果通过一个 encoder 映射到标准分布(均值和方差),从…

基于ssm百货中心供应链管理系统+jsp论文

摘 要 社会发展日新月异,用计算机应用实现数据管理功能已经算是很完善的了,但是随着移动互联网的到来,处理信息不再受制于地理位置的限制,处理信息及时高效,备受人们的喜爱。本次开发一套百货中心供应链管理系统有管理…

transfomer中Decoder和Encoder的base_layer的源码实现

简介 Encoder和Decoder共同组成transfomer,分别对应图中左右浅绿色框内的部分. Encoder: 目的:将输入的特征图转换为一系列自注意力的输出。 工作原理:首先,通过卷积神经网络(CNN)提取输入图像的特征。然…

构建未来教育:在线培训系统开发的技术探讨

随着远程学习的崛起和数字化教育的普及,在线培训系统的开发成为了现代教育的核心。本文将深入讨论在线培训系统的关键技术要点,涵盖前后端开发、数据库管理、以及安全性和身份验证等关键方面。 前端开发:提供交互性与用户友好体验 在构建在…

02 SpringMVC接收数据之访问路径设置+四种接参方式+@EnableWebMvc

1.1 访问路径设置 RequestMapping注解的作用就是将请求的 URL 地址和处理请求的方式(handler方法)关联起来,建立映射关系。 SpringMVC 接收到指定的请求,就会来找到在映射关系中对应的方法来处理这个请求。 1.1.1 精准路径匹配…

京东ES支持ZSTD压缩算法上线了:高性能,低成本 | 京东云技术团队

1 前言 在《ElasticSearch降本增效常见的方法》一文中曾提到过zstd压缩算法[1],一步一个脚印我们终于在京东ES上线支持了zstd;我觉得促使目标完成主要以下几点原因: Elastic官方原因:zstd压缩算法没有在Elastic官方的开发计划中&…

【Leetcode Sheet】Weekly Practice 24

Leetcode Test 447 回旋镖的数量(1.8) 给定平面上 n 对 互不相同 的点 points ,其中 points[i] [xi, yi] 。回旋镖 是由点 (i, j, k) 表示的元组 ,其中 i 和 j 之间的距离和 i 和 k 之间的欧式距离相等(需要考虑元组的顺序)。 …

最新智能AI系统ChatGPT网站程序源码+详细图文搭建部署教程,Midjourney绘画,GPT语音对话+ChatFile文档对话总结+DALL-E3文生图

一、前言 SparkAi创作系统是基于ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统,支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美,可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署AI创作Ch…

如何增加服务器的高并发

随着互联网的快速发展和普及,越来越多的应用程序需要支持高并发的请求处理。在这种情况下增加服务器的高并发能力成为了一个热门的话题。下面简单的介绍如果提高服务器的高并发能力。 负载均衡 是把请求分发到多个服务器上,来实现请求的平衡和分担。负…

使用JavaScript实现实时在线协作编辑器:从设计到实现

一、引言 随着Web技术的发展,实现在线协作编辑文档已经成为一种常见的需求。通过在线协作,多位用户可以同时编辑同一个文档,并实时看到其他用户的更改。这样的功能需要复杂的技术实现,包括数据同步、冲突解决和实时通信。本篇博客…

(一)环境部署

Python虚拟环境 安装virtualenv pip install virtualenv 创建环境 virtualenv -p D:\python\python.exe(python解释器目录) env-py3.6(虚拟环境目录,名称随意) 在当前目录下生成env-py3.6目录。 激活环境 ...\env-py3.6\Scripts> .\activate 关闭&#xf…

应用架构演变过程、rpc及Dubbo简介

一、应用架构演变历史: 单一应用架构 -> 垂直应用架构 -> 分布式服务架构 -> 微服务架构。 单一应用架构 当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本。 此时,用于简化增删…

STM32 CubeIDE 使用 CMSIS-DAP烧录 (方法2--外部小工具)

前言: 本篇所用方法,需要借助一个外部的工具小软件。 优点:烧录更稳定; 缺点:不能在线仿真调试。 下面链接,是另一种方法:修改CubeIDE调试文件。能在CubeIDE直接烧录、仿真,但不稳定。…

Bazel

简介: Bazel 是 google 研发的一款开源构建和测试工具,也是一种简单、易读的构建工具。 Bazel 支持多种编程语言的项目,并针对多个平台构建输出。 高级构建语言:Bazel 使用一种抽象的、人类可读的语言在高语义级别上描述项目的构建属性。与其…

uniapp 简易自定义日历

1、组件代码 gy-calendar-self.vue <template><view class"calendar"><view class"selsct-date">请选择预约日期</view><!-- 日历头部&#xff0c;显示星期 --><view class"weekdays"><view v-for"…

Linux常用命令大全(三)

系统权限 用户组 1. 创建组groupadd 组名 2. 删除组groupdel 组名 3. 查找系统中的组cat /etc/group | grep -n “组名”说明&#xff1a;系统每个组信息都会被存放在/etc/group的文件中1. 创建用户useradd -g 组名 用户名 2. 设置密码passwd 用户名 3. 查找系统账户说明&am…