1.NMS(非极大值抑制)介绍

在目标检测算法中,对于一个真实物体的往往会有多个候选框输出,而我们只需一个最好的检测框,多余的候选框会影响检测的精度,因此需要利用NMS(非极大值抑制)来过滤掉重叠的候选框,得到最佳的候选框。所谓非极大值抑制就是说,对于多个重叠的检测框,它不是最好的框,那么就将抑制(删除),只保留一个最好的。

2.算法所需的指标

  1. 检测框的得分:NMS假设一个边框的预测得分越高,这个框就要被优先考虑,其他框与该框重叠超过一定程度的边框就要被舍弃掉。
  2. IoU:在评价两个边框 重合程度时,NMS需要使用这个指标,如果两个边框的IoU超过一定的阈值时,得分低的边框就会被舍弃。

3.算法流程

算法的输入包含了所有预测框的得分、左上点坐标、右下点坐标5个预测量。已经一个设定的IoU阈值。
流程如下:

  1. 按照预测框的得分,对所有预测框进行降序排列,记录下排列的索引order,并新建一个列表keep,作为最终的筛选后的边框索引结果。
  2. 将排序后的第一个边框最为当前框,并将其保留到keep中,再求当前框与剩余所有框的IoU.
  3. 在order中,仅仅保留IoU小于设定阈值的索引,重复第2步,直到order中仅仅剩余一个边框,则将其保留到keep中,退出循环,NMS结束。

4.代码实现

# -*-coding:utf-8-*-def nms(self,bboxes,scores,threshold=0.5):x1=bboxes[:,0]y1=bboxes[:,1]x2=bboxes[:,2]y2=bboxes[:,3]#计算每个box的面积areas=(x2-x1+1)*(y2-y1+1)#对每个框进行降序排序,order为降序排列的索引_,order=scores.sort(0,descending=True)#keep保留了NMS留下的边框boxkeep=[]while order.numel()>0:if order.numel()==1:i=order.item()keep.append(i)breakelse:i=order[0].item()#保留scores最大的那个表框的box[i]keep.append(i)# 巧妙利用tensor.clamp函数求取每一个框与当前框的最大值和最小值xx1=x1[order[1:]].clamp(min=x1[i])yy1=y1[order[1:]].clamp(min=y1[i])xx2=x2[order[1:]].clamp(max=x2[i])yy2=y2[order[1:]].clamp(max=y2[i])# 求取每一个框与当前框的重合部分面积inter = (xx2 - xx1).clamp(min=0) * (yy2 - yy1).clamp(min=0)# 计算每一个框与当前框的IoUiou = inter / (areas[i] + areas[order[1:]] - inter)# 保留IoU小于阈值的边框索引idx = (iou <= threshold).nonzero().squeeze()if idx.numel() == 0:break# 这里的+1是为了补充idx与order之间的索引差order = order[idx + 1]# 返回保留下的所有边框的索引值,类型为torch.LongTensorreturn torch.LongTensor(keep)

目标检测之非极大值抑制(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. Opencv学习笔记(二十六)文本检测mser+非极大值抑制nms

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

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

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

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

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

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

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

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

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

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

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

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

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

最新文章

  1. 系统异常设计规范与原则
  2. Nodejs.热部署方法
  3. Python 之父立 Flag:明年要把 Python 速度提高 2 倍!
  4. 如何让一滴水不蒸发?
  5. android 加载器loader详解
  6. 双线性内插怎么缩小_汗蒸桶怎么选择才是最好的
  7. 神策数据杨宁:券商财富管理数字化转型客户全生命周期解读
  8. 点聚WebOffice 控件 使用LoadOriginalFile 打开服务器文件
  9. ipv6的127位掩码如何表示_子网掩码为255.255.255.0代表的意思是什么?
  10. 深度学习《CNN架构续篇 - 1乘1卷积》
  11. 一文带你了解MultiBERT
  12. linux logo程序,制作自己的linux启动LOGO
  13. 路由器单区域 OSPF 基本配置
  14. centos8在桌面添加pycharm和idea快捷方式没有allow launching选项问题
  15. 插入外部dwg文件,避免外部参照
  16. 怎样利用python写游戏辅助_怎样才能写游戏辅助?
  17. 开源框架XWIKI搭建介绍
  18. 基于安卓平台的远程医疗APP设计
  19. 博客嵌入可以自适应的b站视频
  20. 软件工程师面试及简历指南

热门文章

  1. 基于Multisim的MC1496调幅电路的仿真
  2. java时间的格式化_java如何给时间格式化
  3. 【Java】 IDEA使用教程
  4. 个人中心html界面设计,APP个人中心页面设计
  5. pta求阶乘序列前n项和_求极限方法总结
  6. 视频垂直翻转并添加马赛克的步骤
  7. IoTDB MPP框架源码解读之SQL的一生(襁褓)
  8. Git安装包(win64)镜像下载地址
  9. 在Vmware安装wes 7
  10. 酒水饮料类零售库存管理软件app,哪个简单好用?看看这10款