物体检测序列之一: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 ...
随机推荐
- 小程序-云数据库的add,get,remove,update
云数据库的使用就是使用简单的原生封装wx.cloud.database().collection("list"),然后就是add,get,remove,update四个方法 初始化 ...
- [oeasy]python0085_[趣味拓展]字体样式_下划线_中划线_闪动效果_反相_取消效果
字体样式 回忆上次内容 \033 xm 可以改变字体样式 0m - 10m 之间设置的 都是字体效果 0m 复原 1m 变亮 2m 变暗 添加图片注释,不超过 140 字(可选) ...
- MySQL 实现 EF Code First TimeStamp/RowVersion 并发控制
在将项目迁移到MySQL 5.6.10数据库上时,遇到和迁移到PostgreSQL数据库相同的一个问题,就是TimeStamp/RowVersion并发控制类型在非Microsoft SQL Serv ...
- pytorch问题记录
1.找不到fused 2.找不到torch_extensions 网上的教程一般都是linux系统的,Windows这个是在C盘目录下 3.c++开发环境中找不到vcvars64.bat 解决方法:重 ...
- Fusion Compute install
分区选择默认 配置网络 (使用tab和上下左右 会有红色阴影表示当前选中部分) 密码有复杂度要求 这里输huawei12#$ 一个vrm单节点 两个vrm为主备 FC由vrm与can组成 Vrm提供管 ...
- Linux 备份命令 fsarchiver 基础使用教程
1 安装配置 fsarchiver 使用yum安装[二者选一个即可,我使用的是下面那个]: yum install https://dl.fedoraproject.org/pub/epel/epel ...
- 【Spring】05 注解开发
环境搭建 配置ApplicationContext.xml容器文件[半注解实现] <?xml version="1.0" encoding="UTF-8" ...
- 基于MybatisPlus的简单分页查询和条件分页查询
分页查询 分析: 分析文档要求 查看前端传递给后台的参数 分析参数进行编码 后台返回给前端的数据 思路 浏览器 - > Controller层 - > Service层 - > Ma ...
- 强化学习中atari游戏环境下帧的预处理操作
在网上找到一个Rainbow算法的代码(https://gitee.com/devilmaycry812839668/Rainbow),在里面找到了atari游戏环境下帧的预处理操作. 具体代码地址: ...
- 老代码报错:scipy.misc.imresize报错: AttributeError: module 'scipy.misc' has no attribute 'imresize'
运行老代码报错: image = misc.imresize(image, [Config.IMAGE_HEIGHT, Config.IMAGE_WIDTH], 'bilinear')Attribut ...