浅析解析 3D NMS 算法及实现

深入解析 3D NMS 算法及实现

在 3D 目标检测任务中,如基于点云的物体检测或 3D 边界框回归,深度学习模型通常会输出一组重叠的 3D 边界框。这些框可能包含冗余的预测,因此需要通过非极大值抑制(Non-Maximum Suppression,NMS)来筛选出最优的检测结果。本文将详细介绍如何实现 3D NMS 算法,并展示修正后的代码实现。


什么是 3D NMS?

NMS 是一种常用的后处理算法,目的是从一组重叠的边界框中选择出最优的框,通常基于它们的置信分数。对于 3D NMS,我们将考虑 3D 边界框之间的交并比(IoU, Intersection over Union),并利用其来筛选掉冗余的框。

基本原理

  1. 输入:一组 3D 边界框及对应的置信分数。
  2. 输出:筛选后的 3D 边界框。
  3. 步骤
    1. 按照置信分数对边界框进行降序排序。
    2. 依次选择得分最高的框,并与剩余框计算 IoU。
    3. 移除与当前框重叠度高于给定阈值的框。
    4. 重复上述过程,直到所有框都被处理完。

3D NMS 的关键部分

1. 3D IoU 的计算

IoU 是 NMS 算法的核心,用来衡量两个 3D 边界框的重叠度。在 3D 空间中,IoU 的计算不仅仅是计算 2D 面积的交并比,更要涉及到体积的计算。具体来说,IoU 的计算包括以下步骤:

  • 交集体积:计算两个框在宽度(w)、高度(h)和深度(d)三个方向上的重叠部分,并求得交集体积。
  • 并集体积:并集体积是两个框的体积之和减去交集体积。

交集体积公式:
V intersection = max ⁡ ( 0 , x max_inter − x min_inter ) ⋅ max ⁡ ( 0 , y max_inter − y min_inter ) ⋅ max ⁡ ( 0 , z max_inter − z min_inter ) V_{\text{intersection}} = \max(0, x_{\text{max\_inter}} - x_{\text{min\_inter}}) \cdot \max(0, y_{\text{max\_inter}} - y_{\text{min\_inter}}) \cdot \max(0, z_{\text{max\_inter}} - z_{\text{min\_inter}}) Vintersection=max(0,xmax_interxmin_inter)max(0,ymax_interymin_inter)max(0,zmax_interzmin_inter)

并集体积公式:
V union = V box1 + V box2 − V intersection V_{\text{union}} = V_{\text{box1}} + V_{\text{box2}} - V_{\text{intersection}} Vunion=Vbox1+Vbox2Vintersection

2. 处理特殊情况

在实际应用中,可能会遇到以下两种情况:

  1. 交集体积为 0:如果两个框没有交集,IoU 应直接返回 0
  2. 框为空或无效:如果其中一个框为空,IoU 也应直接返回 0

3D NMS 的代码实现

计算 3D IoU

def compute_3d_iou(box1, box2):
    """
    计算两个3D边界框的IoU(假设无旋转)
    :param box1: [x, y, z, w, h, d] 第一个框的中心坐标和尺寸
    :param box2: [x, y, z, w, h, d] 第二个框的中心坐标和尺寸
    :return: IoU 值
    """
    # 如果 box2 为空,直接返回 IoU = 0
    if box2 is None or len(box2) == 0:
        return 0.0

    # 计算交集体积
    inter_w = max(0, min(box1[0] + box1[3]/2, box2[0] + box2[3]/2) - max(box1[0] - box1[3]/2, box2[0] - box2[3]/2))
    inter_h = max(0, min(box1[1] + box1[4]/2, box2[1] + box2[4]/2) - max(box1[1] - box1[4]/2, box2[1] - box2[4]/2))
    inter_d = max(0, min(box1[2] + box1[5]/2, box2[2] + box2[5]/2) - max(box1[2] - box1[5]/2, box2[2] - box2[5]/2))
    inter_volume = inter_w * inter_h * inter_d

    # 如果交集体积为 0,直接返回 IoU = 0
    if inter_volume == 0:
        return 0.0

    # 计算并集体积
    volume1 = box1[3] * box1[4] * box1[5]
    volume2 = box2[3] * box2[4] * box2[5]
    union_volume = volume1 + volume2 - inter_volume

    # 返回交并比
    return inter_volume / union_volume

3D NMS 的实现

def nms_3d(boxes, scores, iou_threshold):
    """
    3D NMS 算法
    :param boxes: List of [x, y, z, w, h, d], 所有边界框
    :param scores: List of float, 每个框的置信分数
    :param iou_threshold: float, IoU 阈值
    :return: 保留框的索引列表
    """
    # 按得分排序
    indices = sorted(range(len(scores)), key=lambda i: scores[i], reverse=True)
    selected_indices = []

    while len(indices) > 0:
        # 当前最高分框
        current = indices[0]
        selected_indices.append(current)
        
        # 剩余框
        rest_indices = indices[1:]
        
        # 计算 IoU,并筛选 IoU 小于阈值的框
        ious = np.array([compute_3d_iou(boxes[current], boxes[i]) for i in rest_indices])
        indices = [rest_indices[i] for i in range(len(ious)) if ious[i] < iou_threshold]

    return selected_indices

