写在前面

在上一篇博客:【计算机视觉—RCNN目标检测系列】二、边界框回归(Bounding-Box Regression)(

戴璞微:【计算机视觉—RCNN目标检测系列】二、边界框回归(Bounding-Box Regression)​zhuanlan.zhihu.com

中我们主要讲解了R-CNN中边界框回归,接下来我们在这篇博客我们讲解R-CNN中另外一个比较种重要的模块——IoU与非极大抑制

在这篇博客中,我们将重点RCNN论文中另一个比较重要模块——IoU与非极大抑制。IoU是描述两个矩形框之间重合程度的指标,在RCNN中常用于衡量边界框回归算法得到的预测目标框与真实目标框之间的重合程度。非极大抑制算法(Non-Maximum Suppression,NMS)则是用于去除大量重复的候选目标框。


一、IoU

首先来看下交并比(Intersection over Union,IoU)。假定两个目标框分别为 和 ,两个矩形框的示意图如下图所示。那么两个目标框的交并比计算公式为:

。也就是IoU是两个目标框交际与并集的比值。一般来说,在目标检测中, 可视为检测结果良好正确,如果预测器和实际边界框完美重叠,则 ,因为交集就等于并集。但一般来说只要 ,那么结果是可以接受。

python中实现IoU的代码如下:

import numpy as npdef IoU(vertice1, vertice2):"""这是计算两个矩形区域的交并比函数,verticle格式为:[xin,ymin,xmax,ymax]:param vertice1: 目标框1:param vertice2: 目标框1:return: 两个矩形区域的交并比"""# 计算区域交集的左上与右下坐标lu = np.maximum(vertice1[0:2], vertice2[0:2])rd = np.minimum(vertice1[2:], vertice2[2:])# 计算区域交集的面积intersection = np.maximum(0.0, rd - lu)inter_square = intersection[0] * intersection[1]# 计算区域并集的面积square1 = (vertice1[2] - vertice1[0]) * (vertice1[3] - vertice1[1])square2 = (vertice2[2] - vertice2[0]) * (vertice2[3] - vertice2[1])union_square = np.maximum(square1 + square2 - inter_square, 1e-10)return np.clip(inter_square / union_square, 0.0, 1.0)


二、非极大抑制

接下来,我们重点介绍非极大抑制(Non-Maximum Suppression,NMS)。顾名思义,非极大抑制就是要抑制非极大值。也可以将非极大抑制理解成搜索局部最大值。 在此我们讨论的非极大抑制主要特指用于目标检测领域中搜索木分类概率最大的目标框的非极大抑制算法,而通用的非极大抑制请阅读论文《Efficient Non-Maximum Suppression》。下面我们来看下非极大抑制的示意图。

我们常会采用分类概率与IoU作为指标来实现目标框的非极大抑制。具体算法流程如下: 1. 首先我们按照目标框对应的分类概率进行排序,选取分类概率最大的目标框,记作current_box。 2. 计算current_box与剩余目标框之间的IoU 3. 将IoU大于阈值的目标框舍弃 4. 接下来在剩余的目标框中再选出最大分类概率的目标框。按照上述流程一直循环直至条件结束。 显然从算法流程可以看出,非极大抑制是一种贪心算法。它的主要目的就是消除多余重叠比例较高的目标框。在RCNN与Fast RCNN中,候选框主要是由选择性搜索算法获取的,为了涵盖每张图片中对各个目标,选择行搜索算法会返回将近2000个候选框,因此带来大量重叠率叫高的目标框,因此在分类和定位任务借宿后,利用非极大抑制算法进行淘汰多余重复候选框时一项十分重要的工作。

非极大抑制(NMS)算法的python实现如下:

import numpy as np  def py_cpu_nms(dets, thresh):"""这是NMS去除重复目标框的函数:param dets: 目标框数组,目标框的格式为:[xin,ymin,xmax,ymax,score]:param thresh: 阈值:return: 不重复的目标框数组在元目标框数组中的下标数组"""vertices = dets[:, 0:4]  # 目标框scores = dets[:, 4]  # bbox打分#areas = (x2 - x1 + 1) * (y2 - y1 + 1)# 打分从大到小排列,取indexorder = scores.argsort()[::-1]# keep为最后保留的边框keep = []while order.size > 0:# order[0]是当前分数最大的窗口,肯定保留i = order[0]keep.append(i)# 计算窗口i与其他所有窗口的交叠部分的面积ious = np.array([IoU(vertices[i], vertices[j]) for j in order[1:]])# inds为所有与窗口i的iou值小于threshold值的窗口的index,其他窗口此次都被窗口i吸收inds = np.where(ious <= thresh)[0]# order里面只保留与窗口i交叠面积小于threshold的那些窗口,由于ovr长度比order长度少1(不包       含i),所以inds+1对应到保留的窗口order = order[inds + 1]return keep


欢迎关注我的微信公众号:AI那点小事

非极大值抑制_【计算机视觉——RCNN目标检测系列】三、IoU与非极大抑制相关推荐

  1. 【R-CNN目标检测系列】三、IoU与非极大抑制

    写在前面 在上一篇博客:[计算机视觉--RCNN目标检测系列]二.边界框回归(Bounding-Box Regression)中我们主要讲解了R-CNN中边界框回归,接下来我们在这篇博客我们讲解R-C ...

  2. python目标识别算法_深度学习目标检测系列:一文弄懂YOLO算法|附Python源码

    摘要: 本文是目标检测系列文章--YOLO算法,介绍其基本原理及实现细节,并用python实现,方便读者上手体验目标检测的乐趣. 在之前的文章中,介绍了计算机视觉领域中目标检测的相关方法--RCNN系 ...

  3. python实现目标检测源代码包_深度学习目标检测系列:faster RCNN实现|附python源码...

    摘要: 本文在讲述RCNN系列算法基本原理基础上,使用keras实现faster RCNN算法,在细胞检测任务上表现优异,可动手操作一下. 目标检测一直是计算机视觉中比较热门的研究领域,有一些常用且成 ...

  4. R-CNN目标检测第三弹(Faster R-CNN)

    北京站 | NVIDIA DLI深度学习培训 2018年1月26日 NVIDIA 深度学习学院 带你快速进入火热的DL领域 阅读全文                           正文共5152 ...

  5. sklearn逻辑回归 极大似然 损失_收藏!攻克目标检测难点秘籍二,非极大值抑制与回归损失优化之路...

    点击上方"AI算法修炼营",选择加星标或"置顶" 标题以下,全是干货 前面的话 在前面的秘籍一中,我们主要关注了模型加速之轻量化网络,对目标检测模型的实时性难点 ...

  6. 计算机视觉算法——目标检测网络总结

    计算机视觉算法--目标检测网络总结 计算机视觉算法--目标检测网络总结 1. RCNN系列 1.1 RCNN 1.1.1 关键知识点--网络结构及特点 1.1.2 关键知识点--RCNN存在的问题 1 ...

  7. 目标检测系列(五)——Faster R-CNN译文

    文章目录 摘要 引言 2. 相关工作 3. Faster R-CNN 3.1 区域提议网络 3.1.1 anchor 3.1.2 损失函数 3.1.3 训练RPNs 3.2 RPN和Fast R-CN ...

  8. 计算机视觉多目标检测整合算法

    计算机视觉多目标检测整合算法 输入输出接口 Input:image/video Output:(1)BandingBox左上右下的坐标位置 (2)Type类型:人,车,-,-(3) 执行度:是指判别目 ...

  9. 计算机视觉:目标检测的发展历程与基础概念

    计算机视觉:目标检测的发展历程与基础概念 目标检测发展历程 目标检测基础概念 边界框(bounding box) 锚框(Anchor box) 交并比 对计算机而言,能够"看到"的 ...

最新文章

  1. 2022-2028年中国灭火装置行业市场前瞻与投资战略规划分析报告
  2. linux修改bmc ip,RH1288 V2修改BMC IP不生效处理案例
  3. Ubuntu 输入法安装
  4. 【推荐系统】面向科研的推荐系统Benchmark诞生!
  5. flink 写kafka_网易云音乐基于 Flink + Kafka 的实时数仓建设实践
  6. 用的fileupload组件实现的大文件上传
  7. Http协议(2)—客户端的识别与cookie机制
  8. debian换源_WSL2安装Debian(Ubuntu)并配置国内apt源
  9. dsp广告和信息流广告区别_360展示广告与其他信息流平台的区别
  10. php mysql json 转义字符_PHP转义Json里的特殊字符的函数
  11. Windows上SVN服务器搭建【转】
  12. 团队作业4——第一次项目冲刺(Alpha版本)2017.4.24
  13. 今天博客园肿了吗?希望团队修复一下
  14. dreamweaver序列号免费_dreamweaver8【dreamweaver8序列号】dreamweaver8注册码序列号简体中文版...
  15. html表单查重,毕业论文的表格会被查重吗?
  16. 010-flutter dart代码后台执行,没有界面的情况下
  17. itx机箱尺寸_鞋盒大小的ITX机箱初体验 | FORMULA X1装机展示
  18. 如何理解ifconfig中的errors/dropped/fifo/frame统计指标
  19. 2020年全球吸附分离材料行业现状、竞争格局与发展环境分析,各国政策扶持,市场空间大「图」
  20. 用正则表达式求非负整数 、匹配正整数、非正整数、负整数、整数、非负浮点数、正浮点数、非正浮点数、负浮点数、浮点数、有数字26个英文字母组成的字符串

热门文章

  1. 2 周流量激增百倍的腾讯课堂后台扩容和性能优化实战
  2. 大剑无锋之flume面试题【面试推荐】
  3. 一个整数按照n,2n,4n,8n的顺序递增,当值大于5000时,把值按照指定顺序输出来。(递归)
  4. java高级用法之:调用本地方法的利器JNA
  5. nodejs中使用worker_threads来创建新的线程
  6. JDK 14的新特性:instanceof模式匹配
  7. Effectice Java之始终覆盖toString(十)
  8. 软件测试部分练习题答案
  9. 21行代码AC——例题5-2 Ducci序列(Ducci Sequence,UVa1594)——解题报告
  10. C++STL容器,你真的会用了吗?——插入、删除、遍历和查找操作性能对比——删除(精简易懂版,句句干货)