当前位置: 首页 > news >正文

【CV 目标检测】②——NMS(非极大值抑制)

4.NMS(非极大值抑制)

(1)NMS概念

非极大值抑制(Non-Maximum Suppression,NMS),就是抑制不是极大值的元素。例如在行人检测中,滑动窗口经提取特征,经分类器识别后,每个窗口都会得到一个分数。但是滑动窗口会导致很多窗口与其他窗口包含或者大部分交叉的情况。这时就需要用到NMS来选取那些邻域里分数最高(是行人的概率最大),并且抑制那些分数低的窗口。NMS在计算机视觉领域有着非常重要的应用,如视频目标跟踪,数据挖掘,3D建模,目标识别以及纹理分析等。

(2)NMS目的

在目标检测中,NMS的目的就是要去除冗余的检测框,保留最好的一个

(3)NMS原理

NMS原理是对于预测框的列表B及其对应的置信度S,选择具有最大score(置信度最大)的检测框M,将其从B集合中移除并加入到最终的检测结果D中,计算B中剩余检测框与M的IOU值,通常将IOU大于阈值Nt的框从B中移除(这里的框是被抑制掉,被认为是冗余框,不会加入到D集合中)。重复这个过程,直到B为空。

理解(NMS使用方法):

(4)NMS检测流程

  1. 首先是检测出一系列的检测框
  2. 将检测框按照类别进行分类
  3. 对同一类别的检测框应用NMS获取最终检测结果

(5)单类别的NMS实现方法

def nms(boxes, score, thre):# 容错处理if len(boxes) == 0:return [], []# 类型转换:boxes默认使用极坐标表示boxes = np.array(boxes)score = np.score(boxes)# 获取左上角和右下角坐标x1 = boxes[:, 0]y1 = boxes[:, 1]x2 = boxes[:, 2]y2 = boxes[:, 3]# 面积areas = (x2 - x1)*(y2 - y1)# NMSpick_boxes = []pick_score = []# 排序:小-->大order = np.argsort(score)while order.size > 0:# 获取score最大索引index = order[-1]# 保留下来pick_boxes.append(boxes[index])pick_score.append(score[index])# 计算IOU# 保留下来的框与其他所有框交集的坐标x11 = np.maximum(x1[index], x1[order[:-1]])y11 = np.maximum(y1[index], y1[order[:-1]])x22 = np.minimum(x2[index], x2[order[:-1]])y22 = np.minimum(y2[index], y2[order[:-1]])# 宽,高,交集面积w = np.maximum(0.0, x22 - x11)h = np.maximum(0.0, y22 - y11)inter_area = w*h# 交并比iou = inter_area/(areas[index] + areas[order[:-1]] - inter_area)# 删除冗余框keep_boxes = np.where(iou < thre)# 更新orderorder = order[keep_boxes]return pick_boxes, pick_score
bounding = [(187, 82, 337, 317) ,(150, 67, 305, 282),(246, 121, 368, 304)]
confidence_score = [0.9, 0.65, 0.8]
threshold = 0.5box, score = nms(bounding, confidence_score, threshold)
http://www.dtcms.com/a/327523.html

相关文章:

  • springboot+JPA
  • 卓伊凡谈AI编程:历史、现状与未来展望-以前面向搜索引擎现在面向AI机器人-优雅草卓伊凡
  • 解释 Spring MVC 的工作原理
  • web应用服务器——Tomcat
  • C语言中关于普通变量和指针变量、结构体包含子结构体或包含结构体指针的一些思考
  • 车载5G加速,扩产+毛利率保卫战
  • 随身WIFI每个月需要交钱吗?流量卡还是随身WIFI哪个更好用?正规随身WIFI品牌有哪些?谁才是真性价比之王?
  • Linux下命名管道和共享内存
  • 云原生作业(nginx)
  • 云原生环境Prometheus企业级监控实战
  • 将黑客拒之物联网网络之外的竞赛
  • 2.Ansible基本使用
  • 9. React组件生命周期
  • 使用镜像网站 打开克隆 GitHub 网站仓库内容 git clone https://github.com/
  • 跟李沐动手学深度学习---学习笔记之基础篇
  • ForceVLA——将具备力感知的MoE整合进π0的动作专家中:从而融合视觉、语言、力反馈三者实现精密插拔
  • 【USRP】基于LabVIEW的BPSK、QPSK,文本,图片
  • n8n、Workflow实战
  • Redis序列化配置类
  • 【从零开始java学习|第四篇】IntelliJ IDEA 入门指南
  • 采暖管道安装、分类、计量-文字查找快速定位、批量测量一键计算
  • OBOO鸥柏丨智能会议平板教学查询一体机交互式触摸终端招标投标核心标底参数要求
  • 115-基于Flask的医疗保健数据预测分析系统
  • 2025年渗透测试面试题总结-15(题目+回答)
  • 【前端Vue】如何优雅地展示带行号的日志文件或文本内容(log-viewer组件的使用)
  • Java数据结构之ArrayList
  • 《算法导论》第 20 章 - van Emde Boas 树
  • 《前端性能监控深解:从指标捕获到数据洞察的完整脉络》
  • Windows已经安装了一个MySQL8,通过修改配置文件的端口号跑2个或多个Mysql服务方法,并注册为系统服务
  • linux远程部署dify和mac本地部署dify