3D Tiles语义分割流水线

2024-03-19 05:44
文章标签 分割 3d 流水线 语义 tiles

本文主要是介绍3D Tiles语义分割流水线,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Dylan Chua 和 Anne Lee 开发了一个处理管线,用于对 3D Tiles 中包含的 GL 传输格式 (glTF) 模型进行语义分割。 该管道读取并遍历 3D Tileset,以输出包含元数据的经过转换的划分对象集。 该项目为 3D 语义分割器提供了最小可行产品,作为各种应用程序的概念验证。 他们接受模拟和培训系统中心首席工程师 How Chang Hong 的指导。

1、动机

现实世界的当代 3D 表示通常是手工制作且昂贵。 高保真模型还需要较长的生产时间,从而导致完成已经过时的模型。 新加坡的 3D 表示目前以 OneMap 的形式存在,“

权威的新加坡国家地图,包含新加坡土地管理局开发的最详细、最及时的更新信息”。 尽管OneMap中的模型干净而精致,但它缺乏树木和地形高程,更不用说完全没有桥梁等基础设施。

提取自 OneMap 

随着卫星摄影测量的出现,可以以较低的劳动力和资源成本快速构建逼真的地球 3D 模型。 先前的缺点可以通过这些 3D Tiles 的潜在力量来解决,只需很少的时间投资即可构建。 因此,数字孪生可以保持最新。 创建这些 3D 图块的自动性质会导致元数据很少的网格的嘈杂合并。 这就是开发一种处理和分类这些数据的方法的挑战。

2、现有工作

在3D分割领域,现有的分割方法可大致分为以下几类:

  • 多视角:以不同角度渲染物体的2D图像
  • 体块:转换为二元体素
  • 点云:使用顶点
  • 基于网格:使用网格图元

在上述四种技术中,基于“点云”的技术具有最深入的研究。 然而,由于两个主要考虑因素,并未对此进行探讨:

  • 大规模城市网格

3D语义分割领域的现有文献大多主要关注较小规模,例如区分瓶盖等特征或识别房间中家具的类型。 然而,该项目提供的数据类型需要针对大规模城市网格的独特特征量身定制的解决方案。

  • 数据限制

最先进的城市规模 3D 分割系统通常依赖于丰富的点云,这些点云通常使用移动激光扫描、机载激光扫描或 LiDAR 等 3D 激光扫描技术生成。 然而,给出的数据是通过摄影测量生成的。 因此,提供的网格缺乏生成稳健点云所需的细节水平。 在比较 OneMap 和 Google 地图图块的图像时,这种限制很明显,其中植被和建筑物之间的边界往往会混合在一起,并且车辆等伪影仍然存在于数据中。

因此,探索了新的分割方法(在下面的“方法”部分中介绍)。

3、整体管线

本质上,管道使用根tileset JSON并随后遍历tileset树。 每个 3D 模型 — 一个二进制 glTF (.glb) 文件 — 都会被分段,并且其顶点也会被分类。 体现类的元数据可以存储在tileset JSON 中或.glb 文件中。

4、实现方法

我们探索了两种分割 3D 模型的方法

  • 使用纹理图像
  • 基于网格的分割

4.1 图像分割

考虑到要转换的摄影测量 3D Tileset,包含的 3D 对象是附加有照片级真实感纹理的 .glb 文件。 二维图像分割的研究多种多样,并且存在大量训练有素的计算机视觉模型,尤其是在城市景观方面。 因此,可以对这些纹理执行语义分割。

3D模型示例

遗憾的是,由于该项目的持续时间有限,计算机视觉模型没有接受数据训练。 尽管如此,还是使用了基于 Facebook 的Mask2Former构建的预训练语义分割模型。 据报告,该模型的平均交集 (mIoU) 为 57.7,可以将区域标记为“道路”、“建筑物”和“植被”等。 尽管该模型是在城市景观上进行训练的,但与卫星图像得出的纹理有足够的相似性。 图像分割模型的结果如下所示,其中橙色表示建筑物,紫色表示植被。 目视检查显示分割具有足够的性能,将建筑物和植被的明显区域分开。 尽管如此,还是有一些纹理被错误地标记,并且肯定可以通过专门针对纹理的模型训练来改进。