代码详解

  1. compute_3d_iou

    • 该函数计算两个 3D 边界框的交并比(IoU)。
    • 我们首先计算交集体积,并且在交集体积为 0 时返回 IoU 为 0。
    • 然后我们计算并集体积,最后返回交并比。
  2. nms_3d

    • 该函数执行 3D NMS 操作。
    • 首先按照置信分数对所有框进行排序,然后依次选择得分最高的框,并与其他框计算 IoU,筛选掉 IoU 大于给定阈值的框。

算法的优点

  • 鲁棒性:修正后的代码通过处理交集体积为 0 的情况,避免了无效框的干扰,确保算法稳定性。
  • 高效性:通过排序和 IoU 筛选机制,逐步剔除冗余框,从而提高了算法的执行效率。
  • 通用性:该算法适用于任何类型的 3D 边界框,能够处理不同尺寸和形状的框。

算法应用

3D NMS 算法广泛应用于点云处理、自动驾驶和机器人感知等领域,特别是在 3D 目标检测任务中,如 LiDAR 数据检测三维物体识别。通过 NMS,我们可以从大量的预测框中筛选出最优的框,提升最终的检测精度和性能。


总结

3D NMS 是 3D 目标检测模型后处理的核心步骤。本文对 3D NMS 算法的原理和实现进行了详细的讲解,并修正了交并比计算中的逻辑错误,确保了算法的正确性与高效性。通过合理的优化和改进,这种算法可以很好地应用于实际的 3D 目标检测任务中。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/921047.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【架构】主流企业架构Zachman、ToGAF、FEA、DoDAF介绍

文章目录 前言一、Zachman架构二、ToGAF架构三、FEA架构四、DoDAF 前言 企业架构&#xff08;Enterprise Architecture&#xff0c;EA&#xff09;是指企业在信息技术和业务流程方面的整体设计和规划。 最近接触到“企业架构”这个概念&#xff0c;转念一想必定和我们软件架构…

vue3:使用插件递归组件

vue3:使用插件递归组件 首先安装插件 npm i unplugin-vue-define-optionsvite.config.ts 配置插件 // vite.config.ts// 引入 unplugin-vue-define-options import DefineOptions from "unplugin-vue-define-options"; export default defineConfig({// 注册插件 De…

开源远程桌面工具:RustDesk

在远程办公和远程学习日益普及的今天&#xff0c;我们经常需要远程访问办公电脑或帮助他人解决电脑问题。 市面上的远程控制软件要么收费昂贵&#xff0c;要么需要复杂的配置&#xff0c;更让人担心的是数据安全问题。 最近我发现了一款名为 RustDesk 的开源远程桌面工具&…

springboot整合hive

springboot整合hive pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.…

ChatGPT 与其他 AI 技术在短视频营销中的技术应用与协同策略

摘要&#xff1a; 本文深入探讨了 ChatGPT 及其他 AI 技术在短视频营销中的应用。从技术层面剖析了这些技术如何助力短视频内容创作、个性化推荐、用户互动以及营销效果评估等多方面&#xff0c;通过具体方法分析、数据引用与大模型工具介绍&#xff0c;旨在为短视频营销领域提…

国土安全部发布关键基础设施安全人工智能框架

美国国土安全部 (DHS) 发布建议&#xff0c;概述如何在关键基础设施中安全开发和部署人工智能 (AI)。 https://www.dhs.gov/news/2024/11/14/groundbreaking-framework-safe-and-secure-deployment-ai-critical-infrastructure 关键基础设施中人工智能的角色和职责框架 https:/…

xtu oj 前缀和

样例输入 3 3 2 1 2 3 1 2 3 2 1 2 3 -1 -2 3 3 -4 3 1 4 2 1 样例输出 0 3 3 解题思路&#xff1a;排序前缀和二分查找 因为数组b是可以插入到数组a任意位置&#xff0c;要想k最大&#xff0c;就要尽可能把b的小数插到a数组的前面。所以&#xff0c;用qsort方法对数组b进…

Nexus搭建go私有仓库,加速下载go依赖包

一、搭建go私库 本文我们梳理一下go依赖包的私库搭建以及使用。 它只分为proxy和group两种仓库&#xff0c;这一点和maven仓库有所不同。 1、创建Blob Stores 为了区分不同的私库依赖包&#xff0c;存储的位置分隔开。 2、新建go proxy官网 Remote storage&#xff1a;htt…

CPU算法分析LiteAIServer摄像机实时接入分析平台固废检测算法助力环保

