物体检测序列之一:NMS
IoU (Intersection over Union),交并比,是衡量物体检测模型在特定数据集上检测效果好坏的一个常用的标准,通常情况下,想要通过IoU来衡量物体检测模型好坏需要具备以下几点:
1. 在物体检测任务重,是指数据集通过人工手动(偶尔也有机器)标注出的物体轮廓框的标注信息(ground truth,常常会标注出物体轮廓框的大小以及轮廓框的类别等基本信息),如图所示。

2. 通过模型预测出的轮廓框信息。
下图给出如何计算IoU的计算示例,计算IoU的matlab代码给出示例以供参考。图中,绿色框是ground truth,红色框是模型预测的结果。



上图中,如果绿色框面积是ground truth,红色框是预测的坐标位置,那么计算两者的IoU之后,可以看到,IoU越大,预测的结果和实际的ground truth重叠面积越大,在物体检测中,希望模型最后预测的结果在类别和位置上均能够和ground truth完全重叠。
NMS (non-maximum suppression), 非极大抑制,在物体检测任务中,通过分类器得分score过滤最后可能会剩余几千或者几百个候选窗口满足得分,但是窗口和窗口之间往往重叠性非常大,此时利用NMS对窗口进行过滤。具体过程如下,每一个候选窗口region的某一类得分为score,首先将该类的候选窗口按照得分scores从高到低进行排序,而后将score最大的region的保留到输出清单,剩余的region通过其坐标计算和最大score的region的IoU,将IoU大于某个阈值的regions扔掉不做输出,将和最高得分的region的IoU比阈值小且得分最高的region保留到输出清单,成为第二高score的region,将该region作为比较对象,再循环按照上述方式进行逐一计算IoU和候选窗口筛选。如此以来,会将重叠性特别高的候选窗口筛选掉一部分,从而保留有效且具有区别性的候选窗口作为输出。NMS过程是针对同一类的regions进行筛选的,因此如果物体检测器有C类,那么需要C次如此的操作。NMS和计算IoU的代码可以参考如下代码,代码来自faster rcnn的官方代码包[faster rcnn]。如图所示,是基于py-faster-rcnn的demo运行的检测结果,其中选用的模型是官方公开下载的ZF模型,测试数据是开源程序中demo自带的,分别选择几类检测结果,分析了nms前后的效果,图中,左图是选择的该类预测score得分大于0.8的所有结果,右图是对左图经过nms (iou>0.3)筛选后的结果。从图中可以看到,即使经过预测阈值筛选,在进行nms筛选前,依然有很多结果重叠度很高的预测结果存在,而经过nms筛选后,重叠的预测结果大大降低,nms大大提高了检测准确率(precision)和召回率(recall)。