对 3D 模型的纹理执行语义分割。 橙色:建筑; 紫色:植被

4.2 映射到 3D

要将 2D 分割转换为 3D,必须加载 .glb 文件以检索其顶点、面和纹理坐标。 诸如 trimesh 之类的高级库可以轻松获取这些内容,但这会带来数据压缩损失。 每个顶点都有一个各自的 UV 坐标,即一个包含 0 到 1 两个数字的 2D 矢量,对应于纹理上的像素。 因此,顶点可以根据它们在掩模上各自的值进行分类。

4.3 TUDelft 的语义城市网格分割 (SUMS)

另一种探索的方法是使用 TUDelft 制作的鲜为人知的分割工具。 与上述方法的主要区别在于,除了对纹理图像进行图像分割之外,它还会考虑网格特征(例如几何、上下文信息)。 SUMS 由代尔夫特理工大学 (TUDelft) 的 3D 地理信息研究小组构建。 它是一个开源程序,可以对大规模城市网格进行自动语义分割。 他们的 Github 存储库在这里。

SUMS by TUDelft

它主要用 C++ 实现,并利用 CGAL 和 Easy3D 等开源库。

  • 为什么选择SUMS

它提供了一个在精心注释的网格数据集上训练的预训练语义分割模型。 该数据集跨越 1900 万个三角形,覆盖赫尔辛基 4 平方公里的区域,包含城市环境中常见的六种对象类别:地形、高植被、建筑、水、车辆和船只。 重要的是要承认该数据集与数据集之间的相似程度

提供的数据,测试数据与给定数据越接近,模型性能提高的可能性就越高。 SUMS 还提供了通过使用网格注释工具来细化模型的潜力。

  • SUMS — 引擎盖下

其工作原理和技术细节可以在他们的论文中阅读。 本质上,它对网格进行过度分割以对三角形进行分组,识别平面(即平坦)段并提取特征。 然后将这些特征输入随机森林分类器以进行网格分割。

  • 根据给定的数据

提供的数据最初为.glb 格式,但需要转换为.ply 格式以与SUMS 兼容。

文件转换示意

标记的输出如下所示:

从原始 .glb 文件到转换后的 .ply 文件的转换过程以及颜色编码输出

由于 SUMS 在大型城市网格上进行了训练,因此也在更高级别的网格上进行了测试。

低级和高级网格上的 SUMS 检测

下表显示了 SUM 在两种网格上的性能比较。

与低级网格相比,应用于高级网格时,其性能提高了约 4.5 倍,这主要归因于网格与训练 SUMS 所依据的数据的相似性。 在这些输出表示中,每个三角形面都经过颜色编码以表示

其各自的类别或类别。 每个三角形面都包含三个顶点,每个顶点在 3D 空间内都有自己的一组坐标。 每个顶点都被标记以表示其关联的类。

4.4 元数据

等效的元数据可以存储在 3D 模型本身中,也可以存储在包含它的 JSON 文件中。 分层存储如下图所示。 标记要素和顶点必须位于 .glb 文件内,而更高级别的信息属于 3D Tileset JSON 文件。

具有不同级别元数据的 3D Tiles 结构展示

4.5 在 .glb 文件内

通过 glTF 扩展 EXT_MESH_FEATURES ,每个顶点特征可以包含到 .glb 文件本身中。 附录 C 演示了顶点的类如何打包成字节并可以由加载器检索。

单独的顶点语义元数据可以轻松可视化。 可以使用自定义着色器,根据每个顶点的类别赋予不同的外观,例如颜色。 更多细节稍后将在可视化部分中展开。

4.6 在 3D Tileset JSON 中

为了对图块集进行分段,每个 3D 模型都按类别分为多个 .glb 文件。 通过每个顶点的类别,可以选择并提取模型的面。 面的分类可能取决于朝向每个面的顶点的方法。 如果将面按其顶点的每一类进行分类,则保证所有面都被分组,但可能会出现重叠。 相反,分配给所有顶点共有的一个类可以防止重叠,但可能会导致未分类的面。

3D模型与顶点类的分离

