

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# 独自のビデオから 3D ガウシアンスプラットをトレーニングする
<a name="tutorial-gsplat-pipeline"></a>

このチュートリアルでは、キャプチャしたビデオから独自の 3D ガウシアンスプラット点群をトレーニングする方法について説明します。GitHub ウェブサイトの [Gaussian Splatting パイプラインジョブバンドル](https://github.com/aws-deadline/deadline-cloud-samples/tree/mainline/job_bundles/gsplat_pipeline)を Deadline Cloud ファームに送信します。ジョブはビデオファイルを入力として受け取り、出力としてガウシアンスプラット`.ply`ファイルを生成します。ジョブが完了すると、GitHub ウェブサイトの [SuperSplat](https://github.com/playcanvas/supersplat) など、ガウシアンスプラットビューワーで結果を表示できます。

パイプラインは、次の 1 つのタスクを実行します。

1. [FFmpeg](https://www.ffmpeg.org/) ウェブサイトで FFmpeg を使用して動画フレームを抽出します。

1. [COLMAP](https://colmap.github.io/) ウェブサイトの Structure-from-Motion と GitHub ウェブサイトの [GLOMAP](https://github.com/colmap/glomap) を解決し、ピンホールモデルとゆがんだイメージを保存します。

1. Nerfstudio ウェブサイトの [NeRF Studio splatfacto](https://docs.nerf.studio/nerfology/methods/splat.html)、Nerfstudio ウェブサイト[のワイルドの Splatfacto](https://docs.nerf.studio/nerfology/methods/splatw.html)、または [gsplat ウェブサイトの simple\_trainer.py gsplat ライブラリの例](https://docs.gsplat.studio/main/examples/colmap.html)をトレーニングし、指定した`.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. ガウシアンスプラットファイルをダウンロードして表示します`.ply`。

1. リソースをクリーンアップします。

## 前提条件
<a name="tutorial-gsplat-prerequisites"></a>

開始する前に、次の設定を完了します。

1. [AWS アカウントをまだ作成していない場合は、アカウントを作成します](https://aws.amazon.com/resources/create-account/)。

## ファームをセットアップする
<a name="tutorial-gsplat-setup"></a>

ガウシアンスプラットリングジョブを実行するには、CUDA GPU フリートを備えた Deadline Cloud ファームが必要です。セットアップするには、次の手順を実行します。

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)の指示に従って、CUDA ファームの Amazon S3 チャネルに NeRF Studio conda パッケージを構築します。詳細については、Nerfstudio ウェブサイトの[NeRF Studio](https://docs.nerf.studio/)」を参照してください。

**注記**  
デフォルトの `NERFSTUDIO` (splatfacto) トレーナーのみが必要な場合は、CUDA ファーム CloudFormation テンプレートをデプロイしたり、カスタム NeRF Studio conda パッケージを構築したりする必要はありません。最小要件は、GPU フリートを持つ Deadline Cloud ファーム、conda チャネル`conda-forge`に含まれるキュー環境、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 で使用するイメージペア間で共通するオブジェクトが増えます。
+ ビデオの安定化をオフにします。オフにすると、すべてのフレーム間で同一のレンズ光学系が保持され、ソルブの品質が向上します。
+ 被写体に応じてカメラの動きを計画します。ベンチや自転車などのオブジェクトをキャプチャするには、異なる高さと距離で被写体を数回軌道を回ります。部屋の内部をキャプチャするには、カメラを内側に向けて部屋の外側をたどり、異なるカメラの高さで繰り返します。外地形などの構造化されていないスペースをキャプチャするには、ガウシアンスプラットングに必要なものをすべて含める方法と、そのすべてを複数の異なる角度からキャプチャする方法を検討してください。
+ 低速で安定したモーションで動画をキャプチャします。
+ カメラを動かし続けます。1 つの場所からの停止とパンは避けてください。

カメラからキャプチャしたビデオをコンピュータにコピーして、ファームに送信します。

## gsplat\_pipeline ジョブを送信する
<a name="tutorial-gsplat-submit"></a>

**ガウシアンスプラットジョブを送信するには**

1. GitHub ウェブサイトに [deadline-cloud-samples リポジトリ](https://github.com/aws-deadline/deadline-cloud-samples)のローカルコピーがない場合は、クローンを作成するか、[ZIP としてダウンロードします](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. **ジョブ固有の設定**タブに切り替え、**入力ビデオファイル**と**出力プライファイルの**両方のパスを選択します。

1. **送信**を選択するか、最初に設定をカスタマイズします。入力ビデオの複雑さが高い場合は、**概算イメージ数**の値を増やす必要がある場合があります。

使用する Gaussian Splatting トレーナーを選択し、その CLI オプションをカスタマイズすることもできます。例えば、モンテカルロマルコフチェーン (MCMC) トレーナーと両側グリッドオプションを使用して最大 200 万個のスプラットを生成するには、次の変更を行います。

1. **Gaussian Splatting Trainer** を から `NERFSTUDIO`に切り替えます`GSPLAT_SIMPLE_TRAINER`。

1. **GSplat Simple Trainer Options **テキストを から `--strategy.cap-max 1000000`に変更`--strategy.cap-max 2000000`して 200 万個のスプラットを取得し、 から `--no-use-bilateral-grid` に変更`--use-bilateral-grid`して両側グリッドオプションを有効にします。

**注記**  
CUDA フリートが提供するよりも高いメモリ使用量を必要とする入力ビデオまたはオプションを選択した場合は、フリートの最小設定を更新する必要があります。更新されたパラメータ値を使用して CloudFormation テンプレートを再デプロイするか、Deadline Cloud コンソールから設定を編集します。

## ジョブのモニタリング
<a name="tutorial-gsplat-monitor"></a>

ジョブを送信したら、Deadline Cloud Monitor ジョブテーブルからそのステータスをモニタリングできます。入力ビデオと選択した設定によっては、ジョブが 10 分で終了するか、数時間かかる場合があります。

ジョブが実行されたら、タスクのコンテキストメニューを開き、**ログの表示**を選択してログビューを開きます。パイプラインがステップを実行すると、タスク実行の詳細に表示されるステータスメッセージを更新します。

エラーが発生した場合、このビューのログ出力は原因を追跡するのに役立ちます。一般的な原因には、メモリ不足やカメラの姿勢の解決失敗などがあります。パイプラインは、FFmpeg フレーム抽出、GLOMAP Structure-from-Motion 解決、または NeRF Studio トレーニングのいずれかのステップで失敗する可能性があります。エラーを解決するには、フリートインフラストラクチャを調整するか、低いイメージ解像度またはイメージ数を使用します。

## Gaussian Splatting .ply をダウンロードして表示する
<a name="tutorial-gsplat-view"></a>

**出力をダウンロードして表示するには**

1. ジョブが正常に完了したら、Deadline Cloud Monitor の**タスク**テーブルで、完了したタスクのコンテキストメニューを開き、**出力のダウンロード**を選択します。設定に応じて、ダウンロードの進行状況を表示するか、ダウンロードに使用できる CLI コマンドを表示します。Deadline Cloud は、ジョブの送信時に選択した場所に`.ply`ファイルを保存します。

1. ブラウザで結果を表示するには、[SuperSplat ウェブサイトの SuperSplat エディタ](https://superspl.at/editor)を開き、オペレーティングシステムのファイルブラウザから SuperSplat ページにファイルをドラッグします。 SuperSplat 

1. **スプラットの表示/非表示** オプションを切り替え、シーンを回転して移動し、キャプチャのサブジェクトを見つけます。

SuperSplat では、ガウシアンスプラッティングを編集することもできます。たとえば、球を選択して選択を反転し、その外側のスプラットを削除してシーンをトリミングできます。GitHub ウェブサイトの [SuperSplat ドキュメント](https://github.com/playcanvas/supersplat/wiki)では、エディタの使用方法について説明しています。または、任意のツールに`.ply`ファイルをインポートすることもできます。

## トレーニングジョブのコストを理解する
<a name="tutorial-gsplat-cost"></a>

Deadline Cloud Monitor には、実行するジョブのコストを見積もり、各トレーニングコストを示す使用状況エクスプローラー機能が含まれています。CUDA 対応インスタンスが十分な中断率で利用できるオフピーク時間中にテストを実行することに慣れている場合、スポット CUDA フリートのコストはオンデマンドフリートよりも低くなります。Usage Explorer は、アイドル状態のワーカーインスタンス時間や Amazon S3 バケットのストレージなど、ジョブ実行時間外のコストを表示しません。

## クリーンアップ
<a name="tutorial-gsplat-cleanup"></a>

継続的な料金を回避するには、このチュートリアル用に作成したリソースをクリーンアップします。

**チュートリアルリソースをクリーンアップするには**

1. CUDA ファーム CloudFormation テンプレートをデプロイした場合は、 CloudFormation コンソールからスタックを削除します CloudFormation 。

1. 既存のファームを使用し、このチュートリアル専用の GPU フリートを作成した場合は、そのフリートを停止または削除します。既存の共有フリートを使用した場合は、そのままにします。

## 次の手順
<a name="tutorial-gsplat-next-steps"></a>

ニーズに合わせて`gsplat_pipeline`ジョブバンドルをプルアタッチ、編集、リミックスできます。独自の 3D 再構築パイプラインをカスタマイズすることも、同じパターンに従って Deadline Cloud CUDA ファームで異なる CUDA ワークロードを実行することもできます。以下の指示は、GitHub ウェブサイト[のサンプル README](https://github.com/aws-deadline/deadline-cloud-samples/tree/mainline/job_bundles/gsplat_pipeline#this-sample-is-a-starting-point) に記載されています。
+ ファームではなくローカルまたは Amazon EC2 インスタンスなど、GitHub ウェブサイトの [Open Job Description CLI ](https://github.com/OpenJobDescription/openjd-cli)を使用してジョブを任意の場所で実行します。
+ GitHub ウェブサイトの Job [Development Progression サンプルのパターンに従って、パイプラインの 1 つのタスクを依存関係に接続された複数の Open Job](https://github.com/aws-deadline/deadline-cloud-samples/tree/mainline/job_bundles/job_dev_progression) Description ステップに分解します。フレーム抽出用の CPU のみのフリートやトレーニング用の GPU フリートなど、さまざまなフリートで個別のステップを実行できます。
+ パイプラインを異なる構造の複数のジョブに分割します。たとえば、1 つのジョブで Structure-from-Motion を 1 回解決し、もう 1 つのジョブで異なるバリエーションのガウシアンスプラッティングトレーニングパラメータを繰り返し試します。

## 関連リソース
<a name="tutorial-gsplat-related"></a>

以下のリソースは追加情報を提供します。
+ GitHub ウェブサイトのサンプル[ソースコード](https://github.com/aws-deadline/deadline-cloud-samples/tree/mainline/job_bundles/gsplat_pipeline) 
+ GitHub ウェブサイトの [CUDA ファーム CloudFormation テンプレート](https://github.com/aws-deadline/deadline-cloud-samples/tree/mainline/cloudformation/farm_templates/cuda_farm) 
+ GitHub ウェブサイトの [NeRF Studio conda パッケージレシピ](https://github.com/aws-deadline/deadline-cloud-samples/tree/mainline/conda_recipes/nerfstudio) 
+ [3D Gaussian Splatting ブログ記事](https://aws.amazon.com/blogs/spatial/3d-gaussian-splatting-performant-3d-scene-reconstruction-at-scale/)
+ [Deadline Cloud の Open Job Description (OpenJD) テンプレート](build-job-bundle.md)