NMS(non maximum suppression),中文名非极大值抑制,在很多计算机视觉任务中都有广泛应用,如:边缘检测、目标检测等。

这里主要以人脸检测中的应用为例,来说明NMS,并给出Matlab和C++示例程序。

人脸检测的一些概念

(1) 绝大部分人脸检测器的核心是分类器,即给定一个尺寸固定图片,分类器判断是或者不是人脸;

(2)将分类器进化为检测器的关键是:在原始图像上从多个尺度产生窗口,并resize到固定尺寸,然后送给分类器做判断。最常用的方法是滑动窗口。

以下图为例,由于滑动窗口,同一个人可能有好几个框(每一个框都带有一个分类器得分)

而我们的目标是一个人只保留一个最优的框:

于是我们就要用到非极大值抑制,来抑制那些冗余的框: 抑制的过程是一个迭代-遍历-消除的过程。

(1)将所有框的得分排序,选中最高分及其对应的框:

(2)遍历其余的框,如果和当前最高分框的重叠面积(IOU)大于一定阈值,我们就将框删除。

(3)从未处理的框中继续选一个得分最高的,重复上述过程。

下面给出MATLAB下的快速NMS代码,并带有详细的注释:

%% NMS:non maximum suppression
function pick = nms(boxes,threshold,type)
% boxes: m x 5,表示有m个框,5列分别是[x1 y1 x2 y2 score]
% threshold: IOU阈值
% type:IOU阈值的定义类型% 输入为空,则直接返回if isempty(boxes)pick = [];return;end% 依次取出左上角和右下角坐标以及分类器得分(置信度)x1 = boxes(:,1);y1 = boxes(:,2);x2 = boxes(:,3);y2 = boxes(:,4);s = boxes(:,5);% 计算每一个框的面积area = (x2-x1+1) .* (y2-y1+1);%将得分升序排列[vals, I] = sort(s);%初始化pick = s*0;counter = 1;% 循环直至所有框处理完成while ~isempty(I)last = length(I); %当前剩余框的数量i = I(last);%选中最后一个,即得分最高的框pick(counter) = i;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;%不同定义下的IOUif strcmp(type,'Min')%重叠面积与最小框面积的比值o = inter ./ min(area(i),area(I(1:last-1)));else%交集/并集o = inter ./ (area(i) + area(I(1:last-1)) - inter);end%保留所有重叠面积小于阈值的框,留作下次处理I = I(find(o<=threshold));endpick = pick(1:(counter-1));
end

NMS——非极大值抑制相关推荐

  1. Non-Maximum Suppression,NMS非极大值抑制

    Non-Maximum Suppression,NMS非极大值抑制 概述 非极大值抑制(Non-Maximum Suppression,NMS),顾名思义就是抑制不是极大值的元素,可以理解为局部最大搜 ...

  2. 深度学习自学(三):NMS非极大值抑制总结

    非极大值抑制(Non-Maximum Suppression,NMS) 顾名思义就是抑制不是极大值的元素,可以理解为局部最大搜索.这个局部代表的是一个邻域,邻域有两个参数可变,一是邻域的维数,二是邻域 ...

  3. 目标窗口检测算法-NMS非极大值抑制

    1. NMS(non maximum suppression)的定义和算法步骤 NMS(non maximum suppression),中文名非极大值抑制,在很多计算机视觉任务中都有广泛应用,如:边 ...

  4. 目标检测中的LOU(交并比)和NMS(非极大值抑制)代码实现

    1.LOU, 两个box框的交集比上并集,示意图如下所示: 代码如下所示: #假设box1的维度为[N,4] box2的维度为[M,4] def Lou(box1, box2):N = box1.si ...

  5. NMS 非极大值抑制

    非极大值抑制(non maximum suppression,NMS),顾名思义就是抑制不是极大值的元素,搜索局部的极大值. 定位一个车辆时,算法可能会找出一堆候选框,为了从中找出最佳候选框,非极大值 ...

  6. 目标检测的Tricks | 【Trick9】nms非极大值抑制处理(包括变体merge-nms、and-nms、soft-nms、diou-nms等介绍)

    如有错误,恳请指出. 用这篇博客记录一下nms,也就是非极大值抑制处理,算是目标检测后处理的一个难点. 在训练阶段是不需要nms处理的,只有在验证或者是测试阶段才需要将预测结果进行非极大值抑制处理,来 ...

  7. yolov3 NMS非极大值抑制

    基本原理:对于Bounding Box的列表B及其对应的置信度S,采用下面的计算方式.选择具有最大score的检测框M,将其从B集合中移除并加入到最终的检测结果D中.通常将B中剩余检测框中与M的IoU ...

  8. 【概念梳理】NMS 非极大值抑制

    写在最前 本文对网上关于 NMS 的解释整理了一下 一.原理 YOLO在最后的一个步骤就是对 SxSx(Bx5+C) 个向量进行非极大值抑制(Non-max suppression),一开始不是太明白 ...

  9. R-CNN-减少region proposals的数量:NMS(非极大值抑制)

    在R-CNN算法第一阶段中,selective search会产生2000个region proposals.经过svm打分后,一个物体可能就有多个框.如下图: 但是我们需要一个物体只有一个最优框(相 ...

最新文章

  1. 初次遇见NLP:从词向量到BERT
  2. 计算机考研只有数据结构,【择校必看】十三所计算机专业课只考数据结构的985院校!...
  3. X-AdminABP框架开发-系统日志
  4. 字符串系列函数(不断跟新)
  5. Vue style里面使用@import引入外部css, 作用域是全局的解决方案
  6. c语言 数组循环移动,如何将一个数组的元素循环左移?
  7. javaweb学习总结—jsp简单标签标签库开发
  8. Lnmp上安装Yaf学习(一)
  9. linux开机启动mysql脚本,ubuntu linux下mysql开机自启动 - 心之所向,无惧无悔! - 博客频道 - CSDN.NET...
  10. oracle 只有年和月怎么拼_oracle 两表关联时,年月条件的写法引起的巨大性能的差异...
  11. Java架构师发展路线
  12. 如何创建属于你自己的域名邮箱
  13. Laravel 入门基础教程
  14. 小县城开什么店比较挣钱?
  15. 用代码在最短时间做成事
  16. 如何导出word文档
  17. 如何更电计算机共享名称,手机电脑电视之间如何共享、投屏?
  18. 3D Vision Rebuttal
  19. 监控安防工程商如何选择POE供电交换机
  20. matlab语音算法,[转载]RLS算法多麦克风语音降噪( matlab编程 )

热门文章

  1. centos操作系统简介
  2. java进度条代码,java更新进度条
  3. EM算法-Jensen不等式
  4. 中兴网络设备交换机路由器查看MAC地址表项命令方法
  5. 大智慧公式系统:条件选股之技术指标选股
  6. mysql 秒和时分秒格式相互换算
  7. java基于springboot的网上商城购物系统
  8. npm ERR gyp verb `which` failed Error: not found: python2
  9. vue中使用excelJs导出excel
  10. html3d轮播图片效果,炫酷3D透视轮播图特效