

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 用你自己的视频训练 3D 高斯飞溅
<a name="tutorial-gsplat-pipeline"></a>

本教程引导你通过拍摄的视频训练自己的三维高斯喷溅点云。你将 GitHub 网站上的 [ Gaussian Splatting 管道任务包提交到你的 De ](https://github.com/aws-deadline/deadline-cloud-samples/tree/mainline/job_bundles/gsplat_pipeline) adline Cloud 农场。该作业将视频文件作为输入，并生成一个高斯 Splatting `.ply` 文件作为输出。任务完成后，你可以在任何 Gaussian Splatting 查看器中查看结果，例如[SuperSplat](https://github.com/playcanvas/supersplat)在网站上。 GitHub 

该管道运行的单个任务是：

1. [在 FFmpeg 网站上使用 ](https://www.ffmpeg.org/) FFmpeg 提取视频帧。

1.  Structure-from-Motion 使用 [ COLMAP ](https://colmap.github.io/) 网站上的 COLMAP 和网站上的 [ GLOMAP ](https://github.com/colmap/glomap) 进行求解，从而保存针孔模型和未失真的图像。 GitHub 

1. [在 Nerfstudio 网站上使用 ](https://docs.nerf.studio/nerfology/methods/splat.html) nerf Studio splatfacto、在 Nerfstudio 网站上使用 Splatfacto in the Wild 或 g [ splat ](https://docs.nerf.studio/nerfology/methods/splatw.html) 网站上[的 simple\_trainer.py gsplat 库示例](https://docs.gsplat.studio/main/examples/colmap.html)训练 Gaussian Splatting，并将输出保存到您指定的文件中。`.ply`

以下视频演示了 Deadline Cloud 上的 Gaussian Splatting 流水线工作流程。

[![AWS Videos](https://img.youtube.com/vi/VUZwa6IuNdg/0.jpg)](https://www.youtube.com/watch?v=VUZwa6IuNdg)


**预计时间：**几个小时，包括农场设置。根据输入视频和您选择的设置，作业本身可能在 10 分钟内完成，也可能需要几个小时。

运行本教程会产生处理任务的 GPU 工作实例的费用。本[了解您的培训工作成本](#tutorial-gsplat-cost)节介绍如何审查这些费用。

## 概述
<a name="tutorial-gsplat-overview"></a>

要完成本教程，请按照以下步骤操作：

1. 完成先决条件。

1. 设置你的农场。

1. 拍摄拍摄对象的视频。

1. 提交作`gsplat_pipeline`业。

1. 监控作业。

1. 下载并查看 Gaussian Sp `.ply` latting 文件。

1. 清理资源。

## 先决条件
<a name="tutorial-gsplat-prerequisites"></a>

在开始之前，请完成以下设置：

1. [https://aws.amazon.com/resources/create-account/](https://aws.amazon.com/resources/create-account/)如果您还没有 AWS 账户，请创建一个帐户。

## 设置你的农场
<a name="tutorial-gsplat-setup"></a>

你需要一个带有 CUDA GPU 队列的 Deadline Cloud 农场来运行 Gaussian Splatting 作业。要进行设置，请完成以下步骤：

1. 按照 GitHub 网站上的 [ CUDA 农场示例 CloudFormation 模板](https://github.com/aws-deadline/deadline-cloud-samples/tree/mainline/cloudformation/farm_templates/cuda_farm)说明创建具有 CUDA GPU 队列且可以构建 conda 软件包的 Deadline Cloud 农场。

1. 按照 GitHub 网站上的 [ nerF Studio 示例 conda 包配方](https://github.com/aws-deadline/deadline-cloud-samples/tree/mainline/conda_recipes/nerfstudio)说明将 nerF Studio conda 包构建到 CUDA 农场的 Amazon S3 频道中。有关更多信息，请参阅 [ Nerfstudio ](https://docs.nerf.studio/) 网站上的 nERF Studio。

**注意**  
如果你只需要默认`NERFSTUDIO`（splatfacto）训练器，则无需部署 CUDA 农场 CloudFormation 模板或构建自定义 nERF Studio conda 软件包。最低要求是带有 GPU 队列的 Deadline Cloud 农场、`conda-forge`包含在 conda 频道中的队列环境以及 conda 软件包。`ffmpeg colmap glomap nerfstudio cuda``GSPLAT_SIMPLE_TRAINER`和`NERFSTUDIO_SPLATFACTOW`训练器选项取决于仅在定制的 nERF Studio conda 软件包中可用的命令。

## 拍摄拍摄对象的视频
<a name="tutorial-gsplat-capture"></a>

你可以使用智能手机等具有视频功能的摄像头，为你的高斯飞溅拍摄拍摄拍摄对象的视频。考虑以下提示：
+ 使用宽视野，例如相机应用程序中的缩放级别 0.5。由于视野更宽，图像对之间可以使用的对象越多。 Structure-from-Motion 
+ 关闭视频防抖功能。将其关闭可以在所有帧之间保留相同的镜头光学效果，并且可以提高求解质量。
+ 根据拍摄对象规划相机动作。要捕捉一个物体，例如长凳或自行车，在不同的高度和距离下围绕拍摄对象运行几次。要拍摄房间内部，请将摄像机朝内环绕房间外部，然后在不同的摄像机高度重复拍摄。要捕捉结构化程度较低的空间，例如外部地形，请考虑如何在 Gaussian Splatting 中包含你想要的一切，以及如何从多个不同的角度捕捉所有空间。
+ 以缓慢而稳定的动作捕捉视频。
+ 继续移动相机。避免在单一位置停下来平移。

将您从摄像机拍摄的视频复制到计算机以提交给农场。

## 提交 gsplat\_pipeline 作业
<a name="tutorial-gsplat-submit"></a>

**提交 Gaussian Splatting 作业**

1. 如果你在 GitHub 网站上没有 d [ eadline-cloud-samples 存储库](https://github.com/aws-deadline/deadline-cloud-samples)的本地副本，请将其克隆或以 Z [ IP 格式下载：](https://github.com/aws-deadline/deadline-cloud-samples/archive/refs/heads/mainline.zip)

   ```
   git clone https://github.com/aws-deadline/deadline-cloud-samples.git
   cd deadline-cloud-samples/job_bundles
   ```

1. 在`job_bundles`目录中，运行以下命令：

   ```
   deadline bundle gui-submit gsplat_pipeline
   ```

1. 切换到**Job-specific 设置**选项卡，为**输入视频文件**和**输出 Ply 文件选择路径**。

1. 选择 “**提交”**，或先自定义设置。如果输入视频的复杂度更高，则可能需要增加 “**近似图像数” ** 值。

你还可以选择使用哪个 Gaussian Splatting 训练器并为其自定义 CLI 选项。例如，要使用带有双边网格选项的蒙特卡罗马尔可夫链（MCMC）训练器来产生多达200万个间隔，请进行以下更改：

1. 将**高斯飞溅训练器从切换到。** `NERFSTUDIO` `GSPLAT_SIMPLE_TRAINER`

1. 将 ** 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 控制台中编辑设置。

## 监控任务
<a name="tutorial-gsplat-monitor"></a>

提交任务后，您可以从 Deadline Cloud 监控器任务表中监控其状态。根据输入视频和您选择的设置，作业可能在 10 分钟内完成，也可能需要几个小时。

作业运行时，打开任务的快捷菜单，然后选择 “**查看日志” ** 以打开日志视图。当管道完成其步骤时，它会更新任务运行详细信息中可见的状态消息。

如果您遇到错误，此视图中的日志输出可帮助您追踪原因。常见原因包括内存不足或无法解析摄像机姿势。在以下任何步骤中，流水线都可能失败：FFmpeg 帧提取、GLOMAP Structure-from-Motion 求解或 nERF Studio 训练。要解决错误，要么调整舰队基础架构，要么使用较低的图像分辨率或图像数量。

## 下载并查看 Gaussian Splatting .ply
<a name="tutorial-gsplat-view"></a>

**下载和查看输出**

1. 作业成功完成后，在 Deadline Cloud 监视器的任务**表中打开已完成**任务的快捷菜单，然后选择**下载输出**。根据您的设置，它要么显示下载进度，要么提供可用于下载的 CLI 命令。Deadline Cloud 会将`.ply`文件保存到您在提交作业时选择的位置。

1. 要在浏览器中查看结果，请打开 SuperSplat 网站[上的](https://superspl.at/editor)SuperSplat 编辑器，然后将文件从操作系统的文件浏览器拖到 SuperSplat 页面上。

1. 切换 ** Show/Hide Splats ** 选项，然后在场景中旋转和移动，找到拍摄的主题。

使用 SuperSplat，你还可以编辑你的高斯飞溅。例如，您可以选择一个球体，反向选择，然后删除球体外部的间隙来裁剪场景。 GitHub 网站[上的](https://github.com/playcanvas/supersplat/wiki)SuperSplat 文档说明了如何使用编辑器，或者您可以将`.ply`文件导入到您选择的工具中。

## 了解您的培训工作成本
<a name="tutorial-gsplat-cost"></a>

Deadline 云监控器包括使用情况浏览器功能，该功能可以估算您运行的作业的成本，显示每次训练的成本。如果您愿意在 CUDA-capable实例可用且中断率足够低的非高峰时段运行测试，则现货 CUDA 队列的成本低于按需队列。使用量资源管理器不会显示任务运行时间之外的成本，例如空闲工作人员实例时间或 Amazon S3 存储桶上的存储空间。

## 清理
<a name="tutorial-gsplat-cleanup"></a>

为避免持续收费，请清理您为本教程创建的资源：

**清理教程资源**

1. 如果您部署了 CUDA 农场 CloudFormation 模板，请从 CloudFormation 控制台中删除 CloudFormation 堆栈。

1. 如果您使用现有农场并专门为本教程创建了 GPU 队列，请停止或删除该队列。如果您使用的是预先存在的共享队列，请将其保留在原处。

## 后续步骤
<a name="tutorial-gsplat-next-steps"></a>

你可以拆分、编辑和混音`gsplat_pipeline`任务包以满足你的需求。您可以自定义自己的三维重建管道，也可以按照相同的模式在 Deadline Cloud CUDA 农场上运行不同的 CUDA 工作负载。以下说明记录在 GitHub 网站[上的](https://github.com/aws-deadline/deadline-cloud-samples/tree/mainline/job_bundles/gsplat_pipeline#this-sample-is-a-starting-point)示例自述文件中：
+ 使用 GitHub 网站上的 [ Open Job Descript ](https://github.com/OpenJobDescription/openjd-cli) ion CLI 在任何地方运行任务，例如本地或 Amazon EC2 实例，而不是在您的农场上运行任务。
+ 按照 GitHub 网站上 “任务开发进度” 示例[中的模式，将管道的单个任务分解为多个由依赖关系连接的 Open ](https://github.com/aws-deadline/deadline-cloud-samples/tree/mainline/job_bundles/job_dev_progression) Job Description 步骤。不同的步骤可以在不同的队列上运行，例如用于提取帧的 CPU-only 队列和用于训练的 GPU 队列。
+ 将管道拆分为多个具有不同结构的作业。例如，一项任务需要解决一 Structure-from-Motion 次，另一项任务是迭代尝试不同变体的高斯喷射训练参数。

## 相关资源
<a name="tutorial-gsplat-related"></a>

以下资源提供了其他信息：
+ [ GitHub 网站](https://github.com/aws-deadline/deadline-cloud-samples/tree/mainline/job_bundles/gsplat_pipeline)上的示例源代码
+ [网站上的 CUDA 农](https://github.com/aws-deadline/deadline-cloud-samples/tree/mainline/cloudformation/farm_templates/cuda_farm)场 CloudFormation GitHub 模板
+ [网站上的 nerF Studio conda 套餐食谱 ](https://github.com/aws-deadline/deadline-cloud-samples/tree/mainline/conda_recipes/nerfstudio) GitHub 
+ [3D Gaussian Splatting 博客文章 ](https://aws.amazon.com/blogs/spatial/3d-gaussian-splatting-performant-3d-scene-reconstruction-at-scale/)
+ [打开 Deadline Cloud 的职位描述 (OpenJD) 模板](build-job-bundle.md)