当前位置: 首页 > article >正文

【三维重建】Proc-GS:使用3DGS的程序性城市建筑生成

在这里插入图片描述


标题:《Proc-GS: Procedural Building Generation for City Assembly with 3D Gaussians》
项目:https://city-super.github.io/procgs/
来源:香港中文大学;上海人工智能实验室 等

文章目录

  • 摘要
  • 一、 程序代码定义 (Procedural Code Definition)
  • 二、资产获取 (Asset Acquisition)
  • 三、资产组装(Asset Assembly)
  • 四、实验


摘要

  建筑是城市的主要组成部分,通常以门窗等重复的元素为特色

传统建模(又叫过程化三维资产构建)本质是通过脚本对资产的组合进行建模,而且创建是劳动密集型的,需要专门的技能来开发设计规则,生成的建筑物模型不够真实。过程化建模相关的软件有很多,例如:

  • 地形生成:World Machine
  • 城市生成:CityEngine、SceneCity
  • 植物生成:SpeedTree、Terragen
  • 材质生成:Substance
  • 特效生成:Houdini
  • 体素生成:VoxelFarm
  • Blender发布的Geometry Node

效果如下:

在这里插入图片描述

  • 测绘/GIS行业:CityEngine (现属于ESRI),根据矢量数据(如建筑物底面和道路中心线)快速生成城市三维模型:

在这里插入图片描述

  高斯泼溅(Gaussian Splatting)建模是一种基于点云的渲染技术,通过高斯分布模拟光散射,适合实时渲染和大规模场景,并具有真实的场景还原精度,但不生成传统意义上的三维模型(mesh格式)。且模型难以编辑

  Proc-GS建模是第一个能够使用3DGS实现过程建模的管道。

Proc-GS框架包括两个阶段: (1) 资产获取阶段 ,指导3DGS遵循预定义的布局来约束它的优化。例如,当使用3DGS建模时,首先生成它的过程代码,或者手动或使用现成的分割模型。此代码用于为建筑的每个基本资产初始化一组高斯分布。然后根据程序代码对这些特定资产的高斯进行组装,并使用渲染损失对组装的高斯进行整体进行优化,如图3。重复的基本资产将同步更新;为了捕捉几何中各种细微变化,我们还学习了每个资产的方差代码。(2) 资产组装阶段 ,我们使用程序代码来操作基础资产,生成具有不同几何结构和逼真外观的建筑。新创建的架构可以与Houdini软件集成,允许可伸缩的场景组合与直观的控制。

  通过利用shared foundational assets, 显著减少了模型的大小,实现了对建筑组装的精确控制。为了展示Proc-GS的能力, 从City Sample中创建了MatrixBuilding数据集,包含了17个标志性建筑的多视图图像和程序代码。我们的Proc-GS方法通过组合来自不同建筑的资产,实现了灵活的几何编辑和创建新的结构,允许用户生成巨大的、定制的虚拟城市。我们还将Proc-GS迁移到现实世界的建筑中,并支持从实际结构转换为虚拟资产,支持可扩展的、逼真的城市生成,有利于游戏、自动驾驶和具体化的人工智能等。

一、 程序代码定义 (Procedural Code Definition)

  程序建模被广泛用于游戏场景中的构建生成,如UE5 中的城市样本,通过利用建筑的结构化性质和重复性资产。建筑被分层分解为不同 l e v e l level level,相同的 l e v e l level level可能会重复,如图2中的 l e v e l 2 、 3 和 5 level 2、3和5 level235。每个 l e v e l level level都由基本资产组成,如window、corner和piller,其中都有相同的资产在level中重复出现,如 l e v e l 1 level1 level1 中的CE和W1。因此 ,建筑可以由 程序代码字符串(procedural code string)和一组基本资产来表示,其中基本资产是由艺术家手工制作。

