【pytorch损失函数(6)】Focal loss, for dense object detection再分析

news2024/12/24 2:07:51

之前翻译了这篇论文,但是理解还不深。今天借着研究rotation的计划,回顾这篇文章。

论文的主要贡献

Focal loss主要是为了解决目标检测中正负样本比例严重失衡的问题。该损失函数降低了大量简单负样本在训练中所占的权重,也可理解为一种困难样本挖掘。

1、类class不平衡
我们发现,在密集探测器dense detectors的训练过程中遇到:1、 极端的地面背景类 ground-background class 不平衡是主要原因。2、 前景(positive)和背景(negatives)类别的不平衡问题。解决此class失衡问题,通过重塑标准的交叉熵损失, 它降低了分配给分类良好的示例的损失(it down-weights the loss assigned to well-classified examples)。提出了一种叫做Focal Loss的损失函数,Focal Loss 将训练重点放在稀疏的困难例子集上

防止产生大量 easy negatives
用来降低大量easy negatives在标准交叉熵中所占权重
提高hard negatives所占权重

2、提出了RetinaNet
为了评估损失的有效性,我们设计并训练了一个简单的密集检测器,我们称之为RetinaNet。
在这里插入图片描述

模型在测试数据集中的梯度分布

这里我们来看一张收敛的模型在测试数据集中的梯度分布。最左边梯度接近于0就是简单样本,简单样本的数量很多。中间部分是一些不同难度的样本,最右边就是loss很大的困难样本,这些样本在数量上相对于简单样本是非常少的,所以即使他们的梯度很大,但是如果使用交叉熵,那么他们对loss的贡献还是很少,所以他们还是很难学。

图片来源
在这里插入图片描述

下图是文中所给的不同样本的loss分布,还是如我们刚才所讨论的。这些易分的样本loss虽然不高但是数量很多,所以导致困难样本的loss容易被这些简单样本所覆盖,导致他们更加难学习。而引入focal loss之后可以看到我们降低了简单样本的loss,从而提高了他们对梯度的贡献。那么什么是focal loss呢,我们下面将着重介绍focal loss.
在这里插入图片描述

focal loss 是一种思想,可以和CE结合,也可以和其他损失结合

二分类问题Focal loss计算如下

在这里插入图片描述

当然Focal loss对多分类的任务也同样适用。

不适合 focal loss 的分析

参考

focal loss论文 揭示了目标检测的核心问题:正负样本分布极端不均衡并由此导致的大量简单负样本占据了loss(梯度、或者training过程),作者由此设计了focal loss,以及训练focal loss的网络结构retinanet以及一系列训练中需要注意的点。

但是focal loss并不是万能的,在很多场景下,比如单多标签分类上不一定好使,不仅仅是因为α,γ参数不好整,更重要的是,在pt高的时候,pred和gt越接近(置信度越高),focal的越狠,如果不是负样本中有大量的easy example的话,这种focal对容易学的样本都产生了很大的降权,损失有很能被难例主导,简单和难例的损失权重是不对等的,噪声比较大的样本不一定能学明白,还有可能降点。这种对简单样本降权有点像margin的那味。

思考:是否适合做数值回归?

看论文【论文】Focal-EIOU Loss:Focal and Efficient IOU Loss for Accurate Bounding Box Regression 用于精确边界框回归,是可行的。

论文中的结论:
实验结果表明:

引入的边长损失以及Focal L1损失函数的设计增加了IoU目标的损失和梯度,进而提高了bbox回归精度。

Focal L1损失函数它根据猜想的损失函数梯度所具有的属性,设计了损失函数的梯度,再反向积分得到这个损失函数起到了很好的效果。

但是实验表明Focal_EIOU并不存在某个损失函数在所有数据集上碾压其它损失函数,还要依赖于数据集的分布,锚点框的设计,检测算法的设计等等诸多因素,在特定的任务下需要多做尝试才能知道选择哪个边界框损失函数。

代码分析

分析

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

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

相关文章

Segment Anything专题论文和代码汇总

文章目录 2023Scaling-up Remote Sensing Segmentation Dataset with Segment Anything ModelPersonalize Segment Anything Model with One ShotSegment Anything in Medical ImagesMatcher: Segment Anything with One Shot Using All-Purpose Feature MatchingCustomized Se…

【Python】mmSegmentation语义分割框架教程(1.x版本)

文章目录 0.引言1. 数据集设置1.1. dataset implementation py1.2. dataset config py 2.模型设置3.训练 0.引言 \qquad 本文是mmSegmentation语义分割框架教程(0.x版本)的1.x版本。不熟悉mmsegmentation是什么的读者可参考原文的引言部分,熟…

sqlmap命令大全(附详细扫描流程)

一、sqlmap命令大全。 -u 指定目标URL (可以是http协议也可以是https协议)-d 连接数据库--dbs 列出所有的数据库--current-db 列出当前数据库--tables 列出当前的表--columns 列出当前的列-D 选择使用哪个数据库-T 选择使用哪个表-C 选择使用哪个列--dump 获取字段中的数据--…

程序猿想考一个PMP,可以吗,怎么考呢?

我从新考纲考完下来,3A通过了考试,最开始也被折磨过一段时间,但是后面还是找到了方法,也算有点经验,给大家分享一下吧。 程序猿应该是考PMP里面人最多的,毕竟有一个30大坎,大部分人还是考虑转型…

rk3588 大小核启动

setenv ipaddr 10.12.1.205;setenv serverip 10.12.1.200;tftp 0x800000 bsprk3588_owl_ai_box_plus_v10_x64.bin;go 0x800000 rk3588 启动 4 核无问题,启动 8 核出现乱码以及死机问题。 分析代码,对 psci 接口进行更新,启动 4 核&#xf…

