3D点云处理的并行化

在我们的项目中,我们研究了数百万级 3D 点云上的空间局部计算,并提出了两种主要方法,可以提高 GPU 的速度/吞吐量,同时保持最终结果的性能准确性。

通过空间局部,我们的意思是每个像素独立地基于其局部邻域中的点执行计算。我们想在这里强调两个主要贡献。首先,我们展示了近似局部邻域到 CUDA 线程块的映射,以在保持准确性的同时加速 GPU 吞吐量。其次,我们实现了本文提出的轮廓保留重采样器的快速并行版本,以对点云进行二次采样(仅保留 5% 的点效果很好!),同时保留重要特征。这有助于减轻高冗余的成本,同时仍然保持输出精度。

NSDT工具推荐: Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编辑器 - REVIT导出3D模型插件 - 3D模型语义搜索引擎 - Three.js虚拟轴心开发包 - 3D模型在线减面 - STL模型在线切割

具体来说,我们选择研究分割的关键问题,这是许多计算机视觉应用程序流程中的重要一步。即,将点云“聚类”成多个同质区域,同一区域内的点将具有相同的属性。这个问题在机器人技术中有很多应用,如智能车辆、自主测绘、导航、家务劳动等。点云是一个特殊的挑战,因为它们通常具有不均匀的点密度、高冗余,并且含有许多异常值。

由于尚不清楚评估分割的最佳“指标”是什么,因此我们构建了一个简单的对象检测器(通过计算特征并在预先计算的对象特征数据库中查找最近邻居)。在较高的层面上,如果它能够可靠地检测我们训练过的对象,我们就说分割质量很好。我们想在这里强调,对象检测不是我们项目的主要焦点。相反,我们展示了如何在 GPU 上快速处理点云数据。

我们主要使用 RGB-D 对象数据库,其中包含具有如下所示对象的场景点云以及我们用来训练特征的对象本身的模型(使用点云库):

1、设计方案A

初步设计的框图如上。我们使用快速移位算法来执行图像分割。由于其计算特性和内存访问模式,它适合并行性,如下所述:

1.1 快速移位细分

快速移位分割(fast shift segmentation)分两步进行,它首先计算局部密度估计,然后将父节点分配给每个节点。这两个步骤都是空间局部的,因为每个点都通过迭代其局部邻域来执行计算。我们选择邻域大小不仅是为了确保准确性,也是为了控制分割的粒度。

function compute_density() {for each point p in pointcloud:for each neighbor x in neighborhood(p):density[p] += dist_estimate(p,x);endend
}
function construct_tree(){for each point p in pointcloud:for each neighbor x in neighborhood(p):if(density[x] > density[p] && dist(x,p) < min_dist)parents[p] = x;min_dist = dist(x,p)endend
}

1.2 实现细节

第一个贡献是利用计算的空间局部特征来体素化点云并将每个体素映射到 CUDA 线程块。这样,体素中的每个点都会对其邻域执行相同的计算,并拥有相同的内存访问模式。对原始框架的这种更改使其非常适合快速 CUDA 实现。我们通过立方点云的最小边界框来进行体素化。体素的邻域是它的邻近体素。

我们注意到,为了公平地与顺序版本进行比较,我们使用 k-d 树(对于空间本地数据访问有效)来存储点云。

2、设计方案B

在我们的第一次设计之后,我们希望通过利用点云中的冗余来加速分割。即我们问,我们处理的点是否超出了我们需要的数量?

在这里,我们介绍我们的第二个主要贡献,即我们设计中的重采样块。采样步骤分两个阶段进行,我们首先需要为每个点分配一个重要性权重(实际上是一个局部高通滤波器,又是一个空间局部计算),然后再对点进行加权采样。

后者可以借助 CUDA thrust库快速实现。事实证明,我们可以通过保留最多 5% 的总点数来进行二次采样,并保持检测性能。

2.1 重要性权重采样算法