在这里插入图片描述

  本文提出了一种从多视图图像中提取基础资产的替代方法。为了简化问题,我们首先假设提供了GroudTruth的程序代码。我们创建了基于CitySample中的17栋建筑的矩阵建筑数据集,人工制作的模拟来自纽约、芝加哥和旧金山等城市的建筑风格。每个场景包括密集的多视图图像,GroudTruth的像机位姿,和GroudTruth的程序代码。框架可以在合成世界上运行,并且对于现实世界的场景也很实用。我们发现了 一种从真实场景中获得过程代码的有效方法 首先训练2D-GS [20]来获得几何上精确的点云和网格。随后使用 [CVPR 2022:Finding good configurations of planar primitives in unorganized point clouds]方法自动估计建筑立面。对于每个面,渲染一个直接面向建筑立面的图像,并在二维图像上标注过程代码。然后将二维过程代码投影到网格上,得到三维过程代码

  

二、资产获取 (Asset Acquisition)

  我们的目标是在3D-GS 的训练过程中自动提取这些3D基础资产。为了实现这一点,我们假设程序代码是可用的,无论是来自MatrixBuilding数据集的GroudTruth代码,还是来自真实场景的估计代码

  每个基础资产的属性

  • 资产边界框的大小 ( x e , y e , z e ) (x_e, y_e, z_e) xe,ye,ze
  • 局部坐标中的轴位置 ( x c , y c , z c ) (x_c, y_c, z_c) xc,yc,zc
  • 世界坐标系中 , K K K 个实例的变换集合:{ [ R 1 , T 1 , S 1 ] 、 [ R 2 , T 2 , S 2 ] , . . . , [ R K , T K , S K ] [R_1,T_1,S_1]、[R_2,T_2,S_2],...,[R_K,T_K,S_K] [R1,T1,S1][R2,T2,S2],...,[RK,TK,SK]},其中 T ∈ R 3 × 1 T∈R^{3×1} TR3×1为平移向量, R ∈ R 3 × 3 R∈R^{3×3} RR3×3为旋转矩阵, S ∈ R 3 × 1 S∈R^{3×1} SR3×1是比例因子。

  高斯初始化。在世界坐标系的原点处,初始化每个基础资产的枢轴,(枢轴是资产自己的局部坐标系的原点):第 i i i个基本资产的边界框表示为 ( x m i n i , y m i n i , z m i n i , x m a x i , y m a x i , z m a x i ) (x^i _{min}, y_{min}^i, z_{min}^i, x^i_{max}, y_{max}^i, z_{max}^i) xmini,ymini,zmini,xmaxi,ymaxi,zmaxi, 其中 x m i n i = x c i − x e i 2 x^i _{min} = x^i _c−\frac {x^i _e}{2} xmini=xci2xei x m a x i = x c i + x e i 2 x^i _{max} = x^i _c+\frac {x^i _e}{2} xmaxi=xci+2xei。合成场景和真实世界场景的操作有细微的差别。

  合成场景中,每个由M个基本资产组成的建筑,初始化 N N N个点。对于第 i i i项资产, N i N^i Ni点在其边界框内随机初始化,由资产的边界框体积与所有资产的总体积的比值决定,如公式4:

在这里插入图片描述

   方差资产 :不同场景的基本资产实例化,在外观和几何形状上都会有微小的差异,因此我们为第 i i i个基础资产的每个实例化初始化一个方差资产。对于第j个实例化,我们首先在第i个基资产的边界框内随机初始化 N i N^i Ni点。然后,我们更新了该方差资产中三维高斯分布的中心 µ µ µ、旋转 R R R和尺度 S S S,如公式5。

对于真实场景,给定具有 K K K个实例的第 i i i个基本资产,我们应用变换映射其边界框,获得所有K个实例的边界框。对于每个实例化,我们过滤其边界框内的SfM点,以进行方差初始化。然后使用第i个基本资产的逆转换将这些点云转换回世界坐标原点并连接起来。最后,我们将生成的点云均匀降采样K因子,以初始化第i个基本资产。

