目标检测之非极大值抑制
基本思路:从待检测目标中先按照分类置信度,找一个最可信的框。然后判断其他框和它的交并比(IoU),如果大于阈值TH,说明相似,抑制掉就好了。
算法:1.按照置信度排序 2.判断其他框和得分最高的框的IoU,大于阈值则剔除得分较小的建议框 3.从没有处理的框中继续选择一个得分最高的,重复上述过程。 4.遍历所有的建议框,即所有物体种类都做一遍非极大值抑制。
注意在faster rcnn中有两个阈值0.7,第一次是判断正负样本的时候,大于0.7标为正样本,小于0.3为负样本(背景),中间的样本舍弃。 第二个是在nms中,用来判断和得分最高框的相似度,剔除相似样本。
1.局部最大搜索
目标检测问题的老大难问题之一就是如何提高召回率(所有标注的真实边界框有多少被预测出来了)。
即recall=正检/(正检+未检)
这就导致最后输出的边界框数量往往远大于实际数量,而这些模型的输出边界框往往是堆叠在一起的。因此,我们需要NMS从堆叠的边框中挑出最好的那个。
2.何时使用NMS? When NMS?
回顾我在R-CNN中提到的流程:
- 提议区域(选择性搜索)
- 提取特征
- 目标分类
- 回归边框
NMS使用在4. 回归边框之后,即所有的框已经被分类且精修了位置。且所有区域提议的预测结果已经由置信度与阈值初步筛选之后。
3. 如何非极大值抑制 How NMS?
一维简单例子
由于重点是二维(目标检测)的实现,因此一维只放出伪代码便于理解。
判断一维数组I[W]的元素I[i](2<=i<=W-1)是否为局部极大值,即大于其左邻元素I[i-1]和右邻元素I[i+1]
算法流程如下图所示:
算法流程3-5行判断当前元素是否大于其左邻与右邻元素,如符合条件,该元素即为极大值点。对于极大值点I[i],已知I[i]>I[i+1],故无需对i+1位置元素做进一步处理,直接跳至i+2位置,对应算法流程第12行。
若元素I[i]不满足算法流程第3行判断条件,将其右邻I[i+1]作为极大值候选,对应算法流程第7行。采用单调递增的方式向右查找,直至找到满足I[i]>I[i+1]的元素,若i<=W-1,该点即为极大值点,对应算法流程第10-11行。
推广至目标检测
首先,根据之前分析确认NMS的前提,输入与输出。
使用前提
目标检测模型已经完成了整个前向计算,并给出所有可能的边界框(位置已精修)。
算法输入
算法对一幅图产生的所有的候选框,每个框有坐标与对应的打分(置信度)。
如一组5维数组:
- 每个组表明一个边框,组数是待处理边框数
- 4个数表示框的坐标:X_max,X_min,Y_max,Y_min
- 1个数表示对应分类下的置信度
注意:每次输入的不是一张图所有的边框,而是一张图中属于某个类的所有边框(因此极端情况下,若所有框的都被判断为背景类,则NMS不执行;反之若存在物体类边框,那么有多少类物体则分别执行多少次NMS)。
除此之外还有一个自行设置的参数:阈值 TH。
算法输出
输入的一个子集,同样是一组5维数组,表示筛选后的边界框。
算法流程
- 将所有的框按类别划分,并剔除背景类,因为无需NMS。
- 对每个物体类中的边界框(B_BOX),按照分类置信度降序排列。
- 在某一类中,选择置信度最高的边界框B_BOX1,将B_BOX1从输入列表中去除,并加入输出列表。
- 逐个计算B_BOX1与其余B_BOX2的交并比IoU,若IoU(B_BOX1,B_BOX2) > 阈值TH,则在输入去除B_BOX2。
- 重复步骤3~4,直到输入列表为空,完成一个物体类的遍历。
- 重复2~5,直到所有物体类的NMS处理完成。
- 输出列表,算法结束
代码实现及参考:https://www.zhihu.com/question/39405815/answer/791341975
目标检测之非极大值抑制相关推荐
- 睿智的目标检测31——非极大抑制NMS与Soft-NMS
睿智的目标检测31--非极大抑制NMS与Soft-NMS 注意事项 学习前言 什么是非极大抑制NMS 1.非极大抑制NMS的实现过程 2.柔性非极大抑制Soft-NMS的实现过程 注意事项 Soft- ...
- Opencv学习笔记(二十六)文本检测mser+非极大值抑制nms
文章目录 mser检测 nms非极大值抑制 代码 mser检测 nms非极大值抑制 代码 import cv2 import matplotlib.pyplot as plt import numpy ...
- 目标检测之—非极大抑制(NMS)综述
非极大值抑制(Non-Maximum Suppression,NMS),顾名思义就是抑制不是极大值的元素.它在目标检测中起着非常关键的作用. 目标检测一般分为两个过程:训练过程+检测(推理)过程. 在 ...
- Shi-tomasi角点检测python实现及基于opencv实现 (角点检测、非极大值抑制)
写在前面: 已经是七月中旬,黄宁然,你依然在这里. 参考文献镇楼: [1]龚思宇宙,基于平面模板的摄像机标定及相关技术研究 [2]汪洋,扫地机器人定位算法设计与嵌入式系统实现 [3]Denny#,[o ...
- 目标检测 nms非极大抑制算法
nms算法就是对同一个anhor 的box 进行基于阈值的去重 1.目的 对于尺寸为416×416的输入图像,YOLO预测((52×52)+(26×26)+ 13×13))×3 = 10647个边界框 ...
- 下拉多选择框 实现方式_非极大值抑制Non-Maximum Suppression(NMS)一文搞定理论+多平台实现...
这是独立于薰风读论文的投稿,作为目标检测模型的拓展阅读,目的是帮助读者详细了解一些模型细节的实现. 薰风说 Non-Maximum Suppression的翻译是非"极大值"抑制, ...
- 深度学习笔记(38) 非极大值抑制
深度学习笔记(38) 非极大值抑制 1. 对象多次检测问题 2. 非极大值抑制 3. 独立性 1. 对象多次检测问题 到目前为止学到的对象检测中的一个问题是,算法可能对同一个对象做出多次检测 所以算法 ...
- 吴恩达神经网络和深度学习-学习笔记-44-交并比IoU + 非极大值抑制
交并比IoU--衡量定位精确度 在对象检测任务中,我们希望能够同时定位对象. 人们定义IoU这个概念,是为了评价你的对象定位算法是否精准,但更一般地说,IoU衡量了两个边界框重叠的相对大小. 如果实际 ...
- 【目标检测系列】非极大值抑制(NMS)的各类变体汇总
关注上方"深度学习技术前沿",选择"星标公众号", 技术干货,第一时间送达! [导读]前面已经先后为大家详细介绍过了目标检测领域的基础知识:[目标检测基础积累] ...
最新文章
- R语言ggplot2可视化分组散点图、使用scale_shape_manual函数、scale_color_manual函数、scale_size_manual函自定义设置分组散点的形状、大小、颜色
- python表单防重复提交_防止表单重复提交的几种策略
- java 快排和堆排序
- 第一个 Dubbo 应用
- Building Android App Without an IDE
- Linux Shell脚本 - 什么是Shell
- nessus重置密码
- 【CF603E】Pastoral Oddities cdq分治+并查集
- 如何把html转换cad,Tab2Xls插件(捷克版)将AutoCAD表格转换为XLS、CSV或HTML。
- linux的文件 I/O操作
- SpringCloud(一)系统架构演进
- 简单动画(过渡)与复杂动画
- J2EE框架技术(SpringMVC) 知识点笔记(2)
- 你必须知道的 NET(第2版)
- Matlab实现sift特征检测和两幅图像的特征点匹配(D. Lowe)
- 20190527-陈静初-文件操作-笔记
- 数据挖掘学习笔记3-贝叶斯与决策树
- 现代交换技术学习笔记
- java工程师的工作述职报告,java程序员述职报告
- 【2021-07-31】港股打新网