AI视频管理平台中使用目标检测模型中的NMS参数原理及设置原则
目标检测模型中的NMS参数原理及设置原则
在目标检测模型中,非极大值抑制(Non-Maximum Suppression,简称NMS)是一种常用的后处理技术,用于筛选和保留最佳的检测框。本文将详细介绍NMS的原理、参数设置原则以及实际应用中的一些优化策略。
NMS原理
NMS的核心思想是保留每个目标的最高置信度的边界框,同时去除其他与之高度重叠的边界框。这里的重叠通常用交并比(Intersection over Union,简称IoU)来量化。NMS的具体步骤如下:
-
排序:首先,根据每个边界框的置信度(通常是分类概率与定位准确度的综合指标)进行降序排列。置信度最高的边界框被认为是最有可能正确检测到目标的。
-
选择:从排序后的列表中选择置信度最高的边界框,标记为已选,并将其添加到最终的检测结果列表中。
-
计算IoU:对于剩余的每个边界框,计算它与已选边界框的IoU。
-
比较与剔除:如果某个边界框与已选框的IoU超过了预设的阈值(例如0.5或0.7),则认为这两个框表示的是同一个目标,于是根据置信度较低的原则,剔除这个低置信度的边界框。
-
重复步骤2-4:继续选择剩余边界框中置信度最高的,重复计算IoU和剔除过程,直到所有边界框都被检查过。
-
结束:最终,剩下的边界框集合即为经过NMS处理后的检测结果,每个目标对应一个最优的边界框。
代码示例:
import numpy as npdef intersection_over_union(boxA, boxB):# 计算两个边界框的交集的坐标xA = max(boxA[0], boxB[0])yA = max(boxA[1], boxB[1])xB = min(boxA[2], boxB[2])yB = min(boxA[3], boxB[3])# 计算交集的面积interArea = max(0, xB - xA) * max(0, yB - yA)# 计算两个边界框的面积boxAArea = (boxA[2] - boxA[0]) * (boxA[3] - boxA[1])boxBArea = (boxB[2] - boxB[0]) * (boxB[3] - boxB[1])# 计算交并比IoUiou = interArea / float(boxAArea + boxBArea - interArea)return ioudef non_max_suppression(boxes, scores, iou_threshold):# 初始化一个空列表来保存最终的边界框final_boxes = []# 将边界框和分数组合在一起boxes_with_scores = [(box, score) for box, score in zip(boxes, scores)]# 根据分数进行降序排序boxes_with_scores.sort(key=lambda x: x[1], reverse=True)# 遍历排序后的边界框while boxes_with_scores:# 选择分数最高的边界框current_box, current_score = boxes_with_scores.pop(0)# 将当前边界框添加到最终结果中final_boxes.append(current_box)# 过滤掉与当前边界框IoU超过阈值的其他边界框boxes_with_scores = [(box, score) for box, score in boxes_with_scores if intersection_over_union(current_box, box) <= iou_threshold]return final_boxes# 示例边界框和分数
boxes = np.array([[1, 1, 5, 5],[2, 2, 6, 6],[10, 10, 15, 15],[15, 15, 20, 20]
])scores = np.array([0.9, 0.8, 0.7, 0.6])# 应用NMS,设置IoU阈值为0.2
iou_threshold = 0.2
final_boxes = non_max_suppression(boxes, scores, iou_threshold)print("最终保留的边界框:")
for box in final_boxes:print(box)#[1 1 5 5]
#[10 10 15 15]
#[15 15 20 20]
NMS参数设置原则
NMS中最关键的参数是IoU阈值,它是决定边界框是否重叠过多的关键参数。常见的取值范围在0.3到0.7之间,具体值需根据应用场景调整。以下是一些设置原则:
-
应用场景:不同的应用场景对检测的准确性和召回率有不同的要求。例如,在安防监控中,可能更倾向于高召回率,因此可能会选择较低的IoU阈值。
-
目标密度:在目标密集的场景中,可能需要较高的IoU阈值来避免误删有效的检测结果。而在目标稀疏的场景中,可以选择较低的IoU阈值以去除更多的冗余框。
-
目标大小:对于不同大小的目标,可能需要不同的IoU阈值。一般来说,对于较大的目标,可以选择较高的IoU阈值,因为大目标的检测框更可能完全覆盖目标。
-
实验调优:在实际应用中,可以通过实验来调整IoU阈值,以达到最佳的检测性能。可以通过绘制PR曲线(Precision-Recall Curve),选择一个合适的IoU阈值,使得在保证高准确率的同时,召回率也尽可能高。
相关文章:
AI视频管理平台中使用目标检测模型中的NMS参数原理及设置原则
目标检测模型中的NMS参数原理及设置原则 在目标检测模型中,非极大值抑制(Non-Maximum Suppression,简称NMS)是一种常用的后处理技术,用于筛选和保留最佳的检测框。本文将详细介绍NMS的原理、参数设置原则以及实际应用…...
从零开始点亮一个LED灯 —— keil下载、新建工程、版本烧录、面包板使用、实例代码
一、keil下载 参考视频:Keil5安装教程视频 (全套资料51和32皆可用Keil5编译设置)_哔哩哔哩_bilibili 视频内容包括下载链接、安装教程、库导入,非常详细! 二、新建工程 2.1.使用stm32CubeMX新建工程 10. 使用STM32CubeMX新建工程 — [野…...
[pdf,epub]105页《分析模式》漫谈合集01
105页的《分析模式》漫谈合集第1集的pdf、epub文件,已上传到本账号的CSDN资源。 如果无法下载,也可以访问umlchina.com/url/ap.html 已排版成适合手机阅读,pdf的排版更好一些。 ★UMLChina为什么叒要翻译《分析模式》? ★[缝合故…...
计算机网络5层模型
应用层常见协议 DNS协议 作用:用于实现网络设备名字到IP地址映射的网络服务 特点:DNS是因特网使用的命名系统,它将人们易于记忆的主机名(如www.example.com)转换为机器可识别的IP地址。 FTP协议 作用:用于实现交互式文件传输功能。 特点:FTP支持Standard(主动…...
Python毕业设计选题:基于Python的无人超市管理系统-flask+vue
开发语言:Python框架:flaskPython版本:python3.7.7数据库:mysql 5.7数据库工具:Navicat11开发软件:PyCharm 系统展示 系统首页 超市商品详情 购物车 我的订单 管理员登录界面 管理员功能界面 用户界面 员…...
WindowsDocker安装到D盘,C盘太占用空间了。
Windows安装 Docker Desktop的时候,默认位置是安装在C盘,使用Docker下载的镜像文件也是保存在C盘,如果对Docker使用评率比较高的小伙伴,可能C盘空间,会被耗尽,有没有一种办法可以将Docker安装到其它磁盘,同时Docker的数据文件也保存在其他磁盘呢? 答案是有的,我们可以…...
Java面试经典 150 题.P80. 删除有序数组中的重复项 II(004)
本题来自:力扣-面试经典 150 题 面试经典 150 题 - 学习计划 - 力扣(LeetCode)全球极客挚爱的技术成长平台https://leetcode.cn/studyplan/top-interview-150/ 题解: class Solution {public int removeDuplicates(int[] nums)…...
【Three.js】SpriteMaterial 加载图片泛白,和原图片不一致
解决方法 如上图所示,整体泛白了,解决方法如下,添加 material.map.colorSpace srgb const imgTexture new THREE.TextureLoader().load(imgSrc)const material new THREE.SpriteMaterial({ map: imgTexture, transparent: true, opacity:…...
了解神经网络中的激活函数
一、激活函数的特征 非线性,激活函数必须是非线性函数。可微性,训练网络模型时,基于梯度的模型最优化方法要求激活函数必须是可导的。单调性,单调递增或单调递减,单调函数保证模型的简单。隐藏层一般需要使用激活函数…...
配置BGP与IGP交互和路由自动聚合示例
组网需求 如图所示,用户将网络划分为AS65008和AS65009,在AS65009内,使用IGP协议来计算路由(该例使用OSPF做为IGP协议)。要求实现两个AS之间的互相通信。 配置思路 采用如下的思路配置BGP与IGP交互: 在AR…...
代码随想录算法训练营第三十三天 | 62.不同路径 63.不同路径
LeetCode 62.不同路径: 文章链接 题目链接:62.不同路径 思路: 动态规划 使用二维数组保存递推结果 ① dp数组及下标含义 dp[i][j]:表明从(0, 0)到下标为(i, j)的点有多少条不同的路径 ② 递推式: 机器人只能向下或向…...
使用Flask构建RESTful API
💓 博客主页:瑕疵的CSDN主页 📝 Gitee主页:瑕疵的gitee主页 ⏩ 文章专栏:《热点资讯》 使用Flask构建RESTful API Flask简介 环境搭建 安装Flask 项目结构 创建应用 路由定义 请求处理 获取查询参数 获取请求体 响应…...
基于springboot的Java学习论坛平台
基于springboot的Java学习论坛平台 摘 要 在Internet高速发展的今天,我们生活的各个领域都涉及到计算机的应用,其中包括学习平台的网络应用,在外国学习平台已经是很普遍的方式,不过国内的管理平台可能还处于起步阶段。学习平台具…...
Python离线环境搭建
引言 在软件开发过程中,我们常常会遇到内网环境无法直接访问外网的情况,这就需要我们通过一些特殊手段来搭建Python开发环境。本文将详细介绍如何利用U盘在内网机与外网机之间迁移Python环境及其依赖包。 工具准备 1台内网机1台外网机1个U盘 操作步骤…...
windows下kafka使用出现的问题
kafka启动 启动kafka需要先启动zookeeper,在kafka根目录下先启动zookeeper .\bin\windows\zookeeper-server-start.bat .\config\zookeeper.properties启动kafka 另开一个cmd命令行 .\bin\windows\kafka-server-start.bat .\config\server.propertieskafka与jdk版…...
ctfshow文件包含web78~81
目录 web78 方法一:filter伪协议 方法二:input协议 方法三:data协议 web79 方法一:input协议 方法二:data协议 web80 方法一:input协议 方法二:日志包含getshell web81 web78 if(isset($_GET[file]…...
鸿蒙生态认识
好的,让我们更深入地探讨鸿蒙生态的发展机遇、面临的挑战,以及未来的潜力。 对鸿蒙生态的认知与分析 鸿蒙系统作为一种新兴的操作系统,旨在打破设备之间的壁垒,打造一个更加连通的生态环境。以下是对其崛起的进一步分析…...
Hadoop-004-Big Data Tools插件的使用
一、Big Data Tools插件配置流程 1、安装Big Data Tools插件 以IntelliJ IDEA 2024.2.3为例打开setting, 搜索安装Big Data Tools插件后重启IDEA 2、Windows系统基础配置 Windows系统需要做一些基础设置,配合插件使用,将之前下载的hadoop-3.2.4.tar.gz 解压到D…...
linux8在线扩容/home目录
虚机新增1T磁盘 [rootrsb ~]# cat /etc/redhat-release Red Hat Enterprise Linux release 8.8 (Ootpa) [rootrsb ~]# vgs VG #PV #LV #SN Attr VSize VFree ol 2 3 0 wz--n- <2.00t 0 [rootrsb ~]# lvs LV VG Attr LSize Pool Origin Dat…...
【C/C++】模拟实现strcpy
学习目标: 使用代码模拟实现strcpy。 逻辑: strcpy 函数的返回类型是 void 即不返回数据。strcpy 函数的参数类型是 char* ,用于接收数组。strcpy 函数要把一个数组复制到另一个数组。 代码: #define _CRT_SECURE_NO_WARNINGS …...
2026 年电子邮件认证部署缺陷与安全风险治理研究
摘要 电子邮件作为网络攻击最主要入口,域名伪造与商业邮件欺诈(BEC)持续威胁机构安全。SPF、DKIM、DMARC 作为抵御邮件伪造的核心协议已提出十余年,但大量组织仍存在认知不足、配置错误、长期停留在监控模式等问题,导致…...
Z-Image-Turbo-辉夜巫女GPU利用率:监控xinference.log与nvidia-smi协同调参指南
Z-Image-Turbo-辉夜巫女GPU利用率:监控xinference.log与nvidia-smi协同调参指南 1. 引言:为什么需要关注GPU利用率? 当你部署好一个像Z-Image-Turbo-辉夜巫女这样的文生图模型,看着它生成精美的图片时,有没有想过一个…...
Qwen3.5-4B-Claude-Opus一文详解:GGUF量化模型在低延迟推理场景下的优势
Qwen3.5-4B-Claude-Opus一文详解:GGUF量化模型在低延迟推理场景下的优势 1. 模型概述 Qwen3.5-4B-Claude-4.6-Opus-Reasoning-Distilled-GGUF是基于Qwen3.5-4B架构的推理蒸馏模型,特别强化了结构化分析、分步骤回答以及代码与逻辑类问题的处理能力。该…...
Istio Gateway+VirtualService配置不生效?Java服务流量劫持失败的6大隐性原因深度诊断
第一章:Istio GatewayVirtualService配置不生效?Java服务流量劫持失败的6大隐性原因深度诊断Istio 的 Gateway 与 VirtualService 是实现南北向流量治理的核心资源,但 Java 应用在启用 Istio Sidecar 注入后,常出现请求未被 Envoy…...
SEO和PPC广告之间的关系是什么_如何通过定期分析优化网站的SEO表现
SEO和PPC广告之间的关系是什么_如何通过定期分析优化网站的SEO表现 在当今的数字营销环境中,网站的SEO(搜索引擎优化)和PPC(负责付费广告)广告是两种重要的推广工具。了解它们之间的关系,并通过定期分析优…...
Pixel Couplet Gen应用场景:微信小程序‘灵蛇贺岁’互动模块开发全解析
Pixel Couplet Gen应用场景:微信小程序灵蛇贺岁互动模块开发全解析 1. 项目背景与核心价值 在传统节日数字化呈现的浪潮下,我们开发了"灵蛇贺岁"微信小程序互动模块。这款基于ModelScope大模型的春联生成器,通过创新的像素游戏风…...
实战演练:基于快马平台与AI模型打造一个智能电商导购Agent
最近在尝试将AI技术落地到实际业务场景中,发现电商导购是个非常实用的切入点。今天就来分享下如何用InsCode(快马)平台快速搭建一个智能电商导购Agent的全过程。 项目架构设计 这个导购Agent采用前后端分离架构,主要分为三个模块: 前端交互…...
Kotlin 2.4.0 正式发布,快来看看有哪些更新
昨日,JetBrains 发布了 Kotlin 2.4.0-Beta1。 如果你管的是 Android 工具链、Kotlin 多平台,或者团队里已经开始碰 context receivers、注解处理、.klib 兼容问题,这个版本已经值得单独开分支验证。 先说结论 这次最有分量的变化࿰…...
LeetCode 热题100——3.无重复字符的最长子串
题目: 给定一个字符串 s ,请你找出其中不含有重复字符的 最长 子串 的长度。 示例 1: 输入: s "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。注意 "bca" 和 "cab&qu…...
青铜器RDM研发管理平台
我们深耕研发管理服务20余年,依托 10 余年研发管理实战经验,累计为超 10000 家企业提供专业培训、为200 余家企业深度咨询,打造完全自主知识产权的研发管理数字化平台 —— 青铜器 RDM。以 IPD、CMMI、Scrum、PMBOK 等业界最佳实践为内核&…...
