nms算法就是对同一个anhor 的box 进行基于阈值的去重

1、目的

对于尺寸为416×416的输入图像,YOLO预测((52×52)+(26×26)+ 13×13))×3 = 10647个边界框。 但是,在我的图像中只有三个物体(本人,水杯,手机)。 我们如何将检测结果从10647减少到3呢?

2、基于对象置信度的阈值。

首先,我们根据对象分数(objectness score)过滤框。 通常,具有低于阈值分数的框被忽略。

3、非最大抑制(NMS)

NMS打算解决同一图像的多重检测问题。通过抑制不是极大值的元素,可以理解为局部最大搜索。这个局部代表的是一个邻域,邻域有两个参数可变,一是邻域的维数,二是邻域的大小。这里讨论用于目标检测中提取分数最高的窗口的。例如在行人检测中,滑动窗口经提取特征,经分类器分类识别后,每个窗口都会得到一个分数。但是滑动窗口会导致很多窗口与其他窗口存在包含或者大部分交叉的情况。这时就需要用到NMS来选取那些邻域里分数最高(是行人的概率最大),并且抑制那些分数低的窗口。
3.1、算法过程
# python3
import numpy as npdef py_nms(dets, thresh):"""Pure Python NMS baseline."""#x1、y1、x2、y2、以及score赋值x1 = dets[:, 0]y1 = dets[:, 1]x2 = dets[:, 2]y2 = dets[:, 3]scores = dets[:, 4]#每一个候选框的面积areas = (x2 - x1 + 1) * (y2 - y1 + 1)### argsort()函数是将x中的元素从小到大排列,提取其对应的index(索引)or1=scores.argsort()  #array([3, 2, 1, 0])#降序排序的order = or1[::-1]keep = []while order.size > 0:#先取order最大的那个索引 ii = order[0]#保留score最大的那个boxkeep.append(i)#计算当前概率最大矩形框与其他矩形框的相交框的坐标,会用到numpy的broadcast机制,得到的是向量xx1 = np.maximum(x1[i], x1[order[1:]])yy1 = np.maximum(y1[i], y1[order[1:]])xx2 = np.minimum(x2[i], x2[order[1:]])yy2 = np.minimum(y2[i], y2[order[1:]])#计算相交框的面积,注意矩形框不相交时w或h算出来会是负数,用0代替#分别计算其他box 与 i box 的交集w = np.maximum(0.0, xx2 - xx1 + 1)h = np.maximum(0.0, yy2 - yy1 + 1)inter = w * h#计算重叠度IOU:重叠面积/(面积1+面积2-重叠面积)#其他box 与i box 的iouovr = inter / (areas[i] + areas[order[1:]] - inter)#找到重叠度不高于阈值的矩形框索引inds = np.where(ovr <= thresh)[0]#因为ovr 是三维,已经去掉了score最大的那一个#将order序列更新,由于前面得到的矩形框索引要比矩形框在原order序列中的索引小1,所以要把这个1加回来order = order[inds + 1]return keep# test
if __name__ == "__main__":dets = np.array([[30, 20, 230, 200, 1], [50, 50, 260, 220, 0.9],[210, 30, 420, 5, 0.8],[430, 280, 460, 360, 0.7]])thresh = 0.35keep_dets = py_nms(dets, thresh)print(keep_dets)print(dets[keep_dets])
tensorflow 有内置的nms算法api
tf.image.non_max_suppression_with_scores(boxes, scores, max_output_size, iou_threshold=0.5,score_threshold=float('-inf'), soft_nms_sigma=0.0, name=None
)

参考链接一

参考链接二

参考链接三

参考链接四