【服务器数据恢复】EXT3文件系统下raid数据恢复案例

服务器数据恢复环境: 华为OceanStor某型号存储,10块硬盘组成raid6磁盘阵列。 上层操作系统采用EXT3文件系统,划分2个lun。 服务器故障&分析: 在巡检中发现存储中的raid不可用,管理员进行了重新分配并初始化raid的操…

VS2019 error LNK2001: 无法解析的外部符号 解决方法

今天编译一个项目的时候,用debug模式编译时可以通过并生成exe的。 换成release模式,直接报链接错误,如下: 1>libeay32.lib(pem_lib.obj) : error LNK2019: 无法解析的外部符号 ___iob_func,函数 _PEM_def_callback…

微信小程序| AIGC之动手实现ChatGPT法律顾问小程序

一、需求背景 在资本退去后,现如今的互联网行情很差劲,很多创新业务都不得不砍除。再加上国内互联网时代进入到了一个增量犹显疲态,增量杀红了眼!阶段,各大互联网公司均有一种断臂求生的态势!各位互联网同…

hadoop3.2.4集成flink 1.17.0

前言 flink安装部署有三种方式 local:单机模式,尽量不使用 standalone: flink自带集群,资源管理由flink集群管理,开发环境测试使用,不需要hadoop集群 flink on yarn: 把资源管理交给yarn实现,计算机资源统一由Haoop…

PCIe 载板设计资料原理图:382-基于FMC+的XCVU3P高性能 PCIe 载板

基于FMC的XCVU3P高性能 PCIe 载板 一、板卡概述 板卡主控芯片采用Xilinx UltraScale16 nm VU3P芯片(XCVU3P-2FFVC1517I)。板载 2 组 64bit 的DDR4 SDRAM,支持 IOX16或者 JTAG 口,支持PCIe X 16 ReV3.0以及 FMC 扩展接口。…

Hadoop基础学习---6、MapReduce框架原理

1、MapReduce框架原理 1.1 InputFormat数据输入 1.1.1 切片与MapTask并行度决定机制 1、问题引出 MapTask的并行度决定Map阶段的任务处理并发度,进而影响到整个job的处理速度。 2、MapTask并行度决定机制 数据块:Block是HDFS物理上吧数据分成一块一块。…

3D CAD模型的体素化

你有没有搜索过如何将 Cad 模型转换为 python 就绪的 numpy 数组,但没有得到任何明确的答案? 我也是。 经过长时间的研究并尝试了很多软件和 python 库,我终于能够将 3D STEP 文件转换为 3 维 numpy 数组。 如果你想做同样的事情或只是想知道…

线性表的总结

逻辑结构 逻辑结构 具有相同特性的数据元素的有限序列 特性 有穷性:一个线性表的元素个数是有限的 一致性:一个线性表的所有元素的性质相同,也就是具有相同的数据类型 序列性:所有元素之间的相对…

OJ练习第114题——T 秒后青蛙的位置

T 秒后青蛙的位置 力扣链接:1377. T 秒后青蛙的位置 题目描述 给你一棵由 n 个顶点组成的无向树,顶点编号从 1 到 n。青蛙从 顶点 1 开始起跳。规则如下: 在一秒内,青蛙从它所在的当前顶点跳到另一个 未访问 过的顶点&#xf…

十、数据仓库详细介绍(数据质量)流程与工具

上篇我们主要介绍了以下三部分内容。 第一部分,介绍了五种常见的数据管理知识体系,数据质量在所有的知识体系中都有非常重要的地位,数据应用体现数据价值,数据质量为应用提供支撑。 第二部分,我们介绍了数据质量评判的…

程序优化 - ABAP并行处理

SAP的并行方式有很多种: SPTA框架,参考debug可以看出这个核心也是异步bgRFC 异步RFC,使用CALL FUNCTION “XXXXXX” STARTING NEW TASK XXXX CALLING XXXX ON END OF TASK BANK_PP_JOBCTRL框架 拆分成多个后台JOB执行 这里只说SPTA框架…

【高危】Linux Kernel OverlayFS 权限提升漏洞(POC公开)

漏洞描述 Linux Kernel OverlayFS 是 Linux 内核提供的一种文件系统,允许将多个文件系统合并为一个单一的虚拟文件系统。 在 Linux Kernel OverlayFS 受影响版本中,当用户将具备特权的文件从 nosuid 的挂载点复制到另一个挂载点时,未授权的…

【严重】ejs 存在服务端模板注入漏洞(存在POC)

漏洞描述 EJS 是开源的 JavaScript 模板引擎,允许在HTML代码中使用JavaScript代码块,closeDelimiter 参数是 EJS 模板中的结束标记,用于指定结束分隔符。 由于对 CVE-2022-29078 漏洞修复不完全,当应用程序使用 EJS 模板引擎&am…

如何恢复已删除或丢失的音乐文件

您是否遇到过您或其他人不小心删除了您的音乐文件的情况?作为我自己的音乐爱好者,我知道这种感觉有多么毁灭性。听音乐让我们平静和放松,它可以帮助一些人在工作时提高工作效率或缓解他们感受到的压力。 这就是为什么如果您不小心丢失了您心…

springcloud-alibaba (04)Gateway与Nacos结合使用

Gateway与Nacos结合使用 🎉欢迎来到这里,今天我将为大家介绍如何将Spring Cloud Gateway和Nacos结合使用,实现一个高效稳定的服务网关!在微服务架构中,API网关是必不可少的一部分,它提供了路由请求、负载均…