非极大值抑制(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) 到目前为止你们学到的对象检测中的一个问题是,你的算法可能对同一个对象做出多次检测,所以算法不是对某个对象检测出一次,而是检测出多次.非极大值抑制 ...
随机推荐
- RedHat Linux 多媒体学习指南 (共 36 部原创视频)
1.为sco unix 添加第二块网卡 [url]http://you.video.sina.com.cn/b/11695632-1443650204.html[/url] 2.为sco unix ...
- 解决plsql遇到乱码的问题
遇到问题: PLSQL中汉字显示乱码,并且SQL语句中如果有汉字,则执行时报错.其实并不是SQL语句写的有问题,而是系统不能识别汉字. 解决方法. 首先执行语句 select * from V$NLS ...
- docker升级&加速器配置
默认使用yum或者apt安装的docker版本较老,可以通过以下方式进行升级: 1.卸载旧版本 [root@CentOS702 ~]# centos 7.3卸载docker[root@CentOS70 ...
- linux下,yum 安装mysql
顺手记录一下安装mysqlclient 先安装mysql-devel yum install mysql-devel 再安装mysqlclient pip3 install mysqlclient 开 ...
- 紫书 习题 10-32 UVa 1414 ( 迷之规律)
看了其他人博客,貌似i个盘子的方案数满足 f[i] = f[i-1] * x + y ??????? 神来之笔 貌似没有找到严格的证明-- 牛逼-- 如果这样的话暴力求出x和y然后递推完事 #incl ...
- 今日SGU 5.22
SGU 296 题意:给你一个最多1000位的数,让你删除k位使得剩下的数最大 收获:贪心 #include<bits/stdc++.h> #define de(x) cout<&l ...
- 【Codeforces Round #459 (Div. 2) A】Eleven
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 这个数列增长很快的. 直接暴力模拟看看是不是它的一项就好了 [代码] #include <bits/stdc++.h> ...
- 怎样更好的设计android图标,拉伸不变形等等系列长处,并且减小apk大小
android mvp框架:dileber(https://github.com/dileber/dileber.git) 继续为大家介绍android mvp开源框架 dileber 今天主要是字 ...
- JSONArray和JSONObject的简单使用
一.为什么要使用JSONArray和JSONObject 1.后台 -->前台 能够把java对象和集合转化成json字符串格式,这样在前台的ajax方法中能够直接转化成json对象使用 ,从后 ...
- android开发使用SQLite之写日记
使用数据库实现对数据的存储. 以下上一个小样例,写日记. 效果例如以下: 当LIstView中没有数据显示时,我们须要告诉用户没有数据. 方法有二: 1. activity继承Li ...