下面我们展示了非常基本的伪代码来展示权重分配算法的结构。如下所示,权重计算又是空间局部计算,因为每个点都会迭代其局部邻域来计算其重要性权重。

function compute_weight() {for each point p in pointcloud:weighted_sum =0; for each neighbor x in neighborhood(p):weighted_sum += weighted_neighbor(p,x);endweight[p] = dist(x, weighted_sum)end
}

然后我们根据这些权重对点进行采样。我们在这里提到一个警告;也就是说,我们基于 CPU 的加权顺序采样器以 O(KN)(K 是样本数)简单地执行采样。 采样器预先计算归一化权重的滚动总和,然后对均匀随机数进行采样并查看它落在哪个容器中(二分搜索)。

虽然我们在 CUDA 上实现相同的算法来执行采样,但这并不是在 CPU 上执行加权采样的最快方法。更快的基于 CPU 的实现将基于 Alias-Walker 方法,该方法的采样时间为 O(K+N)。另一个有趣的点是采样器有助于平滑空间中不均匀的点密度。

3、性能评估

下面是厨房场景分割结果的图像。原始点云大约有 300 万个点,我们只保留 80000 个样本。

我们还使用点云分割框架生成的片段显示了谷物盒的对象检测阶段的输出。报告的结果对应于在 GHC 集群上运行我们的实现,该集群具有 8 个用于多线程实现的 2 路超线程核心,以及具有 CUDA 功能 6.0 的 NVidia GeForce GTX1080 GPU。

3.1 GPU vs. CPU

我们的主要重点是最大化 GPU 上的分段吞吐量,因此,尽管我们使用 openMP 编译指令优化了 CPU 实现以在 16 个线程上运行,但它仍然不是最佳的 CPU 实现。

下图比较了我们的 openMP 和 CUDA 实现的分割过程的各个计算步骤的运行时间。 CUDA 实现相对于 openMP 实现的整体加速从 10 万点的 8 倍增加到 200 万点的约 20 倍。这种加速比的非线性增加与我们的预期是同步的,因为增加点的数量会增加点密度,从而以立方顺序增加每个体素的计算。此外,由于我们使用高度优化的推力库函数进行并行扫描和收集操作,因此采样步骤的加速比超过 1000 倍。

3.2 采样 vs. 不采样

该图比较了多线程 openMP 实现中带采样和不带采样的 CUDA 加速情况。如果不进行采样,CUDA 实现的速度仅提高 2 倍,但是将采样步骤合并到 CUDA 中可将速度提高约 20 倍。

我们注意到,与分割块的大幅加速相比,采样的开销在很大程度上可以忽略不计。我们注意到,我们采样了从 10k 到 100k 点的一系列点,这保留了检测性能。此外,在进行粗分割时,采样特别有用,因为我们需要搜索更大的邻域,更高的密度意味着极其昂贵的计算。

3.3 与图像分割的比较

与表现出高度不规则性的点云相反,图像是高度规则的。在这里,我们打算分析空间中点的密度不均匀对我们的性能有多大影响。这种不均匀性会影响每个块/体素处理的点数,进而导致工作负载不平衡模式极度倾斜。我们均衡图像中的像素数量和点云中的点数以进行公平比较。

图像分割示例,原始图像和分割图像:

4、结束语

我们研究了点云的快速并行分割问题,并实现了能够在几秒钟内分割由数百万个点组成的点云的框架。

具体来说,我们设计了多线程 CPU 和优化的 GPU 实现,这使我们的速度提高了 20 倍左右。一个关键的贡献是在实际分割之前合并了子采样阶段,这有助于进一步加速分割阶段而不影响分割质量。


原文链接:3D点云处理的并行化 - BimAnt

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【3D目标检测】常见相关指标说明

一、mAP指标 mean Average Precision&#xff08;平均精度均值&#xff09;&#xff0c;它是目标检测和信息检索等任务中的重要性能指标。mAP 通过综合考虑精度和召回率来衡量模型的总体性能。 1.1 精度&#xff08;Precision&#xff09; 表示检索到的目标中实际为正确目标…