目标检测 nms非极大抑制算法相关推荐

  1. 睿智的目标检测31——非极大抑制NMS与Soft-NMS

    睿智的目标检测31--非极大抑制NMS与Soft-NMS 注意事项 学习前言 什么是非极大抑制NMS 1.非极大抑制NMS的实现过程 2.柔性非极大抑制Soft-NMS的实现过程 注意事项 Soft- ...

  2. 目标检测之—非极大抑制(NMS)综述

    非极大值抑制(Non-Maximum Suppression,NMS),顾名思义就是抑制不是极大值的元素.它在目标检测中起着非常关键的作用. 目标检测一般分为两个过程:训练过程+检测(推理)过程. 在 ...

  3. 目标检测之非极大值抑制

    基本思路:从待检测目标中先按照分类置信度,找一个最可信的框.然后判断其他框和它的交并比(IoU),如果大于阈值TH,说明相似,抑制掉就好了. 算法:1.按照置信度排序 2.判断其他框和得分最高的框的I ...

  4. 非极大值抑制_【计算机视觉——RCNN目标检测系列】三、IoU与非极大抑制

    写在前面 在上一篇博客:[计算机视觉-RCNN目标检测系列]二.边界框回归(Bounding-Box Regression)( 戴璞微:[计算机视觉-RCNN目标检测系列]二.边界框回归(Boundi ...

  5. 【R-CNN目标检测系列】三、IoU与非极大抑制

    写在前面 在上一篇博客:[计算机视觉--RCNN目标检测系列]二.边界框回归(Bounding-Box Regression)中我们主要讲解了R-CNN中边界框回归,接下来我们在这篇博客我们讲解R-C ...

  6. Canny边缘检测方法中的非极大抑制

    什么是非极大抑制 在目标检测中,通常会使用各种各样的方法来让计算机找到目标的所在位置,然而,计算机的输出往往并不是单一的,也就是说,一个目标可能会输出多个结果(如下图所示),这些结果有好有坏,因此就需 ...

  7. Opencv学习笔记(二十六)文本检测mser+非极大值抑制nms

    文章目录 mser检测 nms非极大值抑制 代码 mser检测 nms非极大值抑制 代码 import cv2 import matplotlib.pyplot as plt import numpy ...

  8. 目标检测中NMS(非极大抑制)的概念理解

    参考博客 物体检测中常用的几个概念迁移学习.IOU.NMS理解 目标定位和检测系列(3):交并比(IOU)和非极大值抑制(NMS)的python实现 一.NMS(非极大抑制)概念 NMS即non ma ...

  9. 目标窗口检测算法-NMS非极大值抑制

    1. NMS(non maximum suppression)的定义和算法步骤 NMS(non maximum suppression),中文名非极大值抑制,在很多计算机视觉任务中都有广泛应用,如:边 ...

最新文章

  1. 视频采集-非DICOM影像设备转DICOM标准的解决方案
  2. solaris迅速查找手册
  3. 问题 | FileNotFoundError: [Errno 2] No such file or directory: 'null'
  4. PingingLab传世经典系列《CCNA完全配置宝典》-5.8 静态NAT
  5. 数据类型(整型、浮点数、字符串、时间和日期)、切分(水平、垂直)
  6. python spark进行大数据分析_第2天Python实战Spark大数据分析及调度-RDD编程
  7. 计算宝宝帐户收益(多重继承)_【067】遗漏因子、缺失数据与多重检验
  8. 设置电脑系统密码以及桌面密码
  9. vue路由加载页面时,数据返回慢的问题
  10. python找到最大最小值、最大最小值的位置、删除最大值最小值
  11. python中文版下载32位-Python 2 32位
  12. 先验 超验_三个世界的划分:经验、超验、先验
  13. FoxBarcode(一维码生成库)使用教程
  14. java里arcsin_java编程用泰勒级数计算arcsin
  15. 实时可视化大数据项目01 -- 项目介绍
  16. 媒体对华为不公,国人应该清醒 [转]枯荷雨声
  17. Android音视频【三】硬解码播放H264
  18. MATLAB中表示点形状、颜色的常见符号
  19. js:如何删除dom元素
  20. 115-545-003丨Alexa Fluor 488标记亲和纯化山羊抗小鼠IgG(H+L)二抗

热门文章

  1. 二、linux最小驱动
  2. 拯救react的hooks:react的问题和hooks的作用
  3. PHP代码静态分析工具PHPStan
  4. Hibernate之一级缓存和二级缓存
  5. 前端模版引擎选择指南
  6. 天使投资乱象频出 熟人元素何时剔除
  7. Mylyn 2.0,第 2 部分: 自动上下文管理
  8. ipsec_over_gre
  9. 一次检验自己技术和耐力的碎片提取经历
  10. SecureCRT 日志添加时间戳(精确到毫秒)