计算IOU的代码附上
function pick = nms(boxes, overlap) x1 = boxes(:,1);
y1 = boxes(:,2);
x2 = boxes(:,3);
y2 = boxes(:,4);
s = boxes(:,end); 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;
o = inter ./ (area(i) + area(I(1:last-1)) - inter); I = I(find(o<=overlap));
end pick = pick(1:(counter-1));
物体检测序列之一:NMS的更多相关文章
- 物体检测中常用的几个概念迁移学习、IOU、NMS理解
1.迁移学习 迁移学习也即所谓的有监督预训练(Supervised pre-training),我们通常把它称之为迁移学习.比如你已经有一大堆标注好的人脸年龄分类的图片数据,训练了一个CNN,用于人脸 ...
- yolo回归型的物体检测
本弱又搬了另外一个博客的讲解: 缩进YOLO全称You Only Look Once: Unified, Real-Time Object Detection,是在CVPR2016提出的一种目标检测算 ...
- 物体检测丨Faster R-CNN详解
这篇文章把Faster R-CNN的原理和实现阐述得非常清楚,于是我在读的时候顺便把他翻译成了中文,如果有错误的地方请大家指出. 原文:http://www.telesens.co/2018/03/1 ...
- 目标检测后处理之NMS(非极大值抑制算法)
1.定义: 非极大值抑制算法NMS广泛应用于目标检测算法,其目的是为了消除多余的候选框,找到最佳的物体检测位置. 2.原理: 使用深度学习模型检测出的目标都有多个框,如下图,针对每一个被检测目标,为了 ...
- OpenCV学习 物体检测 人脸识别 填充颜色
介绍 OpenCV是开源计算机视觉和机器学习库.包含成千上万优化过的算法.项目地址:http://opencv.org/about.html.官方文档:http://docs.opencv.org/m ...
- opencv,关于物体检测
关于物体检测 环境:opencv 2.4.11+vs2013 参考: http://www.cnblogs.com/tornadomeet/archive/2012/06/02/2531705.htm ...
- 『计算机视觉』物体检测之RefineDet系列
Two Stage 的精度优势 二阶段的分类:二步法的第一步在分类时,正负样本是极不平衡的,导致分类器训练比较困难,这也是一步法效果不如二步法的原因之一,也是focal loss的motivation ...
- 后RCNN时代的物体检测及实例分割进展
https://mp.weixin.qq.com/s?__biz=MzA3MzI4MjgzMw==&mid=2650736740&idx=3&sn=cdce446703e69b ...
- 利用opencv进行移动物体检测
进行运动物体检测就是将动态的前景从静态的背景中分离出来.将当前画面与假设是静态背景进行比较发现有明显的变化的区域,就可以认为该区域出现移动的物体.在实际情况中由于光照阴影等因素干扰比较大,通过像素直接 ...
- 物体检测算法 SSD 的训练和测试
物体检测算法 SSD 的训练和测试 GitHub:https://github.com/stoneyang/caffe_ssd Paper: https://arxiv.org/abs/1512.02 ...
随机推荐
- SpringBoot2.X新版本配置拦截器在项目中的使用
拦截器:和过滤器用途基本类似 SpringBoot2.X新版本配置拦截器 implements WebMvcConfigure 自定义拦截器 HandlerInterceptor preHandle: ...
- P1754
球迷购票问题 题意描述 盛况空前的足球赛即将举行.球赛门票售票处排起了球迷购票长龙. 按售票处规定,每位购票者限购一张门票,且每张票售价为50元.在排成长龙的球迷中有N个人手持面值50元的钱币,另有N ...
- Django配置为连接到Microsoft SQL Server
可以将Django配置为连接到Microsoft SQL Server 2019.为此,你需要更改数据库设置中的一些配置选项.首先,确保你已经安装了 django 和 pyodbc 这两个库: p ...
- [oeasy]python0079_控制序列_光标位置设置_ESC_逃逸字符_CSI
光标位置 回忆上次内容 上次我们研究的比较杂 类型转化 进制转化 捕获异常 版本控制 生成帮助文档 变量的常用类型 变量的生命周期控制 数据类型主要研究了两个 字符串 str 整型数字 int ...
- 毕业设计&毕业项目:基于springboot+vue实现的在线音乐平台
一.前言 在当今数字化时代,音乐已经成为人们生活中不可或缺的一部分.随着技术的飞速发展,构建一个用户友好.功能丰富的在线音乐平台成为了许多开发者和创业者的目标.本文将介绍如何使用SpringBoot作 ...
- 前端使用 Konva 实现可视化设计器(18)- 素材嵌套 - 加载阶段
本章主要实现素材的嵌套(加载阶段)这意味着可以拖入画布的对象,不只是图片素材,还可以是嵌套的图片和图形. 请大家动动小手,给我一个免费的 Star 吧~ 大家如果发现了 Bug,欢迎来提 Issue ...
- vue codemirro 文件对比 sql编辑器
效果图: 安装及引用同上一篇文章,请移步:https://www.cnblogs.com/Lu-Lu/p/16265815.html HTML: <el-dialog class="d ...
- 搭建lnmp环境-mysql(第五步)
版本mysql 5.7 先删除系统自带的db 新建文件夹/data/download 进入后下载 wget http://repo.mysql.com/mysql57-community-releas ...
- 【Spring】08 后续的学习补充 vol2
1.[纯注解配置实现] 首先实现纯注解配置的第一件事情就是删除XML文件 然后编写一个类用于代替XML文件实现配置功能: 使用@Configuration将这个类注册为Spring容器 使用@Comp ...
- 实现一个终端文本编辑器来学习golang语言:第二章Raw模式下的输入输出
从第二章开始,在每个小节的最后都会有一些代码实操作业,你可以选择自己完成(比较推荐),再对照我的实现方式,当然也可以直接看我的代码实现.不过,之后的各个功能实现,我都会基于我先前的代码实现版本,在它的 ...