非极大值抑制算法(Non-Maximum Suppression,NMS)

非极大值抑制算法(Non-maximum suppression, NMS)和IOU 算法包括 NMS 和 IOU 两个部分 下面展示一些 内联代码片。 思路一 // JasonL import cv2 import numpy as np import matplotlib.pyplot as plt import time ''' 不同于“result_for_loop”脚本 这个脚本在遍历bbox2的时候 不使用 for loop ''' def covert_wh(x, y, w, h) -> float: ''' Args: w: wide 阅读详情

算法思想

目标检测中常用到NMS,在faster R-CNN中,每一个bounding box都有一个打分,NMS实现逻辑是:

1,按打分最高到最低将BBox排序 ,例如:A B C D E F

2,A的分数最高,保留。从B-E与A分别求重叠率IoU,假设B、D与A的IoU大于阈值,那么B和D可以认为是重复标记去除

3,余下C E F,重复前面两步。

代码实现

"""
文件说明:https://www.cnblogs.com/king-lps/p/9031568.html
"""

# !/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Mon May  7 21:45:37 2018

@author: lps
"""
import numpy as np

# size(6,4)
boxes = np.array([[100, 100, 210, 210, 0.72],
                  [250, 250, 420, 420, 0.8],
                  [220, 220, 320, 330, 0.92],
                  [100, 100, 210, 210, 0.72],
                  [230, 240, 325, 330, 0.81],
                  [220, 230, 315, 340, 0.9]])


def py_cpu_nms(dets, thresh):
	# dets:(m,5)  thresh:scaler

	x1 = dets[:, 0]
	y1 = dets[:, 1]
	x2 = dets[:, 2]
	y2 = dets[:, 3]

	areas = (y2 - y1 + 1) * (x2 - x1 + 1)
	scores = dets[:, 4]
	keep = []

	index = scores.argsort()[::-1]

	while index.size > 0:
		i = index[0]  # every time the first is the biggst, and add it directly
		keep.append(i)

		x11 = np.maximum(x1[i], x1[index[1:]])  # calculate the points of overlap
		y11 = np.maximum(y1[i], y1[index[1:]])
		x22 = np.minimum(x2[i], x2[index[1:]])
		y22 = np.minimum(y2[i], y2[index[1:]])

		w = np.maximum(0, x22 - x11 + 1)  # the weights of overlap
		h = np.maximum(0, y22 - y11 + 1)  # the height of overlap

		overlaps = w * h

		ious = overlaps / (areas[i] + areas[index[1:]] - overlaps)

		idx = np.where(ious <= thresh)[0]

		index = index[idx + 1]  # because index start from 1

	return keep


import matplotlib.pyplot as plt


def plot_bbox(dets, c='k'):
	x1 = dets[:, 0]
	y1 = dets[:, 1]
	x2 = dets[:, 2]
	y2 = dets[:, 3]

	plt.plot([x1, x2], [y1, y1], c)  # c for color
	plt.plot([x1, x1], [y1, y2], c)
	plt.plot([x1, x2], [y2, y2], c)
	plt.plot([x2, x2], [y1, y2], c)
	plt.title("after nms")
	plt.show()


plot_bbox(boxes, 'k')  # before nms

keep = py_cpu_nms(boxes, thresh=0.7)
plot_bbox(boxes[keep], 'r')  # after nms

输出结果:
nms之前
在这里插入图片描述
nms之后
在这里插入图片描述
这里有几个细节点:

  1. 获取下一轮的点坐标时,需要+1,这是因为iou计算是index[1:],抛掉了概率最大值的那个框,所以少一个size.
    在这里插入图片描述

  2. 计算IOU时,请选用矩阵坐标系统来思考(即opencv的坐标系,左上角是原点,往下是x递增的方向,往右是y递增的方向),其实只要按照矩阵row和col的格式来思考就可以了.相交的左上角都是max,相交区域的右下角都是min.

参考

NMS的python实现
python numpy.where()函数的用法
非极大值抑制算法(Non-Maximum Suppression,NMS)
非极大值抑制(NMS)的几种实现

OpenFOAM-多孔介质模型(porous media) 文章目录一、多孔介质(porous media)二、使用步骤1.达西定律2.Darcy-Forchheimer3.OpenFOAM fvOptions4.paraview动画每帧显示时间(Annotate Time)5.参考内容总结 一、多孔介质(porous media) 在流体力学中,流体流经多孔介质是指流体流经多孔介质时的行为方式,如海绵或木材,或使用沙子或其他多孔材料过滤水。 我们将展示如何设置多孔层,并使用OpenFOAM模拟流体通过该介质。 二、使用步骤 1.达西定律 达西定律最初是由达西通. 阅读详情

相关推荐

bcftools实战指南:从VCF文件处理到变异分析全流程解析

在基因组数据分析中,VCF(Variant Call Format)文件是存储基因序列变异信息的标准格式,广泛应用于群体遗传学和生物信息学研究。其核心原理是通过结构化文本记录SNP、INDEL等变异位点的基因型、质量值和注释信息。掌握高效处理VCF文件的技术,对于提升变异检测、数据清洗和下游分析的工作流效率具有重要价值。在生物信息学工具生态中,bcftools作为处理VCF/BCF文件的瑞士军刀,通过模块化设计实现了数据查询、过滤、统计和格式转换等核心功能。其流式处理架构支持管道化操作,能有效应对海量基因组

weixin_29081703的博客 321

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

非极大值抑制(Non-Maximum Suppression,NMS),顾名思义就是抑制不是极大值的元素。它在目标检测中起着非常关键的作用。 目标检测一般分为两个过程:训练过程+检测(推理)过程。 在训练过程中,目标检测算法会根据给定的ground truth调整深度学习网络参数来拟合数据集的目标特征,训练完成后,神经网络的参数固定,因而能够直接对新的图像进行目标预测。 然而,在实际的目标预测中,一般的目标检测算法(R-CNN,YOLO等等)都会产生非...

qq_25344301的博客 2万+

西门子S7-200 SMART PLC控制伺服电机

以下是使用西门子S7-200 SMART PLC控制伺服电机的详细程序框架和配置说明,涵盖硬件接线、PLC配置和基本运动控制逻辑。具体实现需根据伺服电机型号(如松下、三菱、台达等)调整参数。通过以上步骤,可实现伺服电机的基础位置控制。实际应用需根据设备机械参数和伺服驱动器手册调整细节。建议在调试时逐步测试脉冲输出和方向信号是否正常。

CHUXUEZHE8210的博客 6422

目标检测中NMS的GPU实现(来自于Faster R-CNN中的nms_kernel.cu文件)

最近要修改Faster R-CNN中实现的GPU版的NMS代码,于是小白的我就看起了CUDA编程,当然也只是浅显地阅读一些教程,快速入门而已,所以具体需要注意的以及一些思想,大家移步此博主的系列教程: 在了解了CUDA编程的核心思想后,我们便可以开始阅读nms_kernel.cu文件了,先直接上源码(部分简单的已经注释),如下: // ----------------------------...

qq_21368481的博客 1万+

【STM32学习】(29)STM32实现595驱动三个数码管(标准库和HAL库实现)

我选用的单片机型号为:STM32F103系列 74LS595是一个串转并行输出的芯片,它能为单片机节省很多的IO口,应用场景广泛。 现要求三个数码管动态显示,常规设计都是并行实现,需要8个IO数据口,然后还需要3个IO片选数码管接口,这样大大占用了IO口,导致连接的外设变少。因此我们引入74LS595芯片。电路设计如下: 只需要三个共阴极数码管与三个595芯片级联即可完成,通过RCLK,SCK,SER三个IO即可完成对数码管的动态控制并显示。电路焊接的实物图如下: 要求完成功能:实现数.

XiaoCaiDaYong的博客 8262

港口集装箱码头运营FlexSim仿真

列队4中的集装箱会根据不同类型的集装箱会放置在不同的堆场,因此根据前面对集装箱设置的标签Type的数值不同,设置不同的发送端口。集装箱到达列队3后,会有70%的集装箱到达堆场,30%的集装箱运出港口,因此在Queue列队3的Flow界面设置按照百分比发送端口,其中70%发送到端口1,即发送到列队4等待进入堆场,30%发送到端口2,即发送至出闸口。通过上述对比表格可以看出,当集卡数量在10的时候,岸桥和场桥的设备利用率达到了最高,当集卡数量为12的时候场桥1和场桥3的利用率有所下降,因此综合考虑。

m0_72514516的博客 1330

学习Faster R-CNN代码nms(七)

非极大值抑制(NMS)

zhangyifei0115 1639

别自己写CDC了!聊聊Xilinx AXI4-Stream Clock Converter IP里的寄存器管道模式到底有多省资源

本文探讨了Xilinx AXI4-Stream Clock Converter IP核的寄存器管道模式在FPGA设计中的高效资源利用。通过对比手工CDC实现,详细解析了IP核的精简化同步架构和时序收敛优势,并提供了实战案例和优化策略,帮助工程师快速实现时钟域转换,显著提升设计效率和性能。

weixin_33738555的博客 441

目标检测-Two Stage-Faster RCNN

前文提到了目标检测-Two Stage-Fast RCNN通过手工方法(Selective Search)寻找的候选框,非常耗时。Faster RCNN针对上述缺点做了改进提示:以下是本篇文章正文内容,下面内容可供参考相比于之前的算法,Faster RCNN由于其端到端的特性得到广泛应用,但是受Two Stage算法思想的影响,速度仍不够快,并且ROI Pooling有两次量化操作,会引入误差影响精度。

君子之学必日新,日新者日进也。不日新者必日退,未有不进而不退者 1475

PCL 平面点云的凹多边形边界提取【2025最新版】

平面点云的凹多边形边界提取及边界轮廓线绘制。博客长期更新,本文最近更新时间为:2025年1月6日。

点云侠的博客 7183

31.XAPP1052乱序分析及处理

目录 1.XAPP1052乱序分析 2.XAPP1052乱序处理 2.1乱序处理方法选择 2.2 XAPP1052乱序处理代码详解 3.XAPP1052乱序处理后的波形分析 3.1发送引擎 3.2接收引擎 4.XAPP1052乱序处理后的带宽测试 5.下期内容 1.XAPP1052乱序分析 首先先给大家讲解下什么是PCIe的乱序。在PCIe系统中,乱序就是主机发送的TLP序列ID为1、2、3、4到从机,从机接收到的可能不是1、2、3、4。主机和从机如果都不解决乱序的问题,就会导致从机接

一个早起的程序员 1704

Mask R-CNN --Faster RCNN 学习笔记牵涉的细节点__非极大抑制(NMS)

根据多篇博客整理,仅供参考学习。 先解释什么叫IoU。如下图所示IoU即表示(A∩B)/(A∪B)               会将Roi Pooling层形成固定大小的feature map进行全连接操作,利用Softmax进行具体类别的分类,同时,利用L1 Loss完成bounding box regression回归操作获得物体的精确位置. 具体怎么做呢?  ① 对2000×20维矩阵...

ilinda的博客 3641

PY32F406K1CU6 FLASH模拟EEPROM

摘要:本文介绍了基于STM32 FLASH模拟EEPROM的实现方法。头文件flash.h定义了FLASH页大小(256字节)、用户存储区域(4页)及地址范围,提供了等待周期配置和地址校验宏,声明了EEPROM初始化、读写操作等函数接口。源文件flash.c实现了具体功能:配置FLASH等待周期(144MHz需3WS)、页读写擦除操作,以及EEPROM初始化(解锁-擦除-验证-锁定)和缓冲区读写功能。其中写操作采用"读页→更新→擦除→编程"的流程,确保数据安全写入。该方案适用于需要非易失

sam的博客 194

nms python代码_python 实现非极大值抑制算法(Non-maximum suppression, NMS)

NMS 算法在目标检测,目标定位领域有较广泛的应用。算法原理非极大值抑制算法(Non-maximum suppression, NMS)的本质是搜索局部极大值,抑制非极大值元素。算法的作用当算法对一个目标产生了多个候选框的时候,选择score最高的框,并抑制其他对于改目标的候选框适用场景一幅图中有多个目标(如果只有一个目标,那么直接取score最高的候选框即可)。算法的输入算法对一幅图产生的所有的...

weixin_39874795的博客 160

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

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

NMS 算法在目标检测,目标定位领域有较广泛的应用。算法原理非极大值抑制算法(Non-maximum suppression, NMS)的本质是搜索局部极大值,抑制非极大值元素。算法的作用当算法对一个目标产生了多个候选框的时候,选择score最高的框,并抑制其他对于改目标的候选框适用场景一幅图中有多个目标(如果只有一个目标,那么直接取score最高的候选框即可)。算法的输入算法对一幅图产生的所有的...

weixin_39907157的博客 512

目标检测网络中大框包含小框的问题,非极大值抑制算法(Non-Maximum Suppression,NMS)优化

目标检测系列文章 前言 NMS一直是Object Detection很难绕开的步骤,本人的目标检测网络中遇到一个目标检测输出大框包含小框的问题如下图,(大概率是数据没搞好,但是数据多很难查出是哪写数据)。于是对nms做了一个修改。此方法可直接加在任何目标检测网络原版nms后面 这种情况下原版nms是无法过滤掉目标内的小框的。 一、NMS介绍 NMS 算法的大致过程:每轮选取置信度最大的 Bounding Box(简称 BBox,有时也会看到用 Pc,Possible Candidates 代替讲解的)

zengwb的博客 2697

yunyang tensorflow-yolov3 NMS:non maximum suppression 非极大值抑制方法

文章目录NMS: non maximum suppression非极大值抑制的背景非极大值抑制的步骤 NMS: non maximum suppression 非极大值抑制的背景 生成器对一张图片生成的框在进行图外滤去、颠倒滤去、低概率滤去之后,会留下一些符合要求的框,但这些框有不少部分是重合的,而在同一张图片中,我们需要识别的目标是有限的,所以我们要对这些框继续筛选并剔除,以满足我们目标与框一一...

Dontla的博客 1435

NMS(Non-Maximum Suppression)非极大值抑制的原理及实现

目标检测非极大值抑制算法的原理及其代码实现

FantasyJXF的博客 3118

YOLOv1预测阶段后处理----Non-maximum suppression(NMS非极大值抑制)

在目标检测中,不论是最初的region proposal,还是后来的anchor box,不可避免的一个问题就是对于同一个物体,会预测出多个bounding box,如下左图所示。而NMS所做的就是去除掉多余的bounding box,只保留和ground truth重叠度最高的bounding box,如下右图所示。

xinxin的博客 1687

非极大值抑制(Non-Maximum Suppression,NMS)算法与c和python代码详解

背景:非极大值抑制算法(Non-maximum suppression, NMS)的本质是搜索局部极大值,抑制非极大值元素。在目标检测之中用到非常多。 目的:搞懂此算法原理且看懂代码。 目录 一、算法解析 1.1 算法概览 1.2 算法过程 二、c代码解析 2.1 输入参量 2.2 按置信概率排序 sort函数 2.3 IOU的确定 string.compare函数 vec...

祥瑞的技术博客 5054

NMS:Efficient Non-Maximum Suppression论文解读(NMS详解)

NMS,非极大值抑制算法,用于目标检测的后处理,去除重叠度较高的冗余检测结果。 参考: https://www.bbsmax.com/A/A2dmV1YOze/ http://blog.sina.com.cn/s/blog_6fdc463b0102vcu5.html https://blog.youkuaiyun.com/shaoxiaohu1/article/details/16817971 ...

魔筝炼药师 6760

从NMS谈起——自适应非极大值抑制算法(ANMS)

自适应非极大值抑制算法自适应非极大值抑制算法是论文Multi-Image Matching using Multi-Scale Oriented Patches提出的一种算法。基本思想是评估所有interesting point的极大区域,并进行排序。具体来说,就是先选取很多的interesting point,组成集合S。对S中的每个点xix_i,寻找它的响应能作为区域最大值的区域半径rir_i,

Faded 7051
上一篇: 如何高效阅读源码
下一篇: mmdection入门
dlvector
博客等级 码龄10年 85粉丝 142原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值