数据库大作业——基于qt开发的图书管理系统(二) 相关表结构的设计

前言 在上一篇文章中。我们完成了Qt环境的安装&#xff0c;同时完成了有关项目需求的分析并绘制了整体的项目架构图&#xff0c;而在图书管理系统中&#xff0c;其实我们主要完成的就是对数据的增删改查&#xff0c;并将这些功能通过信号与槽机制和可视化界面绑定在一起&#…

二、双fifo流水线操作——verilog练习与设计

文章目录 一、案例分析二、fifo_ctrl模块设计2.1 波形设计&#xff1a;2.2 代码实现2.2.1 fifo_ctrl2.2.2 顶层文件top_fifo_ctrl&#xff08;rx和tx模块省略&#xff09;2.2.3 仿真文件tb_fifo_ctrl 2.3波形仿真 一、案例分析 案例要求&#xff1a;写一个 fifo 控制器&#x…

WSL安装及使用

一、强烈推荐使用win11系统 二、优先参考官方链接 Install WSL | Microsoft Learn 三、其次参考链接 Manual installation steps for older versions of WSL | Microsoft Learn 四、本次测试安装过程记录 1:准备工作 Step 1 - Enable the Windows Subsystem for Linux dism.ex…

探索网站支付系统的奥秘,从Vue3和Spring Boot开始(入门级项目实战+在线教程)附赠项目源码!

你是否曾经在购物时&#xff0c;对着电脑屏幕前的“支付成功”四个字感到好奇&#xff1f;这背后的秘密究竟是什么&#xff1f; 今天&#xff0c;让我们一起揭开支付系统的神秘面纱&#xff0c;探索其背后的技术实现。 在这个基于Vue3和Spring Boot的支付项目实战中&#xff…

网贷大数据查询要怎么保证准确性?

相信现在不少人都听说过什么是网贷大数据&#xff0c;但还有很多人都会将它跟征信混为一谈&#xff0c;其实两者有本质上的区别&#xff0c;那网贷大数据查询要怎么保证准确性呢?本文将为大家总结几点&#xff0c;感兴趣的朋友不妨去看看。 想要保证网贷大数据查询的准确度&am…

经常使用的正则分割

背景&#xff1a; 工作中经常需要对一串数据进行分割&#xff0c;最简单的办法就是使用正则表达式。 常见符号&#xff1a; \&#xff1a;\后跟一个特殊字符&#xff0c;表示匹配这个字符&#xff0c;例如\$&#xff0c;表示匹配数据中的$。 ^&#xff1a;^后跟一个特殊字符&a…

virtualbox kafka nat + host-only集群 + windows 外网 多网卡

virtualbox kafka nat + host-only集群 + windows 映射访问 kafka集群搭建背景kafka集群搭建 背景 使用virtualbox搭建kafka集群,涉及到不同网络策略的取舍 首先 桥接 网络虽说 啥都可以,但是涉及到过多ip的时候,而且还不能保证使用的ip不被占用,所以个人选择kafka虚拟机…

用龙梦迷你电脑福珑2.0做web服务器

用龙梦迷你电脑福珑2.0上做web服务器是可行的。已将一个网站源码放到该电脑&#xff0c;在局域网里可以访问网站网页。另外通过在同一局域网内的一台windows10电脑上安装花生壳软件&#xff0c;也可以在外网访问该内网服务器网站网页。该电脑的操作系统属于LAMP。在该电脑上安装…

Mysql报错红温集锦(一)(ipynb配置、pymysql登录、密码带@、to_sql如何加速、触发器SIGNAL阻止插入数据)

一、jupyter notebook无法使用%sql来添加sql代码 可能原因&#xff1a; 1、没装jupyter和notebook库、没装ipython-sql库 pip install jupyter notebook ipython-sql 另外如果是vscode的话还需要安装一些相关的插件 2、没load_ext %load_ext sql 3、没正确的登录到mysql…

