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 网格分割是一个相对较新的新兴领域,但我们对执行分割任务的两种不同方法进行了探索:一种依赖于纹理图像分析,另一种采用基于网格的分割方法。

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

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

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

相关文章

STM32CubeIDE基础学习-BEEP蜂鸣器实验

STM32CubeIDE基础学习-BEEP蜂鸣器实验 文章目录 STM32CubeIDE基础学习-BEEP蜂鸣器实验前言第1章 硬件介绍第2章 工程配置2.1 工程外设配置部分2.2 生成工程代码部分 第3章 代码编写第4章 实验现象总结 前言 前面学习了LED闪烁实验,现在来学习一下蜂鸣器发声实验&am…

JVM工作原理与实战(四十四):JVM常见面试题目

专栏导航 JVM工作原理与实战 RabbitMQ入门指南 从零开始了解大数据 目录 专栏导航 前言 一、JVM常见面试题目 1.有哪些常用的垃圾回收器? 2.什么是内存泄漏,如何解决内存泄漏问题? 3.请列举并简要描述一些常用的JVM工具及其主要功能。 …

用python写网络爬虫:3.urllib库进一步的使用方法

文章目录 异常处理URLErrorHTTPError设置超时时间 链接的解析、构造、合并urlparse方法urlsplit方法urljoin方法urlencode方法parse_qs方法quote方法 Robots 协议Robots 协议的结构解析协议 参考书籍 在上一篇文章:用python写网络爬虫:2.urllib库的基本用…

Nginx底层基础数据结构

基础数据结构 ngx_int_t 32位操作系统4字节,64位操作系统8字节 解决跨平台以及,普通int类型在x86和x64操作系统上面是4字节,在类型转换时造成内存浪费(如在x64下面转换long类型) typedef intptr_t ngx_int_t;#ifdef _WIN64 typedef __int64 intptr_t; #else typedef _…

Canal实现mysql与缓存同步

什么是Canal Canal是阿里巴巴旗下的一款开源项目, 基于java开发. Canal是基于mysql的主从同步来实现的. github地址: https://github.com/alibaba/canal Canal把自己伪装成MySQL的一个slave节点, 从而监听master的binary log变化. 再把得到的变化信息通知给Canal的客户端, 进而…

vue3 element plus 上传下载

文章目录 上传下载 上传 /* html */ <el-upload v-model"fileId" class"avatar-uploader" ref"exampleUploadRef" :file-list"fileList" :show-file-list"false" action"/ys-three-year/ThreeReport/uploadFile&q…

Python从0到100(五):Python分支结构和循环结构

一、分支结构&#xff1a; Python中的分支结构和循环结构是编写程序时常用的控制结构。在Python中&#xff0c;分支结构通过if、elif和else关键字来实现条件判断。在使用if语句时&#xff0c;程序会根据条件表达式的真假执行相应的代码块。 if condition1:# 如果条件1为真&am…

YOLOv5改进 | 图像去雾 | 利用图像去雾网络UnfogNet辅助YOLOv5进行图像去雾检测(全网独家首发)

一、本文介绍 本文给大家带来的改进机制是利用UnfogNet超轻量化图像去雾网络,我将该网络结合YOLOv5针对图像进行去雾检测(也适用于一些模糊场景),我将该网络结构和YOLOv5的网络进行结合同时该网络的结构的参数量非常的小,我们将其添加到模型里增加的计算量和参数量基本可…

每天一点正压采样器小知识

只要你奔跑&#xff0c;这个世界就会跟着你奔跑&#xff0c; 只要你停驻&#xff0c;这个世界就会舍弃你独自奔跑&#xff0c; 唯有你确定一个方向&#xff0c;使劲的跑起来&#xff0c; 这个世界会为你而让路。 每天一点正压采样器小知识 该采样器活赛与气筒采用全金属密封&am…

操作系统知识-存储管理+文件管理管理-嵌入式系统设计师备考笔记

0、前言 本专栏为个人备考软考嵌入式系统设计师的复习笔记&#xff0c;未经本人许可&#xff0c;请勿转载&#xff0c;如发现本笔记内容的错误还望各位不吝赐教&#xff08;笔记内容可能有误怕产生错误引导&#xff09;。 本章的主要内容见下图&#xff1a; 1、存储管理&#…

