前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >一分钟速学 | NMS, IOU 与 SoftMax

一分钟速学 | NMS, IOU 与 SoftMax

作者头像
机器学习炼丹术
发布于 2020-07-23 07:36:58
发布于 2020-07-23 07:36:58
98500
代码可运行
举报
运行总次数:0
代码可运行

非极大抑制

NMS的英文是Non-maximum suppression的缩写。

简单的说,就是模型给出了多个重叠在一起的候选框,我们只需要保留一个就可以了。其他的重叠的候选框就删掉了,效果可见下图:

交并比

IoU的英文全称Intersection over Union,就是两个候选框区域的交集面积比上并集的面积,用下图可以理解:

hard-NMS

hard-nms其实就是经典版本的NMS的方法。就是根据模型给出每个box的置信度从大到小进行排序,然后保留最大的,删除所以与这个最大置信度的候选框的IoU大于阈值的其他候选框。

举个例子吧,现在有4个候选框:(box1,0.8),(box2,0.9), (box3,0.7),(box4,0.5)

我们把这四个候选框按照置信度从大到小排序:box2>box1>box3>box4

现在我们保留置信度最大的候选框box2,然后计算剩下三个box与box2之间的IoU,如果IoU大于一个事先设置的阈值,那么就删除这个box。假设,阈值是0.5:

IoU(box1,box2)=0.1<0.5,保留;

IoU(box3,box2)=0.7<0.5,删除;

IoU(box4,box2)=0.2<0.5,保留;

现在还有box1和box4,然后再重复上面的过程,排序,然后删除。

下面是python实现的hard-NMS:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def hard_nms(box_scores, iou_threshold, top_k=-1, candidate_size=200):
    """
    Args:
        box_scores (N, 5): box的集合,N为框的数量,5即4(位置信息)+1(可能为物体的概率)
        iou_threshold: 我们用IOU标准去除多余检测框的阈值
        top_k: 保留多少个计算后留下来的候选框,如果为-1则全保留
        candidate_size: 参与计算的boxes数量
    Returns:
         picked: 经过nms计算后保留下来的box
    """
    scores = box_scores[:, -1]                # 首先我们取出box中的最后一个元素也就是当前box检测到物体的概率
    boxes = box_scores[:, :-1]                # 取出box中的四个坐标(左上、右下)
    picked = []  
    _, indexes = scores.sort(descending=True) # 按照降序排列所有的物体的概率,得到排序后在原数组中的索引信息 indexes
    indexes = indexes[:candidate_size]        # 只保留前 candidate_size 个 boxes 其余的不考虑了
    while len(indexes) > 0:
        current = indexes[0]                  # 每次取出当前在 indexes 中 检测到物体概率最大的一个 
        picked.append(current.item())         # 将这个最大的存在结果中
        if 0 < top_k == len(picked) or len(indexes) == 1:
            break
        current_box = boxes[current, :]       # 当前第一个也就是最高概率的box
        indexes = indexes[1:]                
        rest_boxes = boxes[indexes, :]        # 剩下其余的box
        iou = iou_of(                         # 将当前的box与剩下其余的boxes用IOU标准进行筛选
            rest_boxes,
            current_box.unsqueeze(0),
        )
        indexes = indexes[iou <= iou_threshold]# 保留与当前box的IOU小于一定阈值的boxes,

    return box_scores[picked, :]

如何计算iou的面积呢?实现方法在下面:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def area_of(left_top, right_bottom) -> torch.Tensor:
    """Compute the areas of rectangles given two corners.

    Args:
        left_top (N, 2): left top corner.
        right_bottom (N, 2): right bottom corner.

    Returns:
        area (N): return the area.
    """
    hw = torch.clamp(right_bottom - left_top, min=0.0)
    return hw[..., 0] * hw[..., 1]


