非极大值抑制(non-maximum suppression)的理解与实现
RCNN 和微软提出的 SPP_net 等著名的目标检测模型,在算法具体的实施过程中,一般都会用到 non-maximum suppress(非最大值抑制,抑制即忽略, 也即忽略那些值(IoU)高于提供的阈值的) 的机制。
引入 non-maximum suppression 的目的在于:根据事先提供的 score 向量,以及 regions(由不同的 bounding boxes,矩形窗口左上和右下点的坐标构成) 的坐标信息,从中筛选出置信度较高的 bounding boxes。
其基本操作流程如下:
- 首先,计算每一个 bounding box 的面积:
- (x1, y1) ⇒ 左上点的坐标,(x2, y2) ⇒ 右下点的坐标;
 - (x2-x1+1)x(y2-y1+1)
 
 - 根据 scores 进行排序(一般从小到大),将 score 最大的bounding box置于队列,接下来计算其余 bounding box 与当前 score 最大的 bounding box 的 IoU,抑制(忽略也即去除)IoU大于设定阈值的 bounding box;
 - 重复以上过程,直至候选 bounding boxes 为空;
 
function picked = nms(boxes, overlap_thresh)
% boxes[:, 1:4] 存储着 regions 信息,boxes[:, 5] 存储的则是 scores 向量
if isempty(boxes)
    picked = [];
    return;
end
x1 = boxes[:, 1];
y1 = boxes[:, 2];           % (x1, y1) ⇒ bounding boxes 左上点坐标的集合
x2 = boxes[:, 3];
y2 = boxes[:, 4];           % (x2, y2) ⇒ bounding boxes 右下点坐标的集合
s = boxes[:, 5];            % scores 向量
areas = (x2-x1+1).*(y2-y1+1);   % 各个 bounding boxes 的面积
[vals, idx] = sort(s);      % 默认从小到大排序
while ~isempty(idx)
    last = length(idx);
    i = idx(last);
    picked = [picked, i];
    xx1 = max(x1(i), x1(1:last-1));
    yy1 = max(y1(i), y1(1:last-1));
    xx2 = min(x2(i), x2(1:last-1));
    yy2 = min(y2(i), y2(1:last-1));
    h = max(0, yy2-yy1+1);
    w = max(0, xx2-xx1+1);
    inter = w .* h;
    iou = inter ./ (areas(i) + areas(1:last-1)-inter);
    I = I(iou <= overlap_thresh);
end
end												
											非极大值抑制(non-maximum suppression)的理解与实现的更多相关文章
- 非极大值抑制(Non-Maximum Suppression,NMS)
		
概述 非极大值抑制(Non-Maximum Suppression,NMS),顾名思义就是抑制不是极大值的元素,可以理解为局部最大搜索.这个局部代表的是一个邻域,邻域有两个参数可变,一是邻域的维数,二 ...
 - 目标检测 非极大值抑制(Non-Maximum Suppression,NMS)
		
非极大值抑制(Non-Maximum Suppression,NMS),顾名思义就是抑制不是极大值的元素,可以理解为局部最大搜索.也可以理解为只取置信度最高的一个识别结果. 举例:  如图所示,现在 ...
 - IoU与非极大值抑制(NMS)的理解与实现
		
1. IoU(区域交并比) 计算IoU的公式如下图,可以看到IoU是一个比值,即交并比. 在分子中,我们计算预测框和ground-truth之间的重叠区域: 分母是并集区域,或者更简单地说,是预测框和 ...
 - 非极大值抑制Non-Maximum Suppression(NMS)
		
非极大值抑制(Non-Maximum Suppression,NMS) 概述 非极大值抑制(Non-Maximum Suppression,NMS),顾名思义就是抑制不是极大值的元素,可以理解为局 ...
 - Non-Maximum Suppression,NMS非极大值抑制
		
Non-Maximum Suppression,NMS非极大值抑制概述非极大值抑制(Non-Maximum Suppression,NMS),顾名思义就是抑制不是极大值的元素,可以理解为局部最大搜索. ...
 - 非极大值抑制(NMS)
		
转自:https://www.cnblogs.com/makefile/p/nms.html 概述 非极大值抑制(Non-Maximum Suppression,NMS),顾名思义就是抑制不是极大值的 ...
 - IOU和非极大值抑制
		
如何判断对象检测算法运作良好呢? 一.交并比(Intersection over union,IoU) 是产生的候选框(candidate bound)与原标记框(ground truth bound ...
 - [DeeplearningAI笔记]卷积神经网络3.6-3.9交并比/非极大值抑制/Anchor boxes/YOLO算法
		
4.3目标检测 觉得有用的话,欢迎一起讨论相互学习~Follow Me 3.6交并比intersection over union 交并比函数(loU)可以用来评价对象检测算法,可以被用来进一步改善对 ...
 - 【56】目标检测之NMS非极大值抑制
		
非极大值抑制(Non-max suppression) 到目前为止你们学到的对象检测中的一个问题是,你的算法可能对同一个对象做出多次检测,所以算法不是对某个对象检测出一次,而是检测出多次.非极大值抑制 ...
 
随机推荐
- Android自定义组件系列【16】——最帅气的自动滚动广告条
			
前一段时间要实现一个滚动的广告条,参考了一下网上许多实现,发现实现都很麻烦,所以我决定自己使用ViewFlipper来实现一个,在此将代码贴出来,与大家共享. 转载请说明出处:http://blog. ...
 - AtCoder Beginner Contest 067  C - Splitting Pi
			
C - Splitting Pile Time limit : 2sec / Memory limit : 256MB Score : 300 points Problem Statement Snu ...
 - codefroces 650A. Watchmen
			
A. Watchmen time limit per test 3 seconds memory limit per test 256 megabytes input standard input o ...
 - [Chromium文档转载,第007章]JNI on Chromium for Android
			
Overview JNI (Java Native Interface) is the mechanism that enables Java code to call native function ...
 - Ubuntu18.04上使用LLDB调试Chromium Android C++代码。
			
###动机###Chromium Android源代码庞大且复杂.在调试器LLDB下能帮助我们更好的理解代码流程.介绍使用LLDB调试器调试android上chromium的C++代码. [1] 编译 ...
 - Python正则表达式初识(三)
			
前几天给大家分享了Python正则表达式基础(一)和Python正则表达式基础(二),感兴趣的小伙伴可以点击进去学习,今天继续给大家分享Python正则表达式基础. 1.正则表达式特殊字符“+”,其代 ...
 - AtCoderAGC003D Anticube
			
Description: 给定一个序列\(a\),要求选出最多的序列元素并保证两两元素的乘积不为立方数 Solution: 我们考虑哪些因子是有用的,如果一个因子的指数\(>3\),我们可以将他 ...
 - df---显示磁盘分区使用空间
			
df命令用于显示磁盘分区上的可使用的磁盘空间.默认显示单位为KB.可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息. 语法 df(选项)(参数) 选项 -a或--all:包含全部的文 ...
 - Django_模型操作
 - 解决树莓派新版系统 ssh连接不了问题
			
一.解决办法 由于有连接了显示器,所以可以直接输入命令行开启树莓派的SSH,并且使用putty连接就可以. sudo service ssh start sudo service ssh sttus ...