在这里插入图片描述

   用程序代码渲染。图3(1)说明了渲染方式。首先根据程序代码组装基本资产。第 i i i个基本资产具有一组三维高斯 A i A_i Ai和变换{ [ R 1 i , T 1 i , S 1 i ] , [ R 2 i , T 2 i , S 2 i ] , … , [ R j i , T j i , S j i ] , . . . , [ R K i , T K i , S K i ] [R_1^i,T_1^i,S_1^i ],[R_2^i,T_2^i,S_2^i ],…,[R_j^i,T_j^i,S_j^i ],...,[R_K^i,T_K^i,S_K^i ] [R1i,T1i,S1i],[R2i,T2i,S2i],,[Rji,Tji,Sji],...,[RKi,TKi,SKi]}。对于第 i i i个基本资产的第 j j j个实例高斯,除中心 µ µ µ、旋转 R R R和刻度 S S S外,三维高斯性质保持不变,其更新为

在这里插入图片描述

  根据程序代码实例化所有的基础资产,并添加方差资产。然后,整个建筑的三维高斯分布被输入光栅化器来渲染图像,由训练视图监督。优化过程中,来自重复实例的梯度被反向传播到共享的基础资产和各自的方差资产,从而细化高斯参数。

在这里插入图片描述

   高斯的Bbox自适应控制。3DGS的内部排序可能是混乱的,虽然有好的渲染结果,但基本资产的边界会出现无序,使后续的编辑和生成变得复杂(图6)。为了解决这个问题,我们除了致密化和修剪外,还使用 Adaptive Clamp operation involves 操作 来增强原始3DGS(图4)。对于每个基本资产,操作包括:(1)Clamp Scale:使用稍大一点的“软”边界框,以避免过度clamping。如果一个高斯超过了软盒的边界,它的尺度就会减半。(2)Clamp Position:将超过边界框的高斯的中心拉回其边缘。基础资产和方差资产每100次迭代执行一次,以保持有序的边界并促进有效的提取和操作。

在这里插入图片描述

三、资产组装(Asset Assembly)

  从多视图图像中提取基本资产后,我们可以操作过程代码来生成新的建筑。组装过程由一个 building generator 和一个city layout generator组成。

  建筑生成器。为了进行建筑生成,我们首先分析了原始建筑中每层内和楼层之间的基础资产的排列模式,并通过GPT-4o 将它们转换为常规的程序代码,并在提示中提供了几个示例。实例过程见图10。在常规程序代码中,指定了楼层内部和楼层之间可重复和可伸缩的组合。具体地说,()中的组合被设计为可重复的元素,而标记有∗的资产则可扩展,以适应建筑的大小。随后,我们可以根据程序代码和指定的建筑尺寸(例如,长度、宽度和高度)来放置资产,以生成具有不同安排和尺寸的新建筑。值得注意的是,在构建生成过程中,每个基本资产都被随机分配了一个相应的方差资产,以增强多样性和真实性。此外,我们还可以从不同建筑来源提取的基础资产中创建新建筑。

在这里插入图片描述

  城市布局生成器。对于城市生成,用户首先选择城市地图的边界点(紫色边界)和主要道路的端点(绿线),如图3 (2)所示。随后,我们根据主要道路将城市划分为几个相互连接的街区,每个街区被随机分配给区域特征(如建筑规模的分布)。然后,我们生成垂直的二级道路,并根据预定义的规则确定建筑位置、拓扑结构和尺寸。最后,我们在道路上随机放置装饰元素,如路灯、垃圾桶和邮箱,这些也由3D-GS收集。