def iou_of(boxes0, boxes1, eps=1e-5):
    """Return intersection-over-union (Jaccard index) of boxes.

    Args:
        boxes0 (N, 4): ground truth boxes.
        boxes1 (N or 1, 4): predicted boxes.
        eps: a small number to avoid 0 as denominator.
    Returns:
        iou (N): IoU values.
    """
    overlap_left_top = torch.max(boxes0[..., :2], boxes1[..., :2])
    overlap_right_bottom = torch.min(boxes0[..., 2:], boxes1[..., 2:])

    overlap_area = area_of(overlap_left_top, overlap_right_bottom)
    area0 = area_of(boxes0[..., :2], boxes0[..., 2:])
    area1 = area_of(boxes1[..., :2], boxes1[..., 2:])
    return overlap_area / (area0 + area1 - overlap_area + eps)

soft-NMS

在密集目标检测任务中,hard-NMS会有一些问题,看下面的例子:

两个物体重叠起来了,但是根据hard-NMS绿色的框会被掉。

Soft-NMS就改动了一个地方。 在判断最高的置信度的box和其他box的IoU的时候增加了一个系数,可以更好的选择哪些才是多余的box。

对于hard-NMS来说, 的时候,保留,大于等于的时候删除, 表示置信度:

对于soft-NMS来说, 的时候,保留,大于的时候削减:

可以看出来,hard-NMS对于IoU大于阈值的候选框,直接把其置信度变成0,这样就相当于删除了这个box;但是soft-NMS的会根据IoU的大小,去适当的削减置信度,从而留下一些余地。

【如何削减】这里有两种方法来降低重叠候选框的置信度:

s=s(1iou(M,b))

简单的线性衰减;

s=seiou(M,b)2σ

指数衰减。其中sigma是常数,一般是0.5.

第二种方法更为常见。


