【目标检测】Focal Loss

Focal Loss用来解决正负样本不平衡问题,并提升训练过程对困难样本的关注。

在一阶段目标检测算法中,以YOLO v3为例,计算置信度损失(图中第3、4项)时有目标的点少,无目标的点多,两者可能相差百倍千倍甚至更多,这就导致无目标的置信度损失会以压倒性的数量优势在数值上淹没有目标的置信度损失。

首先,我们回顾一下第三、四项里 [ ⋅ ] [\cdot] []所对应的BCELoss,其公式如下:

其中, p ∈ [ 0 , 1 ] p\in[0,1] p[0,1]是经sigmoid输出的预测概率, y ∈ { 0 , 1 } y\in\{0,1\} y{0,1}是真实标签。简单起见,我们使用 p t p_t pt简化上述损失, p t p_t pt公式如下:

于是,我们得到

在此基础上,Focal Loss引入 α t \alpha_t αt来加权BCELoss以解决正负样本不平衡的问题,公式如下:

其中, α t \alpha_t αt定义如下:

其中, α ∈ [ 0 , 1 ] \alpha\in[0,1] α[0,1]是自行设定的权重参数。直观来说,当正样本较少时,我们可以设定一个较大的 α \alpha α,例如 0.9 0.9 0.9,这样正样本的损失相比负样本的损失就会更大从而解决正负样本失衡的问题。

⚠️ 事实上,Focal Loss原文中的最佳 α \alpha α 0.25 0.25 0.25,这说明原文并不是用它来处理正负样本失衡的,更像是一个超参数。

进一步地,Focal Loss还能使得模型在训练过程中更加关注困难样本。对于正样本来说,我们希望预测概率 p → 1 p\rightarrow 1 p1,那么 p p p越小说明该样本预测起来就越困难,反之就越简单。对于负样本, p p p越小说明该样本预测起来就越简单,反之就越困难。直观上,我们只需努力矫正困难样本,毕竟简单样本已经预测的不错了,于是Focal Loss引入 ( 1 − p t ) γ (1-p_t)^{\gamma} (1pt)γ来加权BCELoss以实习对困难样本的关注,公式如下:

其中, γ ≥ 0 \gamma\geq0 γ0,从下表可以看出, ( 1 − p t ) γ (1-p_t)^{\gamma} (1pt)γ使简单样本的损失大大降低,从而使困难样本与简单样本的损失比增大,以使训练过程更加关注困难样本。

y y y γ \gamma γ p p p p t p_t pt C E ( p , y ) CE(p,y) CE(p,y) ( 1 − p t ) γ (1-p_t)^{\gamma} (1pt)γ F L ( p t ) FL(p_t) FL(pt)
120.90.90.110.010.0011
120.10.12.300.811.863
020.20.80.220.040.0088
020.80.21.610.641.0304

综合 α t \alpha_t αt ( 1 − p t ) γ (1-p_t)^{\gamma} (1pt)γ即为完整的Focal Loss,公式如下:

写成 p p p α \alpha α的形式就是:
F L ( p ) = { − α ( 1 − p ) γ log ⁡ ( p ) , i f y = 1 − ( 1 − α ) p γ log ⁡ ( 1 − p ) , o t h e r w i s e FL(p)=\begin{cases}-\alpha(1-p)^{\gamma}\log(p),&if~y=1\\-(1-\alpha)p^{\gamma}\log(1-p), &otherwise\end{cases} FL(p)={α(1p)γlog(p),(1α)pγlog(1p),if y=1otherwise

致谢:

本博客仅做记录使用,无任何商业用途,参考内容如下:
3.1 YOLO系列理论合集(YOLOv1~v3)

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

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

相关文章

【1524】java投票管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 java 投票管理系统是一套完善的java web信息管理系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发,数据库为Mysql5.0&…

Rust入门-所有权与借用

一、为什么、是什么、怎么用 1、为什么Rust要提出一个所有权和借用的概念 所有的程序都必须和计算机内存打交道,如何从内存中申请空间来存放程序的运行内容,如何在不需要的时候释放这些空间,成为所有编程语言设计的难点之一。 主要分为三种…

java新冠病毒密接者跟踪系统(springboot+mysql源码+文档)

风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的新冠病毒密接者跟踪系统。项目源码以及部署相关请联系风歌,文末附上联系信息 。 项目简介: 新冠病毒密接者跟…

Java垃圾回收1

1.对象什么时候可以被垃圾器回收 1.垃圾回收的概念 为了让程序员更专注于代码的实现,而不用过多的考虑内存释放的问题,所以, 在Java语言中,有了自动的垃圾回收机制,也就是我们熟悉的GC(Garbage Collection)。 有了垃圾…

2、MATLAB入门常用命令

一、退出和中断 exit和quit:结束MATLAB会话。程序完成,如果没有明确保存,则变量中的数据丢失。 Ctrl c:中断一个MATLAB任务。例如,当MATLAB正在计算或打印时,中断一个任务,但会话并没有结束。…

麒麟服务器操作系统自动化安装应答文件制作

原文链接:麒麟服务器操作系统自动化安装应答文件制作 Hello,大家好啊!今天我们将探讨如何为麒麟服务器操作系统制作自动化安装应答文件。在部署大量服务器时,自动化安装是提高效率和确保安装一致性的关键技术。通过使用应答文件&a…

云原生Kubernetes: K8S 1.29版本 部署Kuboard

目录 一、实验 1.环境 2.K8S 1.29版本 部署Kuboard (第一种方式) 3.K8S 1.29版本 部署Kuboard (第二种方式) 4.K8S 1.29版本 使用Kuboard 二、问题 1.docker如何在node节点间移动镜像 一、实验 1.环境 (1)主机 表1 主机 主机架构版本IP备注ma…

太阳能路灯光伏板的朝向设计问题

题目:太阳能路灯光伏板的朝向设计问题 难度对标几乎每一年的国赛A题。 QQ群:592697532 公众号:川川菜鸟 文章目录 背景问题问题一问题二问题三 题目解读相关公式(必备)太阳辐射的计算光伏板接收的辐射光学效率大 气透…

Spring Cloud Gateway详细介绍以及实现动态路由

一. 简介 Spring Cloud Gateway This project provides a libraries for building an API Gateway on top of Spring WebFlux or Spring WebMVC. Spring Cloud Gateway aims to provide a simple, yet effective way to route to APIs and provide cross cutting concerns to …

C++的线程

#include<iostream> #include<thread> #include<unistd.h> using namespace std; void myrun() {while(true){cout<<"I am a thread"<<endl;sleep(1);} } int main() {thread t(myrun);t.join();return 0; } 如果不添加-lpthread就会报…

基于ChatGPT打造安全脚本工具流程

前言 以前想要打造一款自己的工具&#xff0c;想法挺好实际上是难以实现&#xff0c;第一不懂代码的构造&#xff0c;只有一些工具脚本构造思路&#xff0c;第二总是像重复造轮子这种繁琐枯燥工作&#xff0c;抄抄改改搞不清楚逻辑&#xff0c;想打造一款符合自己工作的自定义的…

Day 25 组合(优化)216.组合总和III 17.电话号码的字母组合

组合&#xff08;优化&#xff09; 先给出组合问题的回溯部分代码&#xff1a; vector<vector<int>> result; // 存放符合条件结果的集合vector<int> path; // 用来存放符合条件结果void backtracking(int n, int k, int startIndex) {if (path.size() k) …

【opencv】dnn示例-person_reid.cpp 人员识别(ReID,Re-Identification)系统

ReID(Re-Identification&#xff0c;即对摄像机视野外的人进行再识别) 0030_c1_f0056923.jpg 0042_c5_f0068994.jpg 0056_c8_f0017063.jpg 以上为输出结果&#xff1a;result文件夹下 galleryLIst.txt queryList.txt 模型下载&#xff1a; https://github.com/ReID-Team/ReID_e…

OpenHarmony网络通信-socket-io

简介 socket.io是一个在客户端和服务器之间实现低延迟、双向和基于事件的通信的库。建立在 WebSocket 协议之上&#xff0c;并提供额外的保证&#xff0c;例如回退到 HTTP 长轮询或自动重新连接。 效果展示 下载安装 ohpm install ohos/socketio OpenHarmony ohpm 环境配置等更…

VulnHub靶机 DC-5 打靶 渗透测试详情过程

VulnHub靶机 DC-5 打靶 详细渗透测试过程 目录 VulnHub靶机 DC-5 打靶 详细渗透测试过程一、将靶机导入到虚拟机当中二、渗透流程主机发现端口扫描目录爆破文件包含getshell反弹shell提权 一、将靶机导入到虚拟机当中 靶机地址&#xff1a; https://download.vulnhub.com/dc/…

【云计算】云计算八股与云开发核心技术(虚拟化、分布式、容器化)

【云计算】云计算八股与云开发核心技术&#xff08;虚拟化、分布式、容器化&#xff09; 文章目录 一、什么是云计算&#xff1f;1、云计算的架构&#xff08;基础设施&#xff0c;平台&#xff0c;软件&#xff09;2、云计算的发展 二、如何做云计算开发&#xff1f;云计算的核…

量子时代加密安全与区块链应用的未来

量子时代加密安全与区块链应用的未来 现代密码学仍然是一门相对年轻的学科&#xff0c;但其历史却显示了一种重要的模式。大多数的发展都是基于几年甚至几十年前的研究。而这种缓慢的发展速度也是有原因的&#xff0c;就像药物和疫苗在进入市场之前需要经过多年的严格测试一样&…

心学从0开始学习rust-十万个为什么篇章(持续更新篇章)

问答环节 1.const x 1;和let x 1有何区别呢&#xff0c;const申请的是全局变量所以会一直有效对吗&#xff1f; const 声明的常量具有全局作用域&#xff0c;但它们不能直接在函数内部声明。常量通常用于定义整个程序中使用的值&#xff0c;如配置常量或数学常量。 let 声明…

tcp网络编程——2

1.一个服务器只能有一个客户端连接&#xff08;下面代码&#xff09; ​​​​​​​tcp网络编程&#xff08;基础&#xff09;-CSDN博客 2.一个服务器可以有多个客户端连接&#xff08;多线程&#xff09; server端创建多个线程&#xff0c;每个线程与不同的client端建立连…

浅写个登录(无js文件)

全部代码如下&#xff0c;无需编写wxss文件&#xff0c;渲染都在style里面&#xff1a; <view style"height: 250rpx;width: 100%;"> <!-- 背景图片 --><view style"position: absolute; background-color: antiquewhite; height: 250rpx;width…