短视频矩阵系统源码/saas--总后台端、商户端、代理端、源头开发

短视频矩阵系统源码/saas--总后台端、商户端、代理端、源头开发 搭建短视频矩阵系统源码的交付步骤可以概括为以下几个关键环节&#xff1a; 1. **系统需求分析**&#xff1a;明确系统需要支持的功能&#xff0c;如短视频的上传、存储、播放、分享、评论、点赞等。 2. **技术选…

计算机体系结构:6、指令流水线

6.指令流水线 6.1 流水线概述 6.1.1 流水线的执行效率 ​ 一条指令的执行过程可被分为若干阶段&#xff0c;每个阶段由相应的功能部件完成。一般而言&#xff0c;一条指令的流水线由如下5个流水段组成&#xff1a; 取指令(IF):从存储器取指令指令译码(ID):产生指令执行所需…

QLabel 如何同时显示图片和文字?

效果: align="top"表示图片和文字底部对齐。 img src=":/img/qrc_img.png"表示此图片被添加到qrc的相对路径。 完整: QString content =QString("<html><head/><body><p><img src=\":/img/qrc_img.png\"…

Linux i2c工具——i2c_tools

1 简介 i2c-tools是一个用于处理I2C&#xff08;Inter-Integrated Circuit&#xff09;总线的工具集&#xff0c;它在Linux环境中广泛使用。这个工具集包含了一系列命令行工具&#xff0c;用于在I2C总线上执行各种操作&#xff0c;例如扫描设备、读取/写入寄存器、检测设备等。…

CMakeLists.txt语法规则:部分常用命令说明一

一. 简介 前一篇文章简单介绍了CMakeLists.txt 简单的语法。文章如下&#xff1a; CMakeLists.txt 简单的语法介绍-CSDN博客 接下来对 CMakeLists.txt语法规则进行具体的学习。本文具体学习 CMakeLists.txt语法规则中常用的命令。 二. CMakeLists.txt语法规则&#xff1a;…

二手手机店需要用专业erp软件进行管理吗?

2024年在科技发展迅速的今天&#xff0c;手机批发和零售行业正迎来前所未有的革新。为了在这个变革中抓住机遇&#xff0c;提升竞争力&#xff0c;二手手机店需要寻找一种全面、高效、智能的管理工具。基于这个原因&#xff0c;超机商城为众多二手手机店商家量身打造的一款二手…

掌控网络流量,优化网络性能 - AnaTraf网络流量分析仪登场

在当今日新月异的网络环境中,网络流量监控和性能诊断已成为企业IT部门不可或缺的重要工作。只有充分了解网络流量状况,才能有效优化网络性能,提高业务运营效率。针对这一需求,全新推出的AnaTraf网络流量分析仪应运而生,为企业提供全面的网络监控和性能诊断解决方案。 快速定位…

地道俄语口语,柯桥俄语培训哪家好

1、по-моему 依我看&#xff1b;在我看来 例&#xff1a; По-моему, сегодня будет дождь. 依我看, 今天要下雨。 Сделай по-моему. 按我的办法干吧 2、кажется 似乎是&#xff1b;看起来 例&#xff1a; Парень, …

3D 交互展示该怎么做?

在博维数孪&#xff08;Bowell&#xff09;平台制作3D交互展示的流程相对简单&#xff0c;主要分为以下几个步骤&#xff1a; 1、准备3D模型&#xff1a;首先&#xff0c;你需要有一个3D模型。如果你有3D建模的经验&#xff0c;可以使用3ds Max或Blender等软件自行创建。如果没…

.NET_NLog

步骤 1. 添加依赖 ①Microsoft.Extensions.DependencyInjection ②NLog.Extensions.Logging&#xff08;或Microsoft.Extensions.Logging.___&#xff09; Tutorial NLog/NLog Wiki GitHub 2.添加nlog.config文件(默认名称, 可改为其他名称, 但需要另行配置) 文件的基础…