由于一个 .glb 模型现在被拆分为多个文件,因此图块必须包含多个内容,每个内容都标有其所属的类。 3D Tiles 1.1 版新支持语义元数据和每个图块的多个内容,而给定的图块集仍为 1.0 版。 此后,需要一个基于 py3dtiles 的 3D Tiles 读取器和导出器。 拆分为多个内容可以对分段模型进行操作。 也就是说,它允许选择特定的类来渲染网格并与其交互。 例如,可以关闭植被,从其中删除分类网格
现场。

4.7 输出

从单个 .glb 文件到整个图块集,为了完全分割 3D Tiles 数据,需要遍历图块集树以找到要分割的 .glb 文件。 由于 3D 图块内容 URI 可能与图块集 JSON 文件相关,因此遍历器会考虑搜索子图块和 .glb 文件的相对路径。 考虑到 3D 文件较大且数量众多,仅处理了数据的子集。 特定感兴趣区域的提取从超过 75,500 个需要分割的 3D 模型减少到仅 174 个。

提取的 3D 图块区域

该管道在 174 个 .glb 文件上运行,只花了不到 5 分钟,平均每个文件大约需要 1.5 秒。 大部分计算时间都花在了机器学习模型上。 第一种方法每个纹理图像大约需要 1 秒。 第二个模型每个网格和相应的纹理图片大约需要 5 秒。

5、可视化

Cesium 是引入 3D Tiles 的平台,也开发了可视化 3D Tiles 的库。 我们特别关注 Web 版的 CesiumJS 和 Unity 版的 Cesium。 在这两种情况下,本地服务器都会提供图块集数据。 使用 Express 的 Node.js Web 应用程序设置了数据路径作为静态目录,允许应用程序托管文件。

CesiumJS 是 Cesium 提供的开源 JavaScript 库,旨在处理海量数据集,广泛用于创建用于共享地理空间数据的交互式 Web 应用程序。

Node.js 应用程序同时提供 HTML 和 JavaScript 文件以可视化浏览器中的数据,并使用 CesiumJS 来提供基于浏览器的可视化工具。

分割后的 3D Tiles 的可视化是通过将自定义着色器输入 CesiumJS 来完成的,该着色器识别每个顶点的类 ID,并为每个类生成唯一的外观。 可以切换该着色器以显示原始纹理或类的颜色。

CesiumJS 中区分建筑物(蓝色)和植被(绿色)的自定义着色器

Cesium 的 Unity 插件有助于在 Unity 中渲染 3D 图块,从而实现交互性并创建沉浸式 VR 体验。 完成此操作的详细过程可以在项目的 GitHub 存储库中找到。 为了导航和探索地图,按照本教程中提供的说明,将人形头像合并到游戏中。 使用 WASD 键可以控制头像。

新加坡碧山的一个人形头像在 3D Tiles中行走

也可以在 Unity 中选择和查看元数据。

Unity 中元数据显示为文本的示例场景

6、结束语

尽管大规模城市纹理的 3D 网格分割是一个相对较新的新兴领域,但我们对执行分割任务的两种不同方法进行了探索:一种依赖于纹理图像分析,另一种采用基于网格的分割方法。

这些方法可以对每个网格内的顶点和面进行分组,从而有助于添加有价值的元数据以增强数据组织和分析。

这篇关于3D Tiles语义分割流水线的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/824986

相关文章

C#中字符串分割的多种方式

《C#中字符串分割的多种方式》在C#编程语言中,字符串处理是日常开发中不可或缺的一部分,字符串分割是处理文本数据时常用的操作,它允许我们将一个长字符串分解成多个子字符串,本文给大家介绍了C#中字符串分... 目录1. 使用 string.Split2. 使用正则表达式 (Regex.Split)3. 使用

无人叉车3d激光slam多房间建图定位异常处理方案-墙体画线地图切分方案

墙体画线地图切分方案 针对问题:墙体两侧特征混淆误匹配,导致建图和定位偏差,表现为过门跳变、外月台走歪等 ·解决思路:预期的根治方案IGICP需要较长时间完成上线,先使用切分地图的工程化方案,即墙体两侧切分为不同地图,在某一侧只使用该侧地图进行定位 方案思路 切分原理:切分地图基于关键帧位置,而非点云。 理论基础:光照是直线的,一帧点云必定只能照射到墙的一侧,无法同时照到两侧实践考虑:关

