非极大抑制(Non-maximum suppression)在物体检测领域的应用

最近在一个项目,需要用到非极大值抑制,找了很长时间没有找到非极大抑制在物体检测方面的的详细解释,最后只有翻阅相关的代码来理解。

一、Nms主要目的

在物体检测非极大抑制应用十分广泛,主要目的是为了消除多余的框,找到最佳的物体检测的位置。

如上图中:虽然几个框都检测到了人脸,但是我不需要这么多的框,我需要找到一个最能表达人脸的框。下图汽车检测也是同样的原理。

二、原理

非极大抑制,顾名思义就是把非极大值过滤掉(抑制)。下面我就R-CNN或者SPP_net中的matlab源码来进行解释。

function picks = nms_multiclass(boxes, overlap)

%%boxes为一个m*n的矩阵,其中m为boundingbox的个数,n的前4列为每个boundingbox的坐标,格式为

%%(x1,y1,x2,y2);第5:n列为每一类的置信度。overlap为设定值,0.3,0.5 .....

x1 = boxes(:,1);%所有boundingbox的x1坐标

y1 = boxes(:,2);%所有boundingbox的y1坐标

x2 = boxes(:,3);%所有boundingbox的x2坐标

y2 = boxes(:,4);%所有boundingbox的y2坐标

area = (x2-x1+1) .* (y2-y1+1); %每个%所有boundingbox的面积

picks = cell(size(boxes, 2)-4, 1);%为每一类预定义一个将要保留的cell

for iS = 5:size(boxes, 2)%每一类单独进行

s = boxes(:,iS);

[~, I] = sort(s);%置信度从低到高排序

pick = s*0;

counter = 1;

while ~isempty(I)

last = length(I);

i = I(last);

pick(counter) = i;%无条件保留每类得分最高的boundingbox

counter = counter + 1;

xx1 = max(x1(i), x1(I(1:last-1)));

yy1 = max(y1(i), y1(I(1:last-1)));

xx2 = min(x2(i), x2(I(1:last-1)));

yy2 = min(y2(i), y2(I(1:last-1)));

w = max(0.0, xx2-xx1+1);

h = max(0.0, yy2-yy1+1);

inter = w.*h;

o = inter ./ (area(i) + area(I(1:last-1)) - inter);%计算得分最高的那个boundingbox和其余的boundingbox的交集面积

I = I(o<=overlap);%保留交集小于一定阈值的boundingbox

end

pick = pick(1:(counter-1));

picks{iS-4} = pick;%保留每一类的boundingbox

end

时间: 2024-11-10 13:52:56

非极大抑制(Non-maximum suppression)在物体检测领域的应用的相关文章

非极大抑制(Non-Maximum Suppression)

最近在看RCNN和微软的SPP-net,其中涉及到Non-Maximum Suppression,论文中没具体展开,我就研究下了代码,这里做一个简单的总结,听这个名字感觉是一个很高深的算法,其实很简单,就是把找出score比较region,其中需要考虑不同region的一个重叠问题. 假设从一个图像中得到了2000region proposals,通过在RCNN和SPP-net之后我们会得到2000*4096的一个特征矩阵,然后通过N的SVM来判断每一个region属于N的类的scores.其中

非极大抑制睔PYTHON实现

非极大抑制(Non-maximum suppression)python代码实现原创Butertfly 发布于2018-11-20 18:48:57 阅读数 293 收藏展开定位一个物体,最后算法就找出了一堆的方框,我们需要判别哪些矩形框是没用的.非极大值抑制:先假设有6个矩形框,根据分类器类别分类概率做排序,从大到小分别属于物体的概率分别为A.B.C.D.E.F. (1)从最大概率矩形框F开始,分别判断B~F与A的重叠度IOU是否大于某个设定的阈值; (2)假设B.D与F的重叠度超过阈值,那么

canny中的非极大抑制

