当前位置: 首页 > 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.lryc.cn/news/619035.html

相关文章:

  • git+lfs 如何安装
  • 股票智能体系统的设计与开发
  • Vue3 组合式API vs 选项式API:深度对比与最佳实践
  • SQL连接操作全解析:从入门到精通
  • 自动驾驶决策算法 —— 有限状态机 FSM
  • 基于SpringBoot的旅游网站系统
  • Jenkins + SonarQube 从原理到实战三:SonarQube 打通 Windows AD(LDAP)认证与踩坑记录
  • Linux内核进程管理子系统有什么第二十六回 —— 进程主结构详解(22)
  • 基于51单片机RFID智能门禁系统红外人流量计数统计
  • 【K8s】K8s控制器——Deamonset、Statefulset、Job与CronJob
  • 下一代防火墙部署
  • 树结构无感更新及地图大批量点位上图Ui卡顿优化
  • C#对接Ollama,调用大模型禁用思考模式
  • JMeter并发测试与多进程测试
  • pcl 按比例去除点云的噪点
  • 编程模型设计空间的决策思路
  • QT第四讲-QString和QT数据类型之间转换
  • 当多模态大语言模型遇上视觉难题!AI视觉探索之旅
  • NLP基础
  • CASS11计算斜面面积
  • sqli-libs通关教程(41-50)
  • 【leetcode】45. 跳跃游戏2
  • cuda排序算法--双调排序(Bitonic_Sort)
  • __base__属性
  • 【动态规划】leecode 198的打家劫舍2:dp集合有两种写法对比
  • 关系型数据库中,如果某一列的选项只有几种(比如性别、状态等低基数枚举值),添加索引的效果如何?
  • day26-IO(2)
  • 学习笔记《区块链技术与应用》ETH 第二天 状态树
  • 数据分析—双十一
  • B.10.02.3-分布式一致性:电商业务场景下的理论与工程实践