NMS的python实现

原文http://blog.csdn.net/ei1990/article/details/78203476

1、NMS(Non-Maximum Suppression) 
根据框的概率和IOU进行抑制

import numpy as np  def py_cpu_nms(dets, thresh):  """Pure Python NMS baseline."""  x1 = dets[:, 0]  y1 = dets[:, 1]  x2 = dets[:, 2]  y2 = dets[:, 3]  scores = dets[:, 4]  areas = (x2 - x1 + 1) * (y2 - y1 + 1)
#从大到小排列,取index  order = scores.argsort()[::-1]
#keep为最后保留的边框  keep = []  while order.size > 0:
#order[0]是当前分数最大的窗口,之前没有被过滤掉,肯定是要保留的  i = order[0]  keep.append(i)
#计算窗口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:]])  w = np.maximum(0.0, xx2 - xx1 + 1)  h = np.maximum(0.0, yy2 - yy1 + 1)  inter = w * h
#交/并得到iou值  ovr = inter / (areas[i] + areas[order[1:]] - inter)
#ind为所有与窗口i的iou值小于threshold值的窗口的index,其他窗口此次都被窗口i吸收  inds = np.where(ovr <= thresh)[0]
#下一次计算前要把窗口i去除,所有i对应的在order里的位置是0,所以剩下的加1  order = order[inds + 1]  return keepdef main():x = np.array([[3,6,9,11,0.9],[6,3,8,7,0.6],[3,7,10,12,0.7],[1,4,13,7,0.2]])y = py_cpu_nms(x, 0.3)
if __name__ == '__main__':main()

2、转自网上教程 
首先比较二者的参数部分:

np.max:(a, axis=None, out=None, keepdims=False)求序列的最值最少接收一个参数axis:默认为列向(也即 axis=0),axis = 1 时为行方向的最值;
np.maximum:(X, Y, out=None)X 与 Y 逐位比较取其大者;最少接收两个参数
>> np.max([-2, -1, 0, 1, 2])
2>> np.maximum([-2, -1, 0, 1, 2], 0)
array([0, 0, 0, 1, 2])# 当然 np.maximum 接受的两个参数,也可以大小一致# 或者更为准确地说,第二个参数只是一个单独的值时,其实是用到了维度的 broadcast 机制;

3、计算IOU

def calcIOU(x1, y1, w1, h1, x2, y2, w2, h2):if((abs(x1 - x2) < ((w1 + w2)/ 2.0)) and (abs(y1-y2) < ((h1 + h2)/2.0))):left = max((x1 - (w1 / 2.0)), (x2 - (w2 / 2.0)))upper = max((y1 - (h1 / 2.0)), (y2 - (h2 / 2.0)))right = min((x1 + (w1 / 2.0)), (x2 + (w2 / 2.0)))bottom = min((y1 + (h1 / 2.0)), (y2 + (h2 / 2.0)))inter_w = abs(left - right)inter_h = abs(upper - bottom)inter_square = inter_w * inter_hunion_square = (w1 * h1)+(w2 * h2)-inter_squarecalcIOU = inter_square/union_square * 1.0print("calcIOU:", calcIOU)else:print("No intersection!")return calcIOU
def main():calcIOU(1, 2, 2, 2, 2, 1, 2, 2)if __name__ == '__main__':main()

