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的更多相关文章

  1. 物体检测中常用的几个概念迁移学习、IOU、NMS理解

    1.迁移学习 迁移学习也即所谓的有监督预训练(Supervised pre-training),我们通常把它称之为迁移学习.比如你已经有一大堆标注好的人脸年龄分类的图片数据,训练了一个CNN,用于人脸 ...

  2. yolo回归型的物体检测

    本弱又搬了另外一个博客的讲解: 缩进YOLO全称You Only Look Once: Unified, Real-Time Object Detection,是在CVPR2016提出的一种目标检测算 ...

  3. 物体检测丨Faster R-CNN详解

    这篇文章把Faster R-CNN的原理和实现阐述得非常清楚,于是我在读的时候顺便把他翻译成了中文,如果有错误的地方请大家指出. 原文:http://www.telesens.co/2018/03/1 ...

  4. 目标检测后处理之NMS(非极大值抑制算法)

    1.定义: 非极大值抑制算法NMS广泛应用于目标检测算法,其目的是为了消除多余的候选框,找到最佳的物体检测位置. 2.原理: 使用深度学习模型检测出的目标都有多个框,如下图,针对每一个被检测目标,为了 ...

  5. OpenCV学习 物体检测 人脸识别 填充颜色

    介绍 OpenCV是开源计算机视觉和机器学习库.包含成千上万优化过的算法.项目地址:http://opencv.org/about.html.官方文档:http://docs.opencv.org/m ...

  6. opencv,关于物体检测

    关于物体检测 环境:opencv 2.4.11+vs2013 参考: http://www.cnblogs.com/tornadomeet/archive/2012/06/02/2531705.htm ...

  7. 『计算机视觉』物体检测之RefineDet系列

    Two Stage 的精度优势 二阶段的分类:二步法的第一步在分类时,正负样本是极不平衡的,导致分类器训练比较困难,这也是一步法效果不如二步法的原因之一,也是focal loss的motivation ...

  8. 后RCNN时代的物体检测及实例分割进展

    https://mp.weixin.qq.com/s?__biz=MzA3MzI4MjgzMw==&mid=2650736740&idx=3&sn=cdce446703e69b ...

  9. 利用opencv进行移动物体检测

    进行运动物体检测就是将动态的前景从静态的背景中分离出来.将当前画面与假设是静态背景进行比较发现有明显的变化的区域,就可以认为该区域出现移动的物体.在实际情况中由于光照阴影等因素干扰比较大,通过像素直接 ...

  10. 物体检测算法 SSD 的训练和测试

    物体检测算法 SSD 的训练和测试 GitHub:https://github.com/stoneyang/caffe_ssd Paper: https://arxiv.org/abs/1512.02 ...

随机推荐

  1. 转载 | ofd转pdf最好用的软件,ofd文件如何转化成pdf?

    1.背景 需要将ofd转换为pdf 2.使用方法 使用taurusxin 开发的软件Ofd2Pdf.exe即可实现,软件版权归原作者所有.这里表示感谢! 3.下载地址 官网:https://githu ...

  2. Day 1 - 二分

    整数二分 我们可以做到每次排除一半的答案,时间复杂度 \(O(\log n)\). long long l = L, r = R; while(l <= r) { long long mid = ...

  3. 《最新出炉》系列入门篇-Python+Playwright自动化测试-56- 多文件上传 - 下篇

    1.简介 前边的两篇文章中,宏哥分别对input控件上传文件和非input控件上传文件进行了从理论到实践地讲解和介绍,但是后来又有人提出疑问,前边讲解和介绍的都是上传一个文件,如果上传多个文件,Pla ...

  4. Ubuntu16.04设置静态IP或动态ip(DHCP)

    Ubuntu16.04设置静态IP或动态ip(DHCP) 设置静态IP 1,vim编辑/etc/network/interfaces 网络配置文件 sudo vim /etc/network/inte ...

  5. Jmeter函数助手15-FiletoString

    FiletoString函数用于一次读取整个文件值. 输入文件的全路径:填入文件路径 File encoding if not the platform default (opt):读取文件的编码格式 ...

  6. 全网最适合入门的面向对象编程教程:29 类和对象的Python实现-断言与防御性编程和help函数的使用

    全网最适合入门的面向对象编程教程:29 类和对象的 Python 实现-断言与防御性编程和 help 函数的使用 摘要: 在 Python 中,断言是一种常用的调试工具,它允许程序员编写一条检查某个条 ...

  7. 【Vue】 签名组件

    一.需求背景: 检查业务,检查完成后,执行人需要签字证明检查完成 二.实现效果: 三.技术实现 通过canvas转换成blob对象,可以上传到文件服务,或者是下载另存为到本地磁盘 注意重点,canva ...

  8. 【VMware】将NAT虚拟机开放访问

    NAT模式下面需要将主机内的虚拟机提供给外部访问 这个设置可以通过开启端口来实现外部访问NAT虚拟机 主机端口 - 映射 虚拟机 IP 的端口,问题是有多少个虚拟机应用就需要开多少个端口...

  9. 【Zookeeper】01 概述 & 基础部署

    背景: 随着互联网技术的发展,企业对计算机系统的计算,存储能力要求越来越高,各大IT企业都在追求高并发,海量存储的极致, 在这样的背景下,单纯依靠少量高性能单机来完成计算机,云计算的任务已经无法满足需 ...

  10. tcprewrite-man

    官网手册:https://tcpreplay.appneta.com/wiki/tcprewrite-man.html https://linux.die.net/man/1/tcpprep 中文:h ...