如何使用Ansible实现CI/CD流水线的自动化

如何使用Ansible实现CI/CD流水线的自动化 持续集成(CI)和持续交付(CD)是现代软件开发过程中的核心实践,它们帮助团队更快地交付高质量的软件。Ansible,作为一个强大的自动化工具,可以在CI/CD流水线中发挥关键作用。本文将详细介绍如何使用Ansible实现CI/CD流水线的自动化,包括设计流水线的结构、配置管理、自动化测试、部署、以及集成Ansible与CI/CD工具(如Jen

MiniGPT-3D, 首个高效的3D点云大语言模型,仅需一张RTX3090显卡,训练一天时间,已开源

项目主页:https://tangyuan96.github.io/minigpt_3d_project_page/ 代码:https://github.com/TangYuan96/MiniGPT-3D 论文:https://arxiv.org/pdf/2405.01413 MiniGPT-3D在多个任务上取得了SoTA,被ACM MM2024接收,只拥有47.8M的可训练参数,在一张RTX

理解分类器(linear)为什么可以做语义方向的指导?(解纠缠)

Attribute Manipulation(属性编辑)、disentanglement(解纠缠)常用的两种做法:线性探针和PCA_disentanglement和alignment-CSDN博客 在解纠缠的过程中,有一种非常简单的方法来引导G向某个方向进行生成,然后我们通过向不同的方向进行行走,那么就会得到这个属性上的图像。那么你利用多个方向进行生成,便得到了各种方向的图像,每个方向对应了很多

SAM2POINT:以zero-shot且快速的方式将任何 3D 视频分割为视频

摘要 我们介绍 SAM2POINT,这是一种采用 Segment Anything Model 2 (SAM 2) 进行零样本和快速 3D 分割的初步探索。 SAM2POINT 将任何 3D 数据解释为一系列多向视频,并利用 SAM 2 进行 3D 空间分割,无需进一步训练或 2D-3D 投影。 我们的框架支持各种提示类型,包括 3D 点、框和掩模,并且可以泛化到不同的场景,例如 3D 对象、室

Go并发模型:流水线模型

Go作为一个实用主义的编程语言,非常注重性能,在语言特性上天然支持并发,Go并发模型有多种模式,通过流水线模型系列文章,你会更好的使用Go的并发特性,提高的程序性能。 这篇文章主要介绍流水线模型的流水线概念,后面文章介绍流水线模型的FAN-IN和FAN-OUT,最后介绍下如何合理的关闭流水线的协程。 Golang的并发核心思路 Golang并发核心思路是关注数据流动。数据流动的过程交给cha

Apache Tiles 布局管理器

陈科肇 =========== 1.简介 一个免费的开源模板框架现代Java应用程序。  基于该复合图案它是建立以简化的用户界面的开发。 对于复杂的网站,它仍然最简单,最优雅的方式来一起工作的任何MVC技术。 Tiles允许作者定义页面片段可被组装成在运行一个完整的网页。  这些片段,或Tiles,可以用于为了降低公共页面元素的重复,简单地包括或嵌入在其它瓦片,制定了一系列可重复使用

模具要不要建设3D打印中心

随着3D打印技术的日益成熟与广泛应用,模具企业迎来了自建3D打印中心的热潮。这一举措不仅为企业带来了前所未有的发展机遇,同时也伴随着一系列需要克服的挑战,如何看待企业引进增材制造,小编为您全面分析。 机遇篇: 加速产品创新:3D打印技术如同一把钥匙,为模具企业解锁了快速迭代产品设计的可能。企业能够迅速将创意转化为实体模型,缩短产品从设计到市场的周期,抢占市场先机。 强化定制化服务:面

基于YOLO8的图片实例分割系统

文章目录 在线体验快速开始一、项目介绍篇1.1 YOLO81.2 ultralytics1.3 模块介绍1.3.1 scan_task1.3.2 scan_taskflow.py1.3.3 segment_app.py 二、核心代码介绍篇2.1 segment_app.py2.2 scan_taskflow.py 三、结语 代码资源:计算机视觉领域YOLO8技术的图片实例分割实