非极大值抑制NMS的python实现相关推荐

  1. MTCNN中的重叠度IOU和非极大值抑制NMS原理及Python实现

    MTCNN中的重叠度IOU和非极大值抑制NMS原理及Python实现 一.重叠度iou 从在一张照片上框人脸时,因为图像金字塔的原因可能会把人脸框两次以上,每个框的坐标为[X1,Y1X2,Y2,C], ...

  2. PyTorch实现非极大值抑制(NMS)

    NMS即non maximum suppression即非极大抑制,顾名思义就是抑制不是极大值的元素,搜索局部的极大值.在最近几年常见的物体检测算法(包括rcnn.sppnet.fast-rcnn.f ...

  3. 非极大值抑制(nms)算法详解[python]

    一.起源 目标检测在使用了基于深度学习的端到端模型后效果斐然.目前,常用的目标检测算法,无论是One-stage的SSD系列算法.YOLO系列算法还是Two-stage的基于RCNN系列的算法,非极大 ...

  4. NMS(非极大值抑制)的python,cpu,gpu实现

    必要性 NMS(非极大值抑制)是目标检测中用来确定最佳检测框的手段,根据目标检测流程,若果没有NMS步骤,其每个检测框都会有大量重叠度很高的预测框表示同一个目标.如下图: 左图为经过NMS的预测结果, ...

  5. 交并比 (IoU), mAP (mean Average Precision), 非极大值抑制 (NMS, Soft NMS, Softer NMS, IoU-Net)

    目录 目标检测的评价指标 交并比 (Intersection of Union, IoU) mAP (mean Average Precision) 其他指标 非极大值抑制 (Non-Maximum ...

  6. 【目标检测系列】非极大值抑制(NMS)的各类变体汇总

    关注上方"深度学习技术前沿",选择"星标公众号", 技术干货,第一时间送达! [导读]前面已经先后为大家详细介绍过了目标检测领域的基础知识:[目标检测基础积累] ...

  7. 风机桨叶故障诊断(七) 滑动窗与非极大值抑制NMS

    风机桨叶故障诊断(七)滑动窗与非极大值一直NMS 到目前为止,我已经利用自编码神经网络提取特征后训练得到了BP神经网络(参见:点击打开链接),且在测试样本集上表现不错.下面我们就要应用到实际中来检验算 ...

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

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

  9. YOLOv5改进之八:非极大值抑制NMS算法改进Soft-nms

    ​前 言:作为当前先进的深度学习目标检测算法YOLOv5,已经集合了大量的trick,但是还是有提高和改进的空间,针对具体应用场景下的检测难点,可以不同的改进方法.此后的系列文章,将重点对YOLOv5 ...

最新文章

  1. 【bzoj1853】[Scoi2010]幸运数字 容斥原理+搜索
  2. php 多人相册,精選五種 PHP 網路相簿總覽
  3. 菱形继承,多继承,虚继承、虚表的内存结构全面剖析(逆向分析基础)
  4. ABAP 选择屏幕上添加按钮,按钮上添加文字和图片
  5. oracle的监听器是什么,Oracle监听器,让你监听想要的东东
  6. 《C++ Primer 第五版》(第2.5节,第3.1-3.4节) ——采用预处理功能编写头文件,string初始化和字符操作,vector初始化和迭代器
  7. jvm调优工具_JVM性能调优监控工具jps、jstack、jmap、jhat、jstat、hprof使用
  8. 云开发初探 —— 更简便的小程序开发模式
  9. 趣题一则:寻找那扇门
  10. python 学习之 PythonBasic2
  11. bzoj2756: [SCOI2012]奇怪的游戏
  12. Python项目--飞机作战完整版(附带图片素材)
  13. 快速西门子PLC入门(适合零基础)
  14. AR地图与虚拟现实技术
  15. 关于数据清洗的步骤及方法的理解
  16. mysql 5.7.21没有64位_数据库MySQL5.7.21win64位安装配置
  17. 网页设计中的色彩搭配技巧
  18. echartsx轴数据过多,倾斜45度
  19. 一名奔三的程序猿的困惑
  20. asp毕业设计—— 基于asp+access的人事管理系统设计与实现(毕业论文+程序源码)——人事管理系统

热门文章

  1. Gps高程拟合matlab代码,几种GPS高程拟合方法分析与比较.doc
  2. oracle case grouping,ORACLE GROUPING函數的使用
  3. VSCODE常见问题(设置为4个空格)
  4. linux下载tomcat7命令,linux下安装tomcat7.0
  5. c语言输入10个员工,输入10个职工信息,按号码大小排序,再使用查找函数找职工的姓…...
  6. linux 脚本自动编制工具,全自动工具链编译脚本
  7. java scope=prototype_spring mvc 设置@Scope(prototype)
  8. 阻抗匹配工具_工具 | 9R Fret Polishing Wheels 品丝抛光轮
  9. 震旦ad208如何进入维修模式_今天才知道!华为手机维修时要开启这个功能,防止隐私被他人查看...
  10. SSL与TLS的区别