date: 2017-07-21 16:48:02

非极大值抑制算法(Non-maximum suppression, NMS)

算法原理

非极大值抑制算法的本质是搜索局部极大值,抑制非极大值元素。

算法用途

如在物体检测中可以通过应用NMS算法来消除多余的交叉重复的窗口,使在同一物体的多个检测窗口中保留下得分最高的窗口。


NMS算法亦可用于视频跟踪/数据挖掘/3D重建以及文理分析等。

算法实现思路

首先迭代所有的点,迭代每一个点的时候判断该点是否符合局部最大值的条件。

NMS算法在三邻域情况下的实现

三邻域情况下的NMS即判断一维数组array中的元素array[i]是否大于其左邻元素array[i-1]和右邻元素array[i+1],具体实现如下图(Python表示):

import numpy as np

array = [0] + np.random.randint(100, size=10).tolist() + [0]
keep = []
i = 1 while i <= 10:
if array[i] > array[i+1]:
if array[i] > array[i-1]:
keep.append(array[i])
else:
i += 1
while i <= 10 and array[i] <= array[i+1]:
i += 1
if i <= 10:
keep.append(array[i])
i += 2

NMS算法应用于人脸检测窗口选择的实现(Python实现)

import numpy as np

def nms(rects, threshold):
x1, y1, x2, y2, scores = rects[:, 0], rects[:, 1], rects[:, 2], rects[:, 3], rects[:, 4] areas = (x2 - x1 + 1) * (y2 - y1 + 1)
order = scores.argsort()[::-1]
keep = []
while order.size > 0:
i = order[0]
keep.append(i)
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:]]) inter = np.maximun(0.0, xx2 - xx1 + 1) * np.maximum(0.0, yy2 - yy1 + 1)
iou = inter / (areas[i] + areas[order[1:]] - inter)
indexs = np.where(iou <= threshold)[0]
order = order[indexs + 1] return keep

非极大值抑制算法(Python实现)的更多相关文章

  1. 目标检测后处理之NMS(非极大值抑制算法)

    1.定义: 非极大值抑制算法NMS广泛应用于目标检测算法,其目的是为了消除多余的候选框,找到最佳的物体检测位置. 2.原理: 使用深度学习模型检测出的目标都有多个框,如下图,针对每一个被检测目标,为了 ...

  2. Non-maximum suppression(非极大值抑制算法)

    在RCNN系列目标检测中,有一个重要的算法,用于消除一些冗余的bounding box,这就是non-maximum suppression算法. 这里有一篇博客写的挺好的: http://www.c ...

  3. NMS(非极大值抑制算法)

    目的:为了消除多余的框,找到最佳的物体检测的位置 思想: 选取那些领域里分数最高的窗口,同时抑制那些分数低的窗口 Soft-NMS

  4. [DeeplearningAI笔记]卷积神经网络3.6-3.9交并比/非极大值抑制/Anchor boxes/YOLO算法

    4.3目标检测 觉得有用的话,欢迎一起讨论相互学习~Follow Me 3.6交并比intersection over union 交并比函数(loU)可以用来评价对象检测算法,可以被用来进一步改善对 ...

  5. 第二十七节,IOU和非极大值抑制

    你如何判断对象检测算法运作良好呢?在这一节中,你将了解到并交比函数,可以用来评价对象检测算法. 一 并交比(Intersection over union ) 在对象检测任务中,你希望能够同时定位对象 ...

  6. 【56】目标检测之NMS非极大值抑制

    非极大值抑制(Non-max suppression) 到目前为止你们学到的对象检测中的一个问题是,你的算法可能对同一个对象做出多次检测,所以算法不是对某个对象检测出一次,而是检测出多次.非极大值抑制 ...

  7. 『Python』图像金字塔、滑动窗口和非极大值抑制实现

    图像金字塔 1.在从cv2.resize中,传入参数时先列后行的 2.使用了python中的生成器,调用时使用for i in pyramid即可 3.scaleFactor是缩放因子,需要保证缩放后 ...

  8. MATLAB的边缘检测函数中隐含的细化(非极大值抑制)算法

    前段时间做了一个车牌检测识别的项目,我的任务是将MATLAB中的算法移植成C++代码.在车牌区域提取的过程中,用到了水平方向的Sobel算子检测垂直边缘,一开始我直接把MATLAB中的 bw = ed ...

  9. 非极大值抑制(Non-Maximum Suppression,NMS)

    概述 非极大值抑制(Non-Maximum Suppression,NMS),顾名思义就是抑制不是极大值的元素,可以理解为局部最大搜索.这个局部代表的是一个邻域,邻域有两个参数可变,一是邻域的维数,二 ...

随机推荐

  1. nuxt 项目安装及环境配置

    babel篇 在package.json中添加--exec babel-node 如果需要编译es6,我们需要设置presets包含es2015,也就是预先加载es6编译的模块. 如果需要编译es7, ...

  2. Redis之持久化方式详解

    背景:Redis之所以能够在技术革新发展迅速的时代超越Memcache等其他Nosql数据库,最主要的一点是Redis提供数据持久化,能够根据持久化策略将缓存数据灵活的写到磁盘上,更好地满足了当下海量 ...

  3. 【Java】简单了解网络编程

    文章目录 网络编程 网络编程中有两个主要的问题 网络编程中的两个要素 通信要素一:IP和端口号 实例化InetAddress 两个常用方法 端口号 通信要素二:网络通信协议 实现TCP的网络编程 例子 ...

  4. 第56篇-ProfileData与DataLayout

    某些指令需要创建某些实例,如下: 指令 对应的DataLayout._struct._tag值 _checkcast._instanceof._aastore receiver_type_data_t ...

  5. 【新手笔记】golang中使用protocol buffers 3

    主要参考了这篇帖子:https://segmentfault.com/a/1190000009277748 1.下载windows版本的PB https://github.com/protocolbu ...

  6. Cesium中级教程2 - 图层

    Cesium中文网:http://cesiumcn.org/ | 国内快速访问:http://cesium.coinidea.com/ Cesium支持从几个标准服务绘制和添加高分辨率图像(地图)图层 ...

  7. 676. Implement Magic Dictionary

    Implement a magic directory with buildDict, and search methods. For the method buildDict, you'll be ...

  8. HTTPS加密证书流程(2)

    目录 一:HTTPS加密证书流程 二:证书对比 三:自签证书 1.(lb服务器负载均衡代理) 2.(创建CA证书 创建密码) 3.生成自签证书(公钥),同时去掉私钥的密码(Enter) 四:证书内容解 ...

  9. 从容器中获取宿主机IP地址

    背景: docker 中的程序需要连接外部的程序,连接的过程中会告知外部程序自己的ip地址,然后外部的程序会回连docker中的程序.由于docker使用的是rancher中的托管模式,外部程序是没办 ...

  10. JVM专题1: 类和类加载机制

    合集目录 JVM专题1: 类和类加载机制 Java对象的结构 在HotSpot虚拟机中, 对象在内存中存储的布局可以分为3块区域 对象头Header 实例数据Instance Data 对齐填充Pad ...