【论文阅读】Weighted Boxes Fusion(WBF)模型融合原理解读

news2024/11/15 13:46:21

论文地址:https://arxiv.org/pdf/1910.13302.pdf

代码地址:GitHub - ZFTurbo/Weighted-Boxes-Fusion: Set of methods to ensemble boxes from different object detection models, including implementation of "Weighted boxes fusion (WBF)" method.

1. NMS(Non-Maximum Suppression

原理

(1)将所有获得的候选框按得分进行降序排列;

(2)选取得分最高的候选框作为基准,分别计算所有剩余候选框与该基准框的IoU(交并比),将IoU高于阈值的候选框进行剔除;

(3)在保留的非基准候选框中,重复第(2)步,直到所有的候选框都被当作基准框。最终剩下的候选框即为预测结果。

【缺点】

(1)需要手动设置阈值,且阈值会直接对结果产生影响;

(2)难以区分多个重叠度较高的目标。

当IoU阈值为0.5时,只有一个目标框会被保留,但实际存在多个目标

2. Soft-NMS

【原理】

NMS算法比较强硬,超过阈值就剔除,低于阈值直接保留。所以当阈值较高时,容易造成误检,抑制效果不明显;当阈值较低时,容易产生漏检。因此就出现了soft-nms。

soft-nms伪代码,相对NMS增加了得分惩罚

soft-nms通过IoU的值对候选框的得分进行惩罚衰减,不是直接去除候选框。衰减的策略有两种,一种是使用1-IoU与得分的乘积作为衰减后的值,第二种是高斯惩罚函数。

NMS的得分函数,IoU高于阈值直接将得分设置为0
soft-nms的第一种衰减策略,IoU大于阈值的目标得分会收到惩罚
soft-nms的高斯惩罚函数

【缺点】最终还是删除了部分预测框的结果,不能充分利用所有候选框的信息。

3. Weighted boxes fusion

【原理】假设有N个模型的输出结果:

(1)将所有模型的预测结果添加到列表B中,并对B按置信度得分C进行排序;

(2)声明一个空列表L和F。其中,L用来存放边界框簇,每个位置可以存在多个边界框;F用来存放融合后的边界框,每个位置只能有一个边界框。F中每个位置的边界框是L中对应位置边界框簇融合后的结果。

(3)循环执行:逐个遍历B中的预测结果,在列表F中找到与之相匹配的框(IoU大于指定阈值,这里设置的阈值是0.55)。

(4)如果F中没有与之匹配的框,则将B中的这个框添加到列表L和F中作为一个新的簇,然后处理B中的下一个框。

(5)如果F中的第pos个框与之匹配,那么将B中的这个框添加到列表L中的第pos个簇中。

(6)用列表L[pos]的所有T个边界框重新计算F[pos]的边界框坐标和置信度得分。置信度得分C是所有T个边界框置信度得分的均值,边界框坐标由原始坐标与置信度得分加权计算得到。

 【简单画了个示例】

匹配第一个元素a

 

匹配第二个元素b

 

匹配第三个元素c

 

匹配第四个元素d

 

匹配第五个元素e

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

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

相关文章

chatgpt赋能python:Python中如何转化大小写

Python中如何转化大小写 在Python编程中,转化字符串的大小写是一个常见的操作。Python提供了内置函数和字符串方法来实现此操作。本文将介绍如何使用Python中的这些函数和方法来转换字符串的大小写。 使用内置函数str.upper()和str.lower() str.upper()函数将字符…

共创开源生态 | 小米肖翔荣获“2023中国开源优秀人物”奖

6月15-16日,以“开源创新 数字化转型 智能化重构”为主题的“第十八届开源中国・开源世界高峰论坛”在北京成功召开。小米工程师肖翔凭借其在 Apache 基金会的开源贡献及在操作系统领域内的技术突破,荣获“2023中国开源优秀人物”奖。 Xiaomi …

一文读懂候选边界框Selective Search、AnchorBased、Anchor Free

目标检测是计算机视觉中的一项重要任务,主要目的是在图像或视频中识别并定位感兴趣的对象。为了实现这一目标,目标检测算法通常会生成一系列候选边界框,这些框包围了图像中可能存在的目标对象。候选边界框技术对于减少目标检测的计算复杂度和…

Vue中的数据可视化词云展示与词云生成

Vue中的数据可视化词云展示与词云生成 数据可视化是现代Web应用程序中的一个重要组成部分,它使得数据更加易于理解和分析。词云是一种非常流行的数据可视化形式,它可以用来展示文本数据中的主题和关键字。在本文中,我们将介绍如何在Vue中使用…

chatgpt赋能python:Python怎么转化数据类型?

Python怎么转化数据类型? Python是一种高级编程语言,它已经成为了许多程序员的首选语言。在Python中,数据类型是非常重要的一部分。但是,当我们需要将数据从一种类型转换为另一种类型时,该怎么做呢?在本文…

深度学习:探索人工智能的新前沿

第一章:引言 人工智能(Artificial Intelligence,AI)作为一项前沿技术,在近年来取得了巨大的进展。其中,深度学习(Deep Learning)作为人工智能领域的一个重要分支,更是引…

如何在VMware上安装CentOS7?

目录 一、器材准备 二、创建一个虚拟机 三、安装Centos7系统 一、器材准备 1. Centos7及以上版本的iso镜像 链接:centos7镜像 提取码:ao3n 2. VMware15及以上版本的软件工具包 链接:VMware16安装包以及激活码 提取码:40pe 二、创…

Framework - Zygote

一、概念 Zygote是 Android 中的第一个进程,负责孵化(fork)其它进程,而它自己由 Linux 内核启动的用户级进程 Init 创建。 二、作用 应用程序不能直接以本地进程的形态运行,必须在一个独立的虚拟机中运行,一…

Springboot实现数据传输加解密

前言 先给大家看下效果,原本我们的请求是这样子的 加密后的数据传输是这样子的 加解密步骤: 1.前端请求前进行加密,然后发送到后端 2.后端收到请求后解密 3.后端返回数据前进行加密 4.前端拿到加密串后,解密数据 加解密算法&…

搭建TiDB负载均衡环境-LVS+KeepAlived实践

作者: 我是咖啡哥 原文来源: https://tidb.net/blog/f614b200 昨天,发了一篇使用HAproxyKP搭建TiDB负载均衡环境的文章,今天我们再用LVSKP来做个实验。 环境信息 TiDB版本:V7.1.0 haproxy版本:2.6.2 …

【EXCEL】如何查找特殊字符 问号‘?’星号 ‘*’

目录 0.环境 1.适用场景 1)直接搜索问号的结果: 2)修改【查找内容】后,搜索结果变为精准定位: 2.具体做法 0.环境 windows wps(或excel,这里试了,此问题wps和excel表格是通用…

chatgpt赋能python:Python如何计算圆周率π

Python如何计算圆周率π 圆周率,又称π,是数学中一个重要的常数,它与圆的周长和直径的比值始终保持不变。在计算机编程中,计算圆周率π也是一个颇具挑战的问题。本文介绍了使用Python编程语言来计算圆周率π的方法,希…

C语言进阶---指针的进阶

前言 指针的主题,我们在初级阶段的《指针》章节已经接触过了。我们直到指针的概念。 ​ 1、指针就是个变量,用来存放地址,地址唯一标识一块内存空间。 ​ 2、指针的大小是固定的4/8个字节(32为平台/64位平台) ​ 3、指…

chatgpt赋能python:Python如何输出Unicode:一位10年编程经验的工程师的经验分享

Python如何输出Unicode:一位10年编程经验的工程师的经验分享 Python是一种常见的编程语言,被广泛应用于各种文本处理任务。其中一个有趣的方面是Python与Unicode的集成。在这篇博客文章中,我将分享我的经验,介绍如何在Python中输…

查看当前编译器(或交叉编译器)支持的C/C++标准

如果已经配置到系统环境中则直接使用&#xff1b; 如果没有配置到系统环境中&#xff0c;找到当前使用的交叉编译器的路径&#xff1b; gcc -E -dM - </dev/null | grep "STDC_VERSION" 或者编写一段小代码&#xff1a; printf("%ld\n",__STDC_VERS…

【栈与队列part02】| 20.有效的括号、1047.删除字符串中所有相邻重复项、150.逆波兰表达式求值

目录 ✿LeetCode20. 有效的括号❀ ✿LeetCode1047.删除字符串中的所有相邻重复项❀ ✿LeetCode150. 逆波兰表达式求值❀ ✿LeetCode20. 有效的括号❀ 链接&#xff1a;20.有效的括号 给定一个只包括 (&#xff0c;)&#xff0c;{&#xff0c;}&#xff0c;[&#xff0c;]…

rust 使用第三方库构建mini命令行工具

这是上一篇 rust 学习 - 构建 mini 命令行工具的续作&#xff0c;扩展增加一些 crate 库。这些基础库在以后的编程工作中会常用到&#xff0c;他们作为基架存在于项目中&#xff0c;解决项目中的某个问题。 项目示例还是以上一篇的工程为基础做调整修改ifun-grep 仓库地址 怎…

Linux MTD子系统(二)——mtdblock驱动分析

在之前的文章Linux MTD子系统(一)中有提到过mtd块设备&#xff0c;mtd块设备是在MTD设备之上模拟的块设备。 它的作用实际上只有一个——便于我们使用mount(umount)挂载(卸载)MTD设备中的文件系统&#xff0c;例如yaffs2&#xff0c;JFFS2等等。 本文将介绍mtdblock是如何实现…

LIN总线协议-调度表

文章目录 一、调度表只有一个调度表时&#xff0c;采用循环执行三个调度表存在时&#xff0c;顺序执行调度表发生中断 二、总结 一、调度表 调度表规定了总线上帧的传输次序&#xff08;调度Header&#xff09;以及各帧在总线上的传输时间。 调度表位于主机节点&#xff0c;主…

算法刷题-字符串-左旋转字符串

反转个字符串还有这么多用处&#xff1f; 题目&#xff1a;剑指Offer58-II.左旋转字符串 力扣题目链接 字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如&#xff0c;输入字符串"abcdefg"和数字2…