四、实验

  数据集。CitySample[1]的建筑数据集,包括17栋建筑的密集多视图图像及其相应的GroundTruth程序代码。按照MatrixCity 禁用运动模糊,并在渲染过程中使用了抗锯齿,以实现尽可能高的图像质量。 附录a提供了每个建筑的细节和摄像机捕捉轨迹。我们还在无人机捕获的三个真实场景上做了方法验证。

  细节。3D-GS是我们的主要基线,都经过30k的迭代训练,稠密化到15k;合成数据初始化的高斯数 N = 10 k N=10k N=10k,如公式4。3DGS初始化与由随机初始化的基本资产组装的建筑。软边界框超出边界框20厘米 λ S S I M λ_{SSIM} λSSIM=0.2;在单个RTX 3090 GPU上训练。

  指标。新视图合成采用: PSNR,SSIM [43]和LPIPS ;还报告了高斯模型的数量来评估模型的紧致性。这些指标在所有场景中取平均值,以进行定量比较。对于城市生成,按照EG3D [6]和CityDreamer的深度误差(DE)和相机误差(CE),以评估3D场景的几何形状和一致性。对于DE,我们利用预先训练的模型[36]来估计渲染图像的深度图,并计算归一化估计深度和渲染深度之间的 ℓ2距离。对于CE,我们首先使用半球采样的相机位姿渲染图像,然后使用COLMAP [37]估计这些位姿。摄像机误差计算为估计值和的真实pose之间的尺度不变 ℓ2损失。

在这里插入图片描述

--------------------------------------------------------------------------------------------真实数据结果--------------------------------------------------------------------------------------

  对于合成数据,Proc-GS实现了较好的新视图合成质量,同时显著减少模型大小的4倍,证明了我们的方法的有效性。对于真实世界的场景,由于其复杂的外观、几何形状和缺乏地面真实的程序代码,优化变得更具挑战性,需要更多的高斯分布的方差资产。虽然压缩率低于合成情况,但与3D-GS相比,我们的模型仍然保持着更小的尺寸。更重要的是,我们获得了灵活的控制能力,而精度仅略有下降,这在定性结果中几乎不明显(图5)

在这里插入图片描述

  

在这里插入图片描述

  

在这里插入图片描述
在这里插入图片描述

相关文章:

【三维重建】Proc-GS:使用3DGS的程序性城市建筑生成

标题:《Proc-GS: Procedural Building Generation for City Assembly with 3D Gaussians》 项目:https://city-super.github.io/procgs/ 来源:香港中文大学;上海人工智能实验室 等 文章目录 摘要一、 程序代码定义 (Procedural Co…...

商业智能BI的未来,如何看待AI+BI这种模式?

昨天在和一位朋友线上聊天的时候,提了一个问题,你是如何看待AI(人工智能)BI(商业智能)这种模式和方向的,我大概来说一下我个人的看法。 以我在商业智能BI项目中接触到的行业和企业,…...

【计算机视觉】手势识别

手势识别是计算机视觉领域中的重要方向,通过对摄像机采集的手部相关的图像序列进行分析处理,进而识别其中的手势,手势被识别后用户就可以通过手势来控制设备或者与设备交互。完整的手势识别一般有手的检测和姿态估计、手部跟踪和手势识别等。…...

装饰器模式的C++实现示例

核心思想 装饰器设计模式是一种结构型设计模式,它允许动态地为对象添加额外的行为或职责,而无需修改其原始类。装饰器模式通过创建一个装饰器类来包装原始对象,并在保持原始对象接口一致性的前提下,扩展其功能。 装饰器模式的核…...

Python+DeepSeek:开启AI编程新次元——从自动化到智能创造的实战指南

文章核心价值 技术热点:结合全球最流行的编程语言与国产顶尖AI模型实用场景:覆盖代码开发/数据分析/办公自动化等高频需求流量密码:揭秘大模型在编程中的创造性应用目录结构 环境搭建:5分钟快速接入DeepSeek场景一:AI辅助代码开发(智能补全+调试)场景二:数据分析超级助…...

25.3.12.Linux内核如何和设备树协同工作的?

1.编写设备树 cd arch/riscv/boot/dts/ 再cd到厂商,例如下述内容。 2.编译设备树(dts->dtb)通过dtc命令来转换 3.解析设备树 例如上述内容,都是对设备树的解析。 这里重点说一下内核对设备树的处理吧,因为这个内容是设备树的重点了。 从源代码文件 dts 文件开始...

python中路径操作简介

一、./的基础含义 ​当前目录 ./表示当前工作目录(Current Working Directory, CWD),即Python脚本运行时所在的目录。例如: open(./data.txt, r) # 打开当前目录下的data.txt文件 ​作用:避免直接写文件名可能引发的路…...

