View a markdown version of this page

用你自己的视频训练 3D 高斯飞溅 - 截止日期云

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

用你自己的视频训练 3D 高斯飞溅

本教程引导你通过拍摄的视频训练自己的三维高斯喷溅点云。您将 Gaussian Splatting 管道任务包提交 GitHub到您的 Deadline Cloud 农场。该作业将视频文件作为输入,并生成一个高斯 Splatting .ply 文件作为输出。任务完成后,您可以在任何高斯喷射查看器中查看结果,例如。 SuperSplat

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

  1. 使用 FFmpeg 视频处理工具提取视频帧。

  2. Structure-from-Motion 使用 COLMAP GLOMAP 求解,保存针孔模型和未失真的图像。

  3. 使用 nerF Studio splatfacto 、Splatfacto in the Wild 或 simple_trainer.py g splat 库示例训练高斯飞溅,并将输出保存到您指定的文件中。.ply

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

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

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

概述

要完成本教程,请按照以下步骤操作:

  1. 完成先决条件。

  2. 设置你的农场。

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

  4. 提交作gsplat_pipeline业。

  5. 监控作业。

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

  7. 清理资源。

先决条件

在开始之前,请完成以下设置:

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

设置你的农场

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

  1. 按照 CUDA 农场示例 CloudFormation 模板说明创建具有 CUDA GPU 队列且可以构建 conda 软件包的 Deadline Cloud 农场。

  2. 按照 nerF Studio 示例 conda 软件包配方说明将 nerF Studio conda 包构建到 CUDA 农场的 Amazon S3 频道中。

注意

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

拍摄拍摄对象的视频

你可以使用智能手机等具有视频功能的摄像头,为你的高斯飞溅拍摄拍摄拍摄对象的视频。考虑以下提示:

  • 使用宽视野,例如相机应用程序中的缩放级别 0.5。由于视野更宽,图像对之间可以使用的对象越多。 Structure-from-Motion

  • 关闭视频防抖功能。将其关闭可以在所有帧之间保留相同的镜头光学效果,并且可以提高求解质量。

  • 根据拍摄对象规划相机动作。要捕捉一个物体,例如长凳或自行车,在不同的高度和距离下围绕拍摄对象运行几次。要拍摄房间内部,请将摄像机朝内环绕房间外部,然后在不同的摄像机高度重复拍摄。要捕捉结构化程度较低的空间,例如外部地形,可以考虑如何在 Gaussian Splatting 中包含你想要的一切,以及如何从多个不同的角度捕捉所有空间。

  • 以缓慢而稳定的动作捕捉视频。

  • 继续移动相机。避免在单一位置停下来平移。

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

提交 gsplat_pipeline 作业

提交 Gaussian Splatting 作业
  1. 如果你没有 d eadline-cloud-samples GitHub 存储库的本地副本,请将其克隆或以 ZIP 格式下载:

    git clone https://github.com/aws-deadline/deadline-cloud-samples.git cd deadline-cloud-samples/job_bundles
  2. job_bundles目录中,运行以下命令:

    deadline bundle gui-submit gsplat_pipeline
  3. 切换到Job-specific 设置选项卡,为输入视频文件输出 Ply 文件选择路径

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

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

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

  2. 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

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

  2. 要在浏览器中查看结果,请打开SuperSplat 编辑器网站并将文件从操作系统的文件浏览器拖到 SuperSplat 页面上。

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

使用 SuperSplat,你还可以编辑你的高斯飞溅。例如,您可以选择一个球体,反向选择,然后删除球体外部的间隙来裁剪场景。该SuperSplat 文档说明了如何使用编辑器,或者您可以将.ply文件导入到您选择的工具中。

了解您的培训工作成本

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

清理

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

清理教程资源
  1. 如果您部署了 CUDA 农场 CloudFormation 模板,请从 CloudFormation 控制台中删除 CloudFormation 堆栈。

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

后续步骤

你可以拆分、编辑和混音gsplat_pipeline任务包以满足你的需求。您可以自定义自己的三维重建管道,也可以按照相同的模式在 Deadline Cloud CUDA 农场上运行不同的 CUDA 工作负载。示例 READM E 详细遵循以下方向:

  • 使用 Open Job Description CLI 在任何地方运行任务,例如在本地或 Amazon EC2 实例上,而不是在您的农场上运行任务。

  • 按照任务开发进度示例中的模式,将管道的单个任务分解为多个由依赖关系连接的 Open Job Description 步骤。 GitHub 不同的步骤可以在不同的队列上运行,例如用于提取帧的 CPU-only 队列和用于训练的 GPU 队列。

  • 将管道拆分为多个具有不同结构的作业。例如,一项任务需要解决一 Structure-from-Motion 次,另一项任务是迭代尝试不同变体的高斯喷射训练参数。

以下资源提供了其他信息: