本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
用你自己的视频训练 3D 高斯飞溅
本教程引导你通过拍摄的视频训练自己的三维高斯喷溅点云。你将 GitHub 网站上的 Gaussian Splatting 管道任务包提交到你的 De .ply 文件作为输出。任务完成后,你可以在任何 Gaussian Splatting 查看器中查看结果,例如SuperSplat
该管道运行的单个任务是:
-
在 FFmpeg 网站上使用
FFmpeg 提取视频帧。 -
Structure-from-Motion 使用 COLMAP
网站上的 COLMAP 和网站上的 GLOMAP 进行求解,从而保存针孔模型和未失真的图像。 GitHub -
在 Nerfstudio 网站上使用
nerf Studio splatfacto、在 Nerfstudio 网站上使用 Splatfacto in the Wild 或 g splat 网站上的 simple_trainer.py gsplat 库示例 训练 Gaussian Splatting,并将输出保存到您指定的文件中。 .ply
以下视频演示了 Deadline Cloud 上的 Gaussian Splatting 流水线工作流程。
预计时间:几个小时,包括农场设置。根据输入视频和您选择的设置,作业本身可能在 10 分钟内完成,也可能需要几个小时。
运行本教程会产生处理任务的 GPU 工作实例的费用。本了解您的培训工作成本节介绍如何审查这些费用。
概述
要完成本教程,请按照以下步骤操作:
-
完成先决条件。
-
设置你的农场。
-
拍摄拍摄对象的视频。
-
提交作
gsplat_pipeline业。 -
监控作业。
-
下载并查看 Gaussian Sp
.plylatting 文件。 -
清理资源。
先决条件
在开始之前,请完成以下设置:
-
https://aws.amazon.com/resources/create-account/
如果您还没有 AWS 账户,请创建一个帐户。
设置你的农场
你需要一个带有 CUDA GPU 队列的 Deadline Cloud 农场来运行 Gaussian Splatting 作业。要进行设置,请完成以下步骤:
-
按照 GitHub 网站上的 CUDA 农场示例 CloudFormation 模板
说明创建具有 CUDA GPU 队列且可以构建 conda 软件包的 Deadline Cloud 农场。 -
按照 GitHub 网站上的 nerF Studio 示例 conda 包配方
说明将 nerF Studio conda 包构建到 CUDA 农场的 Amazon S3 频道中。有关更多信息,请参阅 Nerfstudio 网站上的 nERF Studio。
注意
如果你只需要默认NERFSTUDIO(splatfacto)训练器,则无需部署 CUDA 农场 CloudFormation 模板或构建自定义 nERF Studio conda 软件包。最低要求是带有 GPU 队列的 Deadline Cloud 农场、conda-forge包含在 conda 频道中的队列环境以及 conda 软件包。ffmpeg colmap glomap nerfstudio cudaGSPLAT_SIMPLE_TRAINER和NERFSTUDIO_SPLATFACTOW训练器选项取决于仅在定制的 nERF Studio conda 软件包中可用的命令。
拍摄拍摄对象的视频
你可以使用智能手机等具有视频功能的摄像头,为你的高斯飞溅拍摄拍摄拍摄对象的视频。考虑以下提示:
-
使用宽视野,例如相机应用程序中的缩放级别 0.5。由于视野更宽,图像对之间可以使用的对象越多。 Structure-from-Motion
-
关闭视频防抖功能。将其关闭可以在所有帧之间保留相同的镜头光学效果,并且可以提高求解质量。
-
根据拍摄对象规划相机动作。要捕捉一个物体,例如长凳或自行车,在不同的高度和距离下围绕拍摄对象运行几次。要拍摄房间内部,请将摄像机朝内环绕房间外部,然后在不同的摄像机高度重复拍摄。要捕捉结构化程度较低的空间,例如外部地形,请考虑如何在 Gaussian Splatting 中包含你想要的一切,以及如何从多个不同的角度捕捉所有空间。
-
以缓慢而稳定的动作捕捉视频。
-
继续移动相机。避免在单一位置停下来平移。
将您从摄像机拍摄的视频复制到计算机以提交给农场。
提交 gsplat_pipeline 作业
提交 Gaussian Splatting 作业
-
如果你在 GitHub 网站上没有 d eadline-cloud-samples 存储库
的本地副本,请将其克隆或以 Z IP 格式下载: git clone https://github.com/aws-deadline/deadline-cloud-samples.git cd deadline-cloud-samples/job_bundles -
在
job_bundles目录中,运行以下命令:deadline bundle gui-submit gsplat_pipeline -
切换到Job-specific 设置选项卡,为输入视频文件和输出 Ply 文件选择路径。
-
选择 “提交”,或先自定义设置。如果输入视频的复杂度更高,则可能需要增加 “近似图像数” 值。
你还可以选择使用哪个 Gaussian Splatting 训练器并为其自定义 CLI 选项。例如,要使用带有双边网格选项的蒙特卡罗马尔可夫链(MCMC)训练器来产生多达200万个间隔,请进行以下更改:
-
将高斯飞溅训练器从切换到。
NERFSTUDIOGSPLAT_SIMPLE_TRAINER -
将 gSplat Simple Trainer 选项文本从修改
--strategy.cap-max 1000000--strategy.cap-max 2000000为获得 200 万个间隔,从修改--no-use-bilateral-grid--use-bilateral-grid为启用双边网格选项。
注意
如果您选择的输入视频或选项需要比 CUDA 队列提供的更高的内存使用量,则需要更新该队列的最低设置。 Re-deploy 使用更新的参数值来创建您的 CloudFormation 模板,或者在 Deadline Cloud 控制台中编辑设置。
监控任务
提交任务后,您可以从 Deadline Cloud 监控器任务表中监控其状态。根据输入视频和您选择的设置,作业可能在 10 分钟内完成,也可能需要几个小时。
作业运行时,打开任务的快捷菜单,然后选择 “查看日志” 以打开日志视图。当管道完成其步骤时,它会更新任务运行详细信息中可见的状态消息。
如果您遇到错误,此视图中的日志输出可帮助您追踪原因。常见原因包括内存不足或无法解析摄像机姿势。在以下任何步骤中,流水线都可能失败:FFmpeg 帧提取、GLOMAP Structure-from-Motion 求解或 nERF Studio 训练。要解决错误,要么调整舰队基础架构,要么使用较低的图像分辨率或图像数量。
下载并查看 Gaussian Splatting .ply
下载和查看输出
-
作业成功完成后,在 Deadline Cloud 监视器的任务表中打开已完成任务的快捷菜单,然后选择下载输出。根据您的设置,它要么显示下载进度,要么提供可用于下载的 CLI 命令。Deadline Cloud 会将
.ply文件保存到您在提交作业时选择的位置。 -
要在浏览器中查看结果,请打开 SuperSplat 网站上的
SuperSplat 编辑器,然后将文件从操作系统的文件浏览器拖到 SuperSplat 页面上。 -
切换 Show/Hide Splats 选项,然后在场景中旋转和移动,找到拍摄的主题。
使用 SuperSplat,你还可以编辑你的高斯飞溅。例如,您可以选择一个球体,反向选择,然后删除球体外部的间隙来裁剪场景。 GitHub 网站上的.ply文件导入到您选择的工具中。
了解您的培训工作成本
Deadline 云监控器包括使用情况浏览器功能,该功能可以估算您运行的作业的成本,显示每次训练的成本。如果您愿意在 CUDA-capable实例可用且中断率足够低的非高峰时段运行测试,则现货 CUDA 队列的成本低于按需队列。使用量资源管理器不会显示任务运行时间之外的成本,例如空闲工作人员实例时间或 Amazon S3 存储桶上的存储空间。
清理
为避免持续收费,请清理您为本教程创建的资源:
清理教程资源
-
如果您部署了 CUDA 农场 CloudFormation 模板,请从 CloudFormation 控制台中删除 CloudFormation 堆栈。
-
如果您使用现有农场并专门为本教程创建了 GPU 队列,请停止或删除该队列。如果您使用的是预先存在的共享队列,请将其保留在原处。
后续步骤
你可以拆分、编辑和混音gsplat_pipeline任务包以满足你的需求。您可以自定义自己的三维重建管道,也可以按照相同的模式在 Deadline Cloud CUDA 农场上运行不同的 CUDA 工作负载。以下说明记录在 GitHub 网站上的
-
使用 GitHub 网站上的 Open Job Descript
ion CLI 在任何地方运行任务,例如本地或 Amazon EC2 实例,而不是在您的农场上运行任务。 -
按照 GitHub 网站上 “任务开发进度” 示例中的模式,将管道的单个任务分解为多个由依赖关系连接的 Open
Job Description 步骤。不同的步骤可以在不同的队列上运行,例如用于提取帧的 CPU-only 队列和用于训练的 GPU 队列。 -
将管道拆分为多个具有不同结构的作业。例如,一项任务需要解决一 Structure-from-Motion 次,另一项任务是迭代尝试不同变体的高斯喷射训练参数。
相关资源
以下资源提供了其他信息:
-
GitHub 网站
上的示例源代码 -
网站上的 CUDA 农
场 CloudFormation GitHub 模板 -
网站上的 nerF Studio conda 套餐食谱
GitHub