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. Spring5.X bean自动装配Autowire属性

    属性注入 set方法.构造函数.POJO.list.map.ref,属于手工注入,点我直达 Spring自动注入 使用<bean>元素的autowire属性为一个bean定义指定自动装配模 ...

  2. Java-EL表达式替换和简化jsp页面中java代码的编写

    概念:Expression Language 表达式语言 作用:替换和简化jsp页面中java代码的编写 语法:$ 注意: jsp默认支持el表达式,如果要忽略el表达式 设置jsp中page指令中: ...

  3. UE5 射线检测排除隐藏的Actor

    0x00 Unreal Engine 5(UE5)以其卓越的性能和直观的开发工具在游戏开发领域占据了重要地位.本系列将深入探讨UE5中射线检测的关键概念,着重介绍处理隐藏Actor的技巧. 0x01. ...

  4. 一种优秀的虚拟机内存架构 - AQ

    源链接:https://www.axa6.com/zh/an-excellent-virtual-machine-memory-architecture 简介 虚拟机内存架构直接影响虚拟机的性能和占用 ...

  5. Vue 结合html2canvas和jsPDF实现html页面转pdf

    结合html2canvas和jsPDF实现html页面转pdf   By:授客 QQ:103355122   实践环境 win10   Vue 2.9.6 axios 0.18.0   html2ca ...

  6. .NET TCP、UDP、Socket、WebSocket

    做.NET应用开发肯定会用到网络通信,而进程间通信是客户端开发使用频率较高的场景. 进程间通信方式主要有命名管道.消息队列.共享内存.Socket通信,个人使用最多的是Sokcet相关. 而Socke ...

  7. java实现二维码登录功能

    本文采用Springboot工程进行开发,使用Google的zxing生成二维码,直接放代码: <?xml version="1.0" encoding="UTF- ...

  8. awk替换指定行指定列内容

    例如表格中数值如下1,2,3,41,2,1,22,3,2,3怎么样在原表中,把第二行第三个1替换为5. awk -F"," 'NR==2{$3=5} 1' file.txt -F ...

  9. 【Vue】Re21 VueX 第二部分(Mutations)

    一.Mutations携带参数处理 Store状态的更新唯一方式:提交Mutations Mutations包含两部分: 1.字符串的事件类型[TYPE] 2.一个回调函数[HANDLER] 该函数的 ...

  10. 模具仿真软件FASTAMP —— 华中科技大学材料成形及模具技术国家重点实验室

    相关介绍: https://www.ruanfujia.com/software/9525/ FASTAMP 是由华中科技大学材料成形及模具技术国家重点实验室独立设计开发的,是专业的板料冲压成形快速分 ...