3D Tiles语义分割流水线

这篇具有很好参考价值的文章主要介绍了3D Tiles语义分割流水线。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

1、动机

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

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

cesium,计算机视觉,人工智能,unity,游戏引擎,数字孪生,3d

提取自 OneMap 

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

2、现有工作

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

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

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

  • 大规模城市网格

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

  • 数据限制

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

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

3、整体管线

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

cesium,计算机视觉,人工智能,unity,游戏引擎,数字孪生,3d

4、实现方法

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

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

4.1 图像分割

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

cesium,计算机视觉,人工智能,unity,游戏引擎,数字孪生,3d

3D模型示例

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

cesium,计算机视觉,人工智能,unity,游戏引擎,数字孪生,3d

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

4.2 映射到 3D

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

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

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

SUMS by TUDelft

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

  • 为什么选择SUMS

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

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

  • SUMS — 引擎盖下

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

  • 根据给定的数据

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

cesium,计算机视觉,人工智能,unity,游戏引擎,数字孪生,3d

文件转换示意

标记的输出如下所示:

cesium,计算机视觉,人工智能,unity,游戏引擎,数字孪生,3d

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

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

cesium,计算机视觉,人工智能,unity,游戏引擎,数字孪生,3d

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

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

cesium,计算机视觉,人工智能,unity,游戏引擎,数字孪生,3d

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

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

4.4 元数据

等效的元数据可以存储在 3D 模型本身中,也可以存储在包含它的 JSON 文件中。 分层存储如下图所示。 标记要素和顶点必须位于 .glb 文件内,而更高级别的信息属于 3D Tileset JSON 文件。cesium,计算机视觉,人工智能,unity,游戏引擎,数字孪生,3d

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

4.5 在 .glb 文件内

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

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

4.6 在 3D Tileset JSON 中

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

cesium,计算机视觉,人工智能,unity,游戏引擎,数字孪生,3d

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 个。cesium,计算机视觉,人工智能,unity,游戏引擎,数字孪生,3d

提取的 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,并为每个类生成唯一的外观。 可以切换该着色器以显示原始纹理或类的颜色。

cesium,计算机视觉,人工智能,unity,游戏引擎,数字孪生,3d

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

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

cesium,计算机视觉,人工智能,unity,游戏引擎,数字孪生,3d

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

也可以在 Unity 中选择和查看元数据。cesium,计算机视觉,人工智能,unity,游戏引擎,数字孪生,3d

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

6、结束语

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

这些方法可以对每个网格内的顶点和面进行分组,从而有助于添加有价值的元数据以增强数据组织和分析。文章来源地址https://www.toymoban.com/news/detail-853618.html

到了这里,关于3D Tiles语义分割流水线的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • d3d12龙书阅读----d3d渲染流水线

    在输入装配器阶段,会从显存中读取顶点与索引这种几何数据,然后根据图形基元的类型,根据索引将顶点组装起来。 我们来看看几种常见的图形基元类型: 我们可以看到可以把图形基元设置为未定义、点、线、三角形与控制点 根据索引我们可以将顶点按照一定的顺序组装

    2024年03月16日
    浏览(38)
  • 计算机体系结构基础知识介绍之缓存性能的十大进阶优化之减少命中时间和流水线访问和多组缓存增加带宽(三)

    路预测是一种高速缓存优化技术,它在高速缓存中保存额外的位来预测下一次高速缓存访问的路(或者组内的块)。这种预测可以提前设置多路选择器来选择期望的块,并且在那个时钟周期内,只进行一次标记比较,同时读取高速缓存数据。如果预测正确,高速缓存访问延迟

    2024年02月12日
    浏览(30)
  • 1.6流水线:流水线、流水线周期、流水线执行时间、流水线吞吐率、流水线加速比

    相关参数计算:流水线执行时间计算、流水线吞吐率、流水线加速比等。 流水线是指在程序执行时多条指令重叠进行操作的一种准并行处理实现技术。各种部件同时处理是针对不同指令而言的,它们可同时为多条指令的不同部分进行工作,以提高各部件的利用率和指令的平均

    2024年02月09日
    浏览(34)
  • 8位加法器的流水线设计(2级流水、四级流水)

    思考:流水线的设计是为了提高频率,在一个耗时比较长的组合逻辑中,加入寄存器, 可以将这个较长的组合逻辑分裂几份,从而提升主频,缺点是增加了寄存器的资源。 二级流水线的加法器的设计思想如下: 在第一个周期完成低四位的加法计算,使用一个四位加法器即可

    2024年02月11日
    浏览(30)
  • jenkins流水线

    1、 二、 三、 四、 五、 六、  

    2024年02月05日
    浏览(45)
  • 云效-流水线(基本教程)

    阿里云效地址: https://accountid-devops.aliyun.com/ 代码在码云, 服务器在腾讯云, 代码是个聚合代码 1. 选择适合自己的模板 2. 创建码云链接 3. 选择代码仓库, 分支即可下一步 4. 部署,主机部署 5. 保存运行(获取打包路径) 6. 完善部署命令 按自己的需求进行填写, 包括打包成docker镜像

    2024年02月09日
    浏览(38)
  • 【Jenkins】pipeline流水线

    流水线既能作为任务的本身,也能作为jenkinsfile,使用流水线可以让我们的任务从ui手动操作,转换为代码化,像docker的dockerfile一样,从shell命令到配置文件,更适合大型项目,可以让团队其他开发者同事参与进来,同时也可以编辑开发jenkinswebui不能完成的复杂的构建逻辑,作

    2024年02月09日
    浏览(52)
  • Jenkins的流水线详解

    来源:u.kubeinfo.cn/ozoxBB 什么是流水线 声明式流水线 Jenkinsfile 的使用 jenkins 有 2 种流水线分为 声明式流水线 与 脚本化流水线 ,脚本化流水线是 jenkins 旧版本使用的流水线脚本,新版本 Jenkins 推荐使用声明式流水线。文档只介绍声明流水线。 声明式流水线 在声明式流水线语

    2024年02月11日
    浏览(33)
  • Jenkins流水线怎么做?

    问CHAT:Jenkins流水线怎么做? CHAT回复:Jenkins流水线是一种创建、测试和部署应用程序的方法。以下是为Jenkins创建流水线的步骤: 1. 安装Jenkins:首先你需要在你的服务器上安装Jenkins。这个过程可能会根据你的操作系统有所不同。 2. 安装必要的插件:为了使流水线工作,你需

    2024年01月24日
    浏览(39)
  • UnityShader(一)渲染流水线

    目录 一、什么是渲染流水线 二、渲染流程的三个概念性阶段 1.应用阶段(Application Stage) 一、准备好场景数据 二、粗粒度剔除 三、设置渲染状态 2.几何阶段(Geometry Stage) 3.光栅化阶段(Rasterizer Stage) 三、CPU和GPU的通信 1.把数据加载到显存中 2.设置渲染状态 3.调用Draw Ca

    2024年02月02日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包