本篇论文主要是针对目标检测中的非极大值抑制这部分做个简单叙述。在目标检测的任务中,非极大值抑制(NMS)是一种对检测结果进行冗余去除操作的后处理算法,可以理解为局部最大搜索。标准的极大值抑制算法是手工设计一个阈值,基于这个固定的距离值进行贪婪聚类 ,即:贪婪的选取得分高的检测结果并删除那些超过阈值的相邻结果,使得在recall和precision之间取得权衡。NMS是一个迭代-遍历-消除的过程。

(1)将所有框的得分排序,选中最高分及其对应的框

(2)遍历其余的框,如果和当前最高分框的重叠面积大于一定阈值,我们就将框删除。

(3)从未处理的框中继续选一个得分最高的,重复上述过程

代码如下:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Wednesday August 14 15:50:00 2018@author: CW
"""
import numpy as np
import matplotlib.pyplot as pltboxes = np.array([[100, 100, 210, 210, 0.71],[250, 250, 420, 420, 0.8],[220, 200, 320, 330, 0.92],[100, 100, 210, 210, 0.72],[230, 240, 325, 330, 0.81],[220, 230, 315, 340, 0.9]])
'''
boxes = np.array([[3, 6, 9, 11, 0.9],[6, 3, 8, 7, 0.6],[3, 7, 10, 12, 0.7],[1, 4, 13, 7, 0.2]])
'''def iou(xmin, ymin, xmax, ymax, areas, lastInd, beforeInd, threshold):# 将lastInd指向的box,与之前的所有存活的box指向坐标做比较xminTmp = np.maximum(xmin[lastInd], xmin[beforeInd])yminTmp = np.maximum(ymin[lastInd], ymin[beforeInd])xmaxTmp = np.minimum(xmax[lastInd], xmax[beforeInd])ymaxTmp = np.minimum(ymax[lastInd], ymax[beforeInd])# 计算lastInd指向的box,与其他box交集的,所有width,heightwidth = np.maximum(0.0, xmaxTmp - xminTmp + 1)height = np.maximum(0.0, ymaxTmp - yminTmp + 1)# 计算存活box与last指向box的交集面积intersection = width * heightunion = areas[beforeInd] + areas[lastInd] - intersectioniou_value = intersection / unionindexOutput = [item[0] for item in zip(beforeInd, iou_value) if item[1] <= threshold]return indexOutputdef nms(boxes, threshold):assert isinstance(boxes, np.ndarray)assert boxes.shape[1] == 5xmin = boxes[:, 0]ymin = boxes[:, 1]xmax = boxes[:, 2]ymax = boxes[:, 3]scores = boxes[:, 4]# calc area of each boxareas = (xmax - xmin + 1) * (ymax - ymin + 1)# score each box in ascending orderscoresSorted = sorted(list(enumerate(scores)), key=lambda item: item[1])# save indexindex = [item[0] for item in scoresSorted]keep = []while len(index) > 0:lastInd = index[-1]keep.append(lastInd)# calc the iou of the last box and all the boxes before itindex = iou(xmin, ymin, xmax, ymax, areas, lastInd, index[:-1], threshold)return keepdef bbox(dets, c='k'):x1 = dets[:, 0]y1 = dets[:, 1]x2 = dets[:, 2]y2 = dets[:, 3]plt.plot([x1, x2], [y1, y1], c)plt.plot([x1, x1], [y1, y2], c)plt.plot([x1, x2], [y2, y2], c)plt.plot([x2, x2], [y1, y2], c)plt.title("after nms")if __name__ == '__main__':# before nmsbbox(boxes, 'k')remain = nms(boxes, threshold=0.6)# after nmsbbox(boxes[remain], 'r')

非极大值抑制之前:

非极大值抑制之后:

贪心NMS存在的问题:

1. 当两个目标框接近时,分数更低的框就会因为与之重叠面积过大而被删掉。

2. NMS的阈值也不太容易确定,设小了漏检,设置过高容易增大误检。

图像处理随笔——非极大值抑制相关推荐

  1. 交并比 (IoU), mAP (mean Average Precision), 非极大值抑制 (NMS, Soft NMS, Softer NMS, IoU-Net)

    目录 目标检测的评价指标 交并比 (Intersection of Union, IoU) mAP (mean Average Precision) 其他指标 非极大值抑制 (Non-Maximum ...

  2. Non-Maximum Suppression,NMS非极大值抑制

    Non-Maximum Suppression,NMS非极大值抑制 概述 非极大值抑制(Non-Maximum Suppression,NMS),顾名思义就是抑制不是极大值的元素,可以理解为局部最大搜 ...

  3. 【目标检测系列】非极大值抑制(NMS)的各类变体汇总

    关注上方"深度学习技术前沿",选择"星标公众号", 技术干货,第一时间送达! [导读]前面已经先后为大家详细介绍过了目标检测领域的基础知识:[目标检测基础积累] ...

  4. 非极大值抑制_非极大值抑制(Non-Maximum Suppression)

    文章作者:Tyan 博客:noahsnail.com | CSDN | 简书 1. 什么是非极大值抑制 非极大值抑制,简称为NMS算法,英文为Non-Maximum Suppression.其思想是搜 ...

  5. 3.7 非极大值抑制-深度学习第四课《卷积神经网络》-Stanford吴恩达教授

    ←上一篇 ↓↑ 下一篇→ 3.6 交并比 回到目录 3.8 Anchor Boxes 非极大值抑制 (Non-max Suppression) 到目前为止你们学到的对象检测中的一个问题是,你的算法可能 ...

  6. array python 交集_NMS原理(非极大值抑制)+python实现

    1.先解释什么叫IoU(intersection-over-union).IoU表示(A∩B)/(A∪B) 即交并比. 非极大值抑制:图一 --> 图二 ,剔除同一个目标上的重叠建议框,最终一个 ...

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

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

  8. 非极大值抑制(Non-maximum suppression)在物体检测领域的应用

    转载自:http://blog.csdn.net/pb09013037/article/details/45477591 一.Nms主要目的 在物体检测非极大值抑制应用十分广泛,主要目的是为了消除多余 ...

  9. NMS 非极大值抑制

    非极大值抑制(non maximum suppression,NMS),顾名思义就是抑制不是极大值的元素,搜索局部的极大值. 定位一个车辆时,算法可能会找出一堆候选框,为了从中找出最佳候选框,非极大值 ...

最新文章

  1. 测试服务器最大链接数_LoaRunner性能测试系统学习教程:probe监控(3)
  2. springmvc 将post转换为delete,put
  3. 黑马程序员——Java正则表达式
  4. 清除window 系统中的垃圾文件-转
  5. 数据持久层框架 Hibernate
  6. 如何在 SAP Fiori Elements List Report 表格工具栏里增添新的自定义按钮
  7. 9.获取当前时区时间和utc时间的工具方法
  8. SAP License:MR22借贷物料一步设置可以把差异带走
  9. ASP.NET(第七章数据插入与更新:DataList)-asp.net关注
  10. Java基于Socket文件传输示例(转)
  11. bzoj 2743spoj DQUERY - D-query
  12. 软件发布!DOTA2统计学
  13. 有赞实时任务优化:Flink Checkpoint 异常解析与应用实践
  14. php手机靓号选号系统源码_最好的手机靓号网站源码-鹏博靓号系统
  15. PPT设计制作与美化
  16. 科大讯飞实习 第七周日记
  17. 解决win10系统飞秋不在线问题
  18. 【二分答案】JZOJ_3337 wyl8899的TLE
  19. 计算机专业大四课程,计算机专业大学四年课表.doc
  20. 求组合数(完善中.......)

热门文章

  1. bzoj 5094: 硬盘检测(概率)
  2. matlab2c使用c++实现matlab函数系列教程-poisspdf函数
  3. jenkins 控制台输出中文乱码
  4. 使用supervisor / systemctl nginx uwsgi 运行odoo
  5. 根据日期字符串获取当天星期几问题
  6. alex的ATM学习笔记
  7. c#后的完整cookie
  8. EF RepositoryBase 参考示例【转】
  9. 在WPF中自定义你的绘制(二)
  10. QTcpSocket 发送数据的几种方法