首页 > 其他分享 >物体检测序列之一:NMS

物体检测序列之一:NMS

时间:2023-06-17 15:33:36浏览次数:42  
标签:last NMS IoU 检测 region 序列 物体 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));

  

 

标签:last,NMS,IoU,检测,region,序列,物体,nms
From: https://www.cnblogs.com/jianyingzhou/p/17487519.html

相关文章

  • Java序列化
    一、序列化和反序列化序列化:将数据结构或对象转换成二进制字节流的过程反序列化:将在序列化过程中产生的二进制字节流转换成数据结构或对象的过程 常见场景:1、网络传输时,对象需要先被序列化,接收到后再进行反序列化2、将对象持久化到磁盘、文件时需要先进行序列化,从磁盘或者......
  • EViews下载(附序列号及教程)-EViews10.0破解版免费下载 软件大全
    EViews最新版是一款世界性的计量经济学软件,EViews最新版拥有创新的图形化的用户界面和强大的分析引擎,完美结合了现代软件技术和您需要的特征,EViews最新版可以快速和有效的管理您的数据。有需要的小伙伴快来下载使用吧。[下载地址]:后台私信我Eviews软件具有以下特点:1.强大的数据处......
  • 用LASSO,adaptive LASSO预测通货膨胀时间序列|附代码数据
    原文链接:http://tecdat.cn/?p=22273最近我们被客户要求撰写关于LASSO的研究报告,包括一些图形和统计输出。如果你了解数据科学领域,你可能听说过LASSO。LASSO是一个对目标函数中的参数大小进行惩罚的模型,试图将不相关的变量从模型中排除动机它有两个非常自然的用途,第一个是变量......
  • Matlab正态分布、历史模拟法、加权移动平均线 EWMA估计风险价值VaR和回测标准普尔指数
    原文链接:http://tecdat.cn/?p=24480 最近我们被客户要求撰写关于风险价值的研究报告,包括一些图形和统计输出。此示例说明如何使用三种方法估计风险价值(VaR)并执行VaR回测分析。这三种方法是:正态分布历史模拟指数加权移动平均线(EWMA)风险价值是一种量化与投......
  • 时间序列异常检测:统计和机器学习方法介绍
    理解时间序列数据在深入研究异常检测技术之前,先简单介绍时间序列数据的特征。时间序列数据通常具有以下属性:趋势:数据值随时间的长期增加或减少。季节性:以固定间隔重复的模式或循环。自相关:当前观测值与先前观测值之间的相关性。噪声:数据中的随机波动或不规则。让我们......
  • 换个思路,简单很多——B3637 最长上升子序列
    题面:B3637最长上升子序列-洛谷|计算机科学教育新生态(luogu.com.cn)  可恶,搞了半天结果是很简单的一个题目  我一直在想目标序列的左右对称  即序列中每一个负数块的和都小于左右两侧任一部分的和后来看了几个题解,发现只要从一个方向扫一遍,就必定扫到最优解  将和......
  • XML反序列化笔记
    反序列化枚举类型public银行卡类型marcaTarjeta{get;set;}publicenum银行卡类型{[XmlEnum(Name="0")]UnKnown=0,[XmlEnum(Name="1")]VISA=1,[XmlEnum(Name="2")]MASTERC......
  • mormot2 model序列和还原
    mormot2model序列和还原unitmormot2.json.serial;///<author>cxg2023-6-4</author>{$Idef.inc}interfaceusesmormot.core.buffers,mormot.core.text,mormot.core.json,mormot.core.base,Classes,SysUtils;type{TSerial}TSerial=c......
  • delphi model序列和还原
    delphimodel序列和还原封装了json和protobuf。unitserialize;///<author>cxg2022-8-30</author>interfaceusesSystem.SysUtils,Grijjy.ProtocolBuffers,System.JSON.Serializers;typeTSerial=classpublic//unmarshalclassfunctionun......
  • TDSQL产品序列理解
    为了增强战斗力和品牌识别度,腾讯把他们的数据库做了一次整合,原来的各种数据库揉在一起成了一个新产品线,分别叫TDSQL-A、TDSQL-C、TDSQL。每个产品是干嘛的?太乱了。谁看得懂这背后到底是几个数据库?作为阿里的同学,把它们大致对标成阿里系的产品,理解起来会简单一些:阿里腾讯分析ADBTD......