[c++]内存管理

1. C/C内存分布 我们先来看下面的一段代码和相关问题 int globalVar 1; static int staticGlobalVar 1; void Test() { static int staticVar 1; int localVar 1; int num1[10] { 1, 2, 3, 4 }; char char2[] "abcd"; const char* pChar3 "abcd"; …

Redis 八种常用数据类型详解

夯实基础&#xff0c;这篇文章带着大家回顾一下 Redis 中的 8 种常用数据类型&#xff1a; 5 种基础数据类型&#xff1a;String&#xff08;字符串&#xff09;、List&#xff08;列表&#xff09;、Set&#xff08;集合&#xff09;、Hash&#xff08;散列&#xff09;、Zse…

想进阿里?先搞懂Spring Bean的循环依赖!

如有疑问或者更多的技术分享,欢迎关注我的微信公众号“知其然亦知其所以然”! 嗨,小伙伴们!我是小米,你们的技术分享小助手!今天我们要聊的话题可是技术圈内颇为热门的“阿里巴巴面试题:Spring的循环依赖”哦!相信很多小伙伴都会在技术面试中遇到类似的问题,没错,循…

QT网络编程之获取本机网络信息

一.概述 查询一个主机的MAC地址或者IP地址是网络应用中常用到的功能&#xff0c;Qt提供了QHostInfo和QNetworkInterface 类可以用于此类信息的查询 1.QHostInfo 类&#xff08;显示和查找本地的信息&#xff09; 2.QNetworkInterface 类&#xff08;获得应用程序上所在主机的…

8.JavaWebHTML标签与CSS页面美化和布局控制

目录 导语&#xff1a; 一、HTML表单标签 二、CSS页面美化和布局控制 结语&#xff1a; 导语&#xff1a; 在Web开发中&#xff0c;HTML和CSS是两个不可或缺的技术。HTML&#xff08;HyperText Markup Language&#xff09;用于构建网页的结构&#xff0c;而CSS&#xff08…

【送书福利第五期】:ARM汇编与逆向工程

文章目录 &#x1f4d1;前言一、ARM汇编与逆向工程1.1 书封面1.2 内容概括1.3 目录 二、作者简介三、译者介绍&#x1f324;️、粉丝福利 &#x1f4d1;前言 与传统的CISC&#xff08;Complex Instruction Set Computer&#xff0c;复杂指令集计算机&#xff09;架构相比&#…

RabbitMQ的幂等性、优先级队列和惰性队列

文章目录 前言一、幂等性1、概念2、消息重复消费3、解决思路4、消费端的幂等性保障5、唯一 ID指纹码机制6、Redis 原子性 二、优先级队列1、使用场景2、如何添加3、实战 三、惰性队列1、使用场景2、两种模式3、内存开销对比 总结 前言 一、幂等性 1、概念 2、消息重复消费 3、…

day12-SpringBootWeb 登录认证

一、登录功能 Slf4j RestController public class LoginController {Autowiredprivate EmpService empService;PostMapping("/login")public Result login(RequestBody Emp emp){log.info("员工登录: {}", emp);Emp e empService.login(emp);//登录失败, …

2024考研国家线公布,各科分数线有哪些变化?考研国家线哪些涨了,哪些跌了?可视化分析告诉你

结论在文章结尾 2024考研国家线 一、近五年国家线趋势图-学术硕士 文学 管理学 工学照顾专业 体育学 交叉学科 军事学 历史学 理学 享受少数名族照顾政策的考生 中医类照顾专业 教育类 艺术类 医学 工学 哲学 法学 农学 经济学 二、近五年国家线趋势图-专业硕士 中医 应用心理 …

S3fd: Single shot scale-invariant face detector

目录 摘要一、介绍二、相关工作三、单镜头尺度不变人脸检测器3.1. Scale-equitable框架3.2. 尺度补偿锚匹配策略3.3. 最大输出背景标签3.4 训练4.实验4.1. 模型分析4.2. 基准评价4.3 推理时间 5 结论 摘要 本文提出了一种实时人脸检测器&#xff0c;称为单镜头尺度不变人脸检测…