canny边缘检测首先对图像做高斯滤波和生成梯度图,得到的梯度图中,边缘的宽度可能大于一个象素,nonmaxima suppression的过程是沿着边缘的梯度方向进行检测,把不是局部最大值的象素置0,这样得到了只有一个象素宽度的边缘. 所以nonmaxima suppression的作用是将梯度图中的边缘细化成一个象素宽度. canny中的非极大抑制,布布扣,bubuko.com

一篇文章看懂物体检测的发展脉络 转

转 https://zhuanlan.zhihu.com/p/28399320 第一,什么是物体检测,如何去评价一个物体里系统的好坏. 第二,物体检测整个的框架是怎么样的?它一般包含了图像的分类和物体检测的定位. 第三,介绍物体检测的历史发展,从传统的人工设计的一些图像特征加上分类器到现在的深度学习. ▼ What's Computer Vision 介绍物体检测之前,我们首先要知道什么是计算机视觉.计算机视觉是计算机科学的一个分支领域,旨在构造智能算法和程序,来"观察"这个世界.比如

第二十七节,IOU和非极大值抑制

你如何判断对象检测算法运作良好呢?在这一节中,你将了解到并交比函数,可以用来评价对象检测算法. 一 并交比(Intersection over union ) 在对象检测任务中,你希望能够同时定位对象,所以如果实际边界框是这样的,你的算法给出这个紫色的边界框,那么这个结果是好还是坏?所以交并比(loU)函数做的是计算两个边界框交集和并集之比.两个边界框的并集是这个区域,就是属于包含两个边界框区域(绿色阴影表示区域),而交集就是这个比较小的区域(橙色阴影表示区域),那么交并比就是交集的大小,这个橙

IOU和非极大值抑制(转)

IOU和非极大值抑制(转) 原文链接:http://www.cnblogs.com/zyly/p/9245451.html 你如何判断对象检测算法运作良好呢?在这一节中,你将了解到并交比函数,可以用来评价对象检测算法. 一 并交比(Intersection over union ) 在对象检测任务中,你希望能够同时定位对象,所以如果实际边界框是这样的,你的算法给出这个紫色的边界框,那么这个结果是好还是坏?所以交并比(loU)函数做的是计算两个边界框交集和并集之比.两个边界框的并集是这个区域,就是

高效的非极大值抑制

http://blog.sina.com.cn/s/blog_679e1329010141x3.html 本文参考论文 ICPR2006-<Efficient Non-Maximum Suppression> 一.简介     非极大值抑制(NMS)可以看做是局部最大值的搜索问题,NMS是许多计算机视觉算法的部分.如何设计高效的NMS算法对许多应用是十分关键的,例如视频跟踪.数据挖掘.3D重建.物体识别以及纹理分析等. 本文只列出算法的具体流程,对算法的复杂性分析具体参考论文. 二.1维情况下

非极大值抑制(NMS)的几种实现

因为之前对比了RoI pooling的几种实现,发现python.pytorch的自带工具函数速度确实很慢,所以这里再对Faster-RCNN中另一个速度瓶颈NMS做一个简单对比试验. 这里做了四组对比试验,来简单验证不同方法对NMS速度的影响. 方法1:纯python语言实现:简介方便.速度慢 方法2:直接利用Cython模块编译 方法3:先将全部变量定义为静态类型,再利用Cython模块编译 方法4:在方法3的基础上再加入cuda加速模块, 再利用Cython模块编译,即利用gpu加速 一.

非极大值抑制(NMS)

一. 引入NMS 在R-CNN中对于2000多个region proposals得到特征向量(4096维)后,输入到SVM中进行打分(score).除了背景以外VOC数据集共有20类.那么2000*4096维特征矩阵与20个SVM组成的权重矩阵4096*20相乘得到结果为2000*20维矩阵.这个矩阵2000行表示有2000个框.20列为每一个框属于这20个类的score(置信度).也就是说每一列即每一类有2000个不同的分值.那么每一类有这么多候选框肯定大多冗余.所以需要利用非极大值抑制方法进