下面是python来实现的soft-NMS,其实跟hard-NMS相比,就多了一行代码罢了:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def soft_nms(box_scores, score_threshold, sigma=0.5, top_k=-1):
    """Soft NMS implementation.

    References:
        https://arxiv.org/abs/1704.04503
        https://github.com/facebookresearch/Detectron/blob/master/detectron/utils/cython_nms.pyx

    Args:
        box_scores (N, 5): boxes in corner-form and probabilities.
        score_threshold: boxes with scores less than value are not considered.
        sigma: the parameter in score re-computation.
            scores[i] = scores[i] * exp(-(iou_i)^2 / simga)
        top_k: keep top_k results. If k <= 0, keep all the results.
    Returns:
         picked_box_scores (K, 5): results of NMS.
    """
    picked_box_scores = []
    while box_scores.size(0) > 0:
        max_score_index = torch.argmax(box_scores[:, 4])
        cur_box_prob = torch.tensor(box_scores[max_score_index, :])
        picked_box_scores.append(cur_box_prob)
        if len(picked_box_scores) == top_k > 0 or box_scores.size(0) == 1:
            break
        cur_box = cur_box_prob[:-1]
        box_scores[max_score_index, :] = box_scores[-1, :]
        box_scores = box_scores[:-1, :]
        ious = iou_of(cur_box.unsqueeze(0), box_scores[:, :-1])

        # 以下这句是新加的,如果没有这句就是Hard-NMS了
        box_scores[:, -1] = box_scores[:, -1] * torch.exp(-(ious * ious) / sigma) 

        box_scores = box_scores[box_scores[:, -1] > score_threshold, :]
    if len(picked_box_scores) > 0:
        return torch.stack(picked_box_scores)
    else:
        return torch.tensor([])
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-07-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 机器学习炼丹术 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
主数据:为何成为制造业数字化转型的“秘密武器”
在制造业迈向数字化转型的新时代,数据已跃升为企业创新的“新石油”,是推动竞争力攀升的关键资源。主数据,它横跨企业各个业务部门与系统,是确保数据一致性、精确性和时效性的坚固基石。接下来,让我们深入探讨制造业主数据管理的核心要素、重要性及实施主数据管理系统的必要性,并通过三个案例,揭示主数据在制造业数字化转型中的非凡价值。
数据狗忙忙忙
2025/05/14
1010
Tapdata 杨哲轩:如何在零售行业实施主数据治理?
今天想和大家聊聊如何选择主数据管理方案。在上一篇文章里,我们谈到了数据孤岛形成的原因,简单地介绍了主数据管理的概念和主数据管理为何能发挥作用。
Tapdata
2022/12/06
5010
Tapdata 杨哲轩:如何在零售行业实施主数据治理?
主数据管理理论与实践
本文介绍了主数据的概述,包括主数据的定义、特征、类型、和其他数据的关系,主数据管理的意义,主数据管理的实施痛点,主数据管理的内容,主数据的管理实施方法以及项目实施示例等内容,为对主数据和数据管理有研究兴趣的朋友提供了一定的参考。
大数据学习与分享
2022/07/13
7970
主数据管理理论与实践
数据治理:某环境公司主数据管理项目经验分享
作为企业运营的基石,主数据承载着企业决策和业务流程优化的关键。某环境股份有限公司在应对项目、组织、客商及设备与物资等多领域主数据管理挑战的过程中,不断探索与创新。现在,让我们一同深入这个案例,去探寻如何构建高效统一的主数据管理体系,从而以数据为核心驱动力,推动企业向更加智能化、高效化的未来迈进。
数据狗忙忙忙
2025/02/12
1770
实施数据治理项目是数据中心建设的关键,数字化转型的基础
企业数字化转型趋势是“数据”引领业务变革,数据集中管控成为大势所趋,如何做好数据共享和数据分析、如何发挥数据资产价值最大化是我们信息化工作首要目标,本文从基本术语及概念、数据共享服务、数据资源中心架构、数据治理平台、数据运营体系等10核心观点来阐述,实施企业级数据治理项目是数据资源中心建设的关键,是企业数字化转型和发展的基础。
Spark学习技巧
2019/10/24
1.1K0
数字化转型时代的企业数据新基建 | 爱分析报告
刚刚过去的21世纪的第二个十年,是消费互联网蓬勃发展的十年,也是云计算、大数据、人工智能等新一代信息技术,即“数字化技术”快速崛起的十年。
爱分析ifenxi
2022/07/22
5100
数字化转型时代的企业数据新基建 | 爱分析报告
经典必读:华为的数字化转型与数据治理
导读:2017 年华为提出了企业的新愿景:"把数字世界带入每个人、每个家庭、每个组织,构建万物互联的智能世界"。同时,华为公司董事、CIO陶景文提出了"实现全联接的智能华为,成为行业标杆"的数字化转型目标。
架构之家
2022/07/12
1.2K0
经典必读:华为的数字化转型与数据治理
数据治理方法:如何从0到1搭建企业级主数据管理平台
多年前,当我们开始“玩主数据”的时候,客户领导担心业务部门不能正确理解,把它称为“公共数据”——这个名称虽不够准确,却为普及主数据和主数据管理奠定了良好的基础。
马哥说数据
2021/05/13
1.9K0
数据治理方法:如何从0到1搭建企业级主数据管理平台
主数据建设的挑战与发展
首先介绍一下很多企业在做主数据建设中都会遇到的一些痛点和挑战。可能很多企业有的没有建主数据;有的建了分域的主数据,比如说人事域、财务域、生产域、制造域;有的是建了集团级的统一的主数据;有的还建了分级的主数据。
yuanyi928
2021/03/10
7190
主数据建设的挑战与发展
数字化时代,传统IT和数字型IT能否严格区分?
数字化转型这个话题可谓是老生常谈了,2021年我国颁布了《“十四五”规划纲要》,将“数字化转型”定为国家产业发展的重要方向。
嘉为蓝鲸
2022/08/29
6520
数字化时代,传统IT和数字型IT能否严格区分?
2022爱分析·数据智能应用实践报告
为解决数据类型丰富、数据体量倍增带来的存储问题,同时满足人工智能、机器学习在趋势预测、探索分析等方面的应用需求,同时配置数据仓库、数据湖成为企业的普遍选择。然而企业逐渐发现多架构的配置并不完美,解决既有问题的同时带来新的架构问题,如数据流通低效、数据冗余以及存储成本高。
爱分析ifenxi
2022/09/07
9620
2022爱分析·数据智能应用实践报告
谈MDM主数据管理系统设计和实现关键点
主数据是描述核心业务实体(如客户、供应商、地点、产品和库存)的一个或多个属性。所以主数据即是在进行企业业务架构分析中发现的核心业务对象。或者讲主数据是企业已经存在的涉及到价值链核心业务流程的各个IT系统的基础数据。
物流IT圈
2023/03/10
4.4K0
谈MDM主数据管理系统设计和实现关键点
数字化时代再提业务平台化
2020年,受到“黑天鹅”事件的影响,数字化加速进入各行业、企业的战略主航道。通过数字化进行业务重塑和创新,成为企业新的发力点和主战场。ThoughtWorks作为一家数字原生型咨询公司,在广泛的实践中,洞察出“业务平台化”再次成为企业数字化建设中的关键领域之一。
ThoughtWorks
2021/04/16
8600
数字化时代再提业务平台化
2022爱分析·国央企数字化实践报告
政策需要:加快推进国有企业数字化转型已然成为“十四五”时期重要工作之一,因国有经济是国民经济的主导力量,国央企则拥有更多使命特征,更是在数字化市场中催生出一批具有国央企特色化的解决方案,这些解决方案的技术能力与产品多具备异业迁移和能力整合的特点,例如数字化监督、数字融媒体等。
爱分析ifenxi
2022/07/08
1.2K0
2022爱分析·国央企数字化实践报告
国央企用泛微建立跨系统、跨部门的主数据管理系统
数据治理是国央企在数字化转型中的重要内容。2020年国务院国资委办公厅发布《关于加快推进国有企业数字化转型工作的通知》中要求:加快集团数据治理体系建设,明确数据治理归口管理部门,加强数据标准化、元数据和主数据管理工作,定期评估数据治理能力成熟度。
泛微移动办公
2023/06/29
4310
国央企用泛微建立跨系统、跨部门的主数据管理系统
建设数据资产一体化管控体系,某大型医药集团实现数据长效赋能业务发展 | 案例研究
某大型医药集团成立于1994年,是一家植根中国、创新驱动的全球化医药健康产业集团,业务覆盖制药、医疗器械、医学诊断、医疗健康服务、医药商业等医药健康全产业链。
爱分析ifenxi
2023/04/14
3340
全面解读数字化中台!
👆点击“博文视点Broadview”,获取更多书讯 面临时代的新挑战,好的企业都在加速拥抱并推进中台的建设。那么中台到底是什么呢? 01 中台是什么 要想真正理解中台,需要以三位一体的视角去解读(如图1所示),否则看到的中台都是相对片面的。 图1  三位一体的视角 ▊ 中台是一种业务和组织形态 阿里巴巴、腾讯等大公司在推出中台战略时,向外展现的都是对组织的调整,并形成“大中台+小前台”的“前台—中台—后台”的组织架构,这也是中台可以在企业深度落地的前提。 知名企业的组织调整总是能够吸引社会公众的关注。
博文视点Broadview
2023/05/06
1.1K1
全面解读数字化中台!
2021爱分析・数据智能平台实践报告-重构数据智能时代的数据基础设施
数据平台是支撑企业数字化转型,实现数据分析和数据应用的底层基础设施。通过应用数据平台,企业能够实现精细化运营,从而降低运营成本、提高运营效率、提升创新能力。
爱分析ifenxi
2021/12/01
1.1K0
2021爱分析・数据智能平台实践报告-重构数据智能时代的数据基础设施
以数为擎,数字化助力药企开辟提质增效新路径|爱分析报告
面对经营利润持续承压、合规监管日益趋严,医药企业数字化转型进入快速发展期,并带来新的数字化需求。
爱分析ifenxi
2023/09/14
4570
以数为擎,数字化助力药企开辟提质增效新路径|爱分析报告
主数据管理平台产品功能组成架构
主数据是在各业务系统均被使用、共享性极高的一些数据,满足跨部门跨业务协同使用,反映核心业务实体状态属性的组织机构的基础信息,属于事务性数据。典型的主数据包括客户、产品、组织机构、物料、财务科目、人员等。
数据狗忙忙忙
2022/09/21
1.6K0
主数据管理平台产品功能组成架构
推荐阅读
相关推荐
主数据:为何成为制造业数字化转型的“秘密武器”
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档