Flutter 基础组件 Text 详解

目录 1. 引言 2. 基本使用 3. 自定义样式 4. 文本对齐与溢出控制 5. 外边距 5.1 使用 Container 包裹 5.2 使用 Padding 组件 5.3 在 Row/Column 中使用 5.4 动态边距调整 5.5 关键区别说明 5.6 设置 margin 无效 6. 结论 相关推荐 1. 引言 Text 组件是 Flutter 中…...

Torch 模型 model => .onnx => .trt 及利用 TensorTR 在 C++ 下的模型部署教程

一、模型训练环境搭建和模型训练 模型训练环境搭建主要牵扯 Nvidia driver、Cuda、Cudnn、Anaconda、Torch 的安装,相关安装教程可以参考【StarCoder 微调《个人编程助手: 训练你自己的编码助手》】中 5.1 之前的章节。 模型训练的相关知识可以参考 Torch的编程方…...

FreeSWITCH 之 chat

要把 FreeSWITCH 之 chat 完全研究清楚,似乎不容易 发送,路由,接收 跟哪些模块有关 等等 咱一边查资料,一边整理,不着急 先看看 Kamalio 怎么发 MESSAGE loadmodule "uac.so"route[uac_send_message] {…...

如何在Spring Boot中配置和使用MyBatis-Plus

在当今的Java开发中,Spring Boot已经成为了一个非常流行的框架,而MyBatis-Plus则是一个强大的ORM框架,为开发人员提供了更简便的数据库操作方式。很多开发者都在使用Spring Boot和MyBatis-Plus的组合来快速构建高效的应用。今天就来聊聊如何在…...

爱普生可编程晶振SG-8200CJ特性与应用

在高速发展的电子技术领域,时钟源作为电子系统的“心脏”,其性能直接影响设备的稳定性与可靠性。爱普生SG-8200CJ可编程晶振凭借其优秀的频率精度、低抖动性能及广泛的环境适应性,正成为众多领域的得力之选,为各类设备的高效运行与…...

ubuntu中用docker下载opengauss

1.安装docker sudo apt install docker.io2.拉取opengauss镜像 sudo docker pull enmotech/opengauss3.创建容器 sudo docker run --name opengauss --privilegedtrue -d -e GS_PASSWORDEnmo123 enmotech/opengauss:latest3.5.如果容器停止运行(比如关机了&#…...

tslib

使用tslib来读取触摸屏的数据,可以得到原始数据,也可以在原始数据的基础上进行一些处理。比如有些触摸屏比较不稳定,跳动比较大,我们可以将跳动比较大的数据给删除掉 plugins里面的每个文件都会被编译成一个动态库,这些…...

MANUS怎么用

(1)分析方法论我过去说过一个分析模型:供给侧-消费侧。供给侧想做大,得靠生态集成。消费侧想坐大,得靠交互体验。(2)交互体验我先给大家讲一下计算机产业发展70来年,在交互上的变化。…...

Spring Cloud Alibaba 实战:Sentinel 保障微服务的高可用性与流量防护

1.1 Sentinel 作用 Sentinel 是阿里巴巴开源的一款 流量控制和熔断降级 框架,主要用于: 流量控制:限制 QPS,防止流量暴增导致系统崩溃熔断降级:当某个服务不可用时自动降级,避免故障扩散热点参数限流&…...

大数据技术在土地利用规划中的应用分析

大数据技术在土地利用规划中的应用分析 一、引言 土地利用规划是对一定区域内的土地开发、利用、整治和保护所作出的统筹安排与战略部署,对于实现土地资源的优化配置、保障社会经济的可持续发展具有关键意义。在当今数字化时代,大数据技术凭借其海量数据处理、高效信息挖掘等…...

MoonSharp 文档三

MoonSharp 文档一-CSDN博客 MoonSharp 文档二-CSDN博客 MoonSharp 文档四-CSDN博客 MoonSharp 文档五-CSDN博客 7.Proxy objects(代理对象) 如何封装你的实现,同时又为脚本提供一个有意义的对象模型 官方文档:MoonSharp 在实际…...

linux和windows之间的复制

第一步 sudo apt-get autoremove open-vm-tools第二步 sudo apt-get update第三步 sudo apt-get install open-vm-tools-desktop按y 第四步 重启虚拟机,终端下输入 rebootLinux下 按“ CtrlShiftC V ”复制粘贴 Windows下按“ Ctrl C V ”复制粘贴...

在资源有限中逆势突围:从抗战智谋到寒门高考的破局智慧

目录 引言 一、历史中的非对称作战:从李牧到八路军的智谋传承 李牧戍边:古代军事博弈中的资源重构 八路军的游击战:现代战争中的智慧延续 二、创业界的逆袭之道:小米与拼多多的资源重构 从MVP到杠杆解 社交裂变与资源错配 …...

Ubuntu 22.04 无法进入图形界面的解决方法

Ubuntu 22.04 无法进入图形界面,只能进入 tty,可能是由于图形界面相关的配置或驱动程序出现了问题。以下是一些常见的解决方法: 1. 检查图形界面服务状态 首先,检查图形界面服务(通常是 gdm 或 lightdm)的…...

Python中很常用的100个函数整理

Python 内置函数提供了强大的工具,涵盖数据处理、数学运算、迭代控制、类型转换等。本文总结了 100 个常用内置函数,并配备示例代码,提高编程效率。 1. abs() 取绝对值 print(abs(-10)) # 10 2. all() 判断所有元素是否为真 print(all([…...

javascript-es6 (六)

编程思想 面向过程 面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候再一个一个的依次 调用就可以了 就是按照我们分析好了的步骤,按照步骤解决问题 面向对象 面向对象是把事务分解成为一个个对象&…...

大模型微调技术基础(一)

文章目录 GPT与BERT的差异GPT(Decoder架构)优点缺点 BERT(Encoder架构)优点缺点 总结 LoRA低参数大模型与全参数小模型表现对比分析LoRA(Low-Rank Adaptation)技术详解1. LoRA 核心原理2. 应用场景3. 简单代…...

Spring AI 1.0.0 M6新特性MCP

Spring AI 1.0.0 M6新特性MCP 前言一、MCP是什么?(Model Context Protocol)二、它的发展历程三、核心架构四、MCP Java SDK的核心能力Java MCP实现遵循三层架构:MCP客户端MCP服务器总结MCP 的核心能力总结多种传输选项 搭建服务端…...

【时时三省】(C语言基础)赋值表达式和赋值语句和变量赋初值

山不在高,有仙则名。水不在深,有龙则灵。 ----CSDN 时时三省 赋值表达式和赋值语句 在C程序中,赋值语句是用得最多的语句。实际上,C语言的赋值语句属于表达式语句,由一个赋值表达式加一个分号组成。其他一些高级语言…...

Room数据库的使用

一、room的引用导入 1、在app的gradle中引入 plugins {//这个ksp 一定要对应相关的 kotlin 版本,不然会一直报错i的---id("com.google.devtools.ksp") version "1.9.0-1.0.13" apply false } 2、在model的gradle中引入 plugins {id("com.g…...

【性能测试入门_01性能测试jmeter基础实操场景详解】

一、应用项目如何部署在服务器上 可以将项目进行打jar包 双击install,控制台就会打印打包的过程 最终打的包,会存放在打印的那个路径下 这个jar包,就是开发人员开发好,直接可以部署的 可以通过命令,在终端直接启动这…...

SpringBoot加载配置文件的优先级

在 SpringBoot 应用中,配置文件的加载顺序(优先级)决定了不同来源的配置属性如何覆盖彼此,但是,在实践中,也会经常遇到。下面文章将分析 SpringBoot 配置文件加载的优先级,从高到低排列。 文章目…...

跨越时空的对话:图灵与GPT-4聊AI的前世今生

(背景:虚拟咖啡厅,图灵身着1950年代西装,端着一杯热茶,GPT-4以全息投影形态坐在对面) 图灵(喝了口茶):“听说你能写诗?我当年在布莱切利园破解Enigma时&…...