随着城市化进程的加速和工业化发展的不断深入&#xff0c;固体废弃物的处理问题逐渐成为了一个全球性的挑战。传统的固废检测方法主要依赖于人工巡查和抽样检测&#xff0c;这种方式不仅效率低下&#xff0c;而且难以实现对固体废弃物的全面覆盖和实时监测。为了解决这一问题&a…

国内镜像android studio

Android SDK在线更新镜像服务器 1.中国科学院协会镜像站: 部分地区无法使用 ◦IPV4/IPV6: mirrors.opencas.cn 端口&#xff1a;80 ◦IPV4/IPV6: mirrors.opencas.org 端口&#xff1a;80 ◦IPV4/IPV6: mirrors.opencas.ac.cn 端口&#xff1a;80 2.上海GDG镜像服务器地址…

Ubuntu上安装MySQL并且实现远程登录

目录 下载网络工具 查看网络连接 更新系统软件包&#xff1b; 安装mysql数据库 查看mysql数据库状态 以数字ip形式显示mysql的监听状态。&#xff08;默认监听端口是3306&#xff09; 查看安装mysql数据库时系统创建的目录信息。 根据查询到的系统用户名以及随机密码&a…

从零开始认识显卡

显卡&#xff08;GPU&#xff0c;全称为Graphics Processing Unit&#xff09;&#xff0c;是电脑中专门负责图形处理的硬件组件。以下是从零开始认识显卡的简单介绍&#xff1a; 1. 显卡的基本组成 显卡通常由以下几个主要部分组成&#xff1a; GPU核心&#xff1a;显卡的“…

mac安装Pytest、Allure、brew

安装环境 安装pytest 命令 pip3 install pytest 安装allure 命令&#xff1a;brew install allure 好吧 那我们在安装allure之前 我们先安装brew 安装brew 去了官网复制了命令 还是无法下载 如果你们也和我一样可以用这个方法哦 使用国内的代码仓库来执行brew的安装脚本…

【Vue】 npm install amap-js-api-loader指南

前言 项目中的地图模块突然打不开了 正文 版本太低了&#xff0c;而且Vue项目就应该正经走项目流程啊喂&#xff01; npm i amap/amap-jsapi-loader --save 官方说这样执行完&#xff0c;就这结束啦&#xff01;它结束了&#xff0c;我还没有&#xff0c;不然不可能记录这篇文…

三极管工作原理,以及小电流,如何驱动大电流

因为研究【自动下载电路实现】&#xff0c;涉及到三极管内容&#xff0c;之前看过&#xff0c;现在回看之前的笔记&#xff0c;一点印象都没了&#xff0c;于是&#xff0c;想了个办法&#xff0c;记住它 个人联想&#xff0c;不喜绕道&#xff0c;只是帮助个人记忆的 标题也是…

一文了解倾斜摄影

倾斜摄影是通过从一个垂直、四个倾斜、五个不同的视角同步采集影像&#xff0c;获取到丰富的建筑物顶面及侧视的高分辨率纹理。它不仅能够真实地反映地物情况&#xff0c;高精度地获取物方纹理信息&#xff0c;还可通过先进的定位、融合、建模等技术&#xff0c;生成真实的三维…

浅谈,华为切入具身智能赛道

近期&#xff0c;全球具身智能大模型&#xff08;机器人“通用大脑”&#xff09;赛道热闹非凡&#xff0c;科技大厂、初创公司接连发布重磅消息。 国外&#xff1a; 10月底&#xff0c;美国科技巨头【Meta】旗下基础人工智能研究 &#xff08;FAIR&#xff09;公布公司触摸感…

Spring |(二)IOC相关内容 | bean

文章目录 &#x1f4da;bean基础配置&#x1f407;bean的id和class&#x1f407;bean的name属性&#x1f407;bean作用范围scope配置&#x1f407;bean基础配置小结 &#x1f4da;bean实例化&#x1f407;构造方法实例化&#xff08;常用&#xff09;&#x1f407;静态工厂实例…

网络安全-企业环境渗透2-wordpress任意文件读FFmpeg任意文件读

一、 实验名称 企业环境渗透2 二、 实验目的 【实验描述】 操作机的操作系统是kali 进入系统后默认是命令行界面 输入startx命令即可打开图形界面。 所有需要用到的信息和工具都放在了/home/Hack 目录下。 本实验的任务是通过外网的两个主机通过代理渗透到内网的两个主机。…

Java 对象头、Mark Word、monitor与synchronized关联关系以及synchronized锁优化

1. 对象在内存中的布局分为三块区域&#xff1a; &#xff08;1&#xff09;对象头&#xff08;Mark Word、元数据指针和数组长度&#xff09; 对象头&#xff1a;在32位虚拟机中&#xff0c;1个机器码等于4字节&#xff0c;也就是32bit&#xff0c;在64位虚拟机中&#xff0…