当前位置: 首页 > news >正文

目标检测中的非极大值抑制(NMS):步骤与Python实现

目标检测中的非极大值抑制(NMS):步骤与Python实现

非极大值抑制(Non-Maximum Suppression, NMS)是目标检测中用于去除多余边界框的关键步骤。在目标检测任务中,模型通常会为每个目标预测多个边界框,这些边界框可能会有重叠。NMS通过保留最佳的边界框并移除其他重叠的边界框来减少冗余。

NMS的步骤

  1. 置信度排序:按照每个边界框的置信度(通常是物体存在的得分)进行降序排序。
  2. 选择最高得分的边界框:从排序后的列表中选择置信度最高的边界框,将其添加到最终的检测结果中。
  3. 计算交并比(IoU):对于剩余的每个边界框,计算它与已选择边界框的IoU。
  4. 移除重叠边界框:如果某个边界框与已选择的边界框的IoU超过了预设的阈值(如0.5),则认为这两个框表示的是同一个目标,移除置信度较低的边界框。
  5. 重复:继续选择剩余边界框中置信度最高的,重复计算IoU和移除过程,直到所有边界框都被检查过。

NMS的Python实现

以下是使用Python和NumPy库实现NMS的示例代码:

import numpy as np

def iou(boxA, boxB):
    # 计算两个边界框的交集
    xA = max(boxA[0], boxB[0])
    yA = max(boxA[1], boxB[1])
    xB = min(boxA[2], boxB[2])
    yB = min(boxA[3], boxB[3])
    interArea = max(0, xB - xA) * max(0, yB - yA)
    boxAArea = (boxA[2] - boxA[0]) * (boxA[3] - boxA[1])
    boxBArea = (boxB[2] - boxB[0]) * (boxB[3] - boxB[1])
    iou = interArea / float(boxAArea + boxBArea - interArea)
    return iou

def non_max_suppression(boxes, scores, iou_threshold=0.5):
    """
    非极大值抑制
    boxes: 边界框列表,每个框是一个[x1, y1, x2, y2]的数组
    scores: 每个边界框对应的得分列表
    iou_threshold: IoU阈值
    """
    # 按得分排序
    idxs = np.argsort(scores)[::-1]
    selected = []

    while len(idxs) > 0:
        # 选取得分最高的边界框
        current = idxs[0]
        selected.append(current)
        # 计算与其他边界框的IoU
        for i in range(1, len(idxs)):
            if iou(boxes[current], boxes[idxs[i]]) > iou_threshold:
                break
        else:  # 如果没有超过阈值的框,继续
            idxs = idxs[1:]
    return selected

# 示例数据
boxes = np.array([[100, 100, 210, 210], [120, 120, 220, 220], [150, 150, 250, 250]])
scores = np.array([0.9, 0.8, 0.7])
selected_boxes = non_max_suppression(boxes, scores, iou_threshold=0.5)
print("Selected boxes:", selected_boxes)

在这段代码中,我们首先定义了一个函数iou来计算两个边界框的交并比。然后,我们实现了non_max_suppression函数,它接受边界框列表、得分列表和一个IoU阈值,返回经过NMS处理后的边界框索引列表。

结论

NMS是目标检测中不可或缺的一步,它通过移除多余的边界框来提高检测的准确性。通过上述代码示例,我们可以在Python中轻松实现NMS算法,以优化目标检测模型的性能。

✅作者简介:热爱科研的人工智能开发者,修心和技术同步精进

❤欢迎关注我的知乎:对error视而不见

代码获取、问题探讨及文章转载可私信。

☁ 愿你的生命中有够多的云翳,来造就一个美丽的黄昏。

🍎获取更多人工智能资料可点击链接进群领取,谢谢支持!👇

点击领取更多详细资料

相关文章:

  • 乐观锁、悲观锁
  • 容器技术--Dockerfile 构建镜像
  • 【有啥问啥】弱监督学习新突破:格灵深瞳多标签聚类辨别(Multi-Label Clustering and Discrimination, MLCD)方法
  • Linux内核启动流程
  • 如何编写ChatGPT提示词
  • 前端面试记录
  • mysql学习教程,从入门到精通,SQL 更新数据(UPDATE 语句)(17)
  • OpenAI o1-preview和o1-mini现已在 GitHub Copilot和GitHub Models中提供
  • Linux 防火墙:iptables (二)
  • 第二十节:学习Redis缓存数据库实现增删改查(自学Spring boot 3.x的第五天)
  • Dubbo3序列化安全问题
  • 【有啥问啥】OpenAI o1的思考之前训练扩展定律、后训练扩展定律与推理扩展定律:原理与应用详解
  • CentOS7更换阿里云yum更新源
  • Python习题 191:将英文句子转为每个单词组成的列表
  • 从 HDFS 迁移到 MinIO 企业对象存储
  • (2)leetcode 234.回文链表 141.环形链表
  • 【最佳实践】配置类封装-RestTemplate详解
  • 【C/C++语言系列】浅拷贝和深拷贝
  • 动手学深度学习(五)循环神经网络RNN
  • Docker实操:安装MySQL5.7详解(保姆级教程)
  • 美政府以拨款为要挟胁迫各州服从移民政策,20个州联合起诉
  • “救护车”半路加价?陕西卫健委已介入,记者调查:黑救护车挤占市场
  • 比特币挖矿公司GRYP股价涨超171%:将与特朗普儿子创设的公司合并
  • 专访|日本驻华大使金杉宪治:对美、对华外交必须在保持平衡的基础上稳步推进
  • 专访|家人眼中的周碧初:用色彩写诗,实践油画“民族化”
  • 马鞍山市原常务副市长黄化锋一审获刑11年,涉案金额三千余万元