

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 從您自己的影片訓練 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)提交至截止日期雲端陣列。任務採用影片檔案做為輸入，並產生高斯潑濺`.ply`檔案做為輸出。當任務完成時，您可以在任何高斯潑濺檢視器中檢視結果，例如 GitHub 網站上的 [SuperSplat](https://github.com/playcanvas/supersplat)。

管道會執行單一任務：

1. 在 [FFmpeg](https://www.ffmpeg.org/) 網站上使用 FFmpeg 擷取影片影格。

1. 使用 [COLMAP](https://colmap.github.io/) 網站上的 COLMAP 和 [GitHub 網站上的 GLOMAP](https://github.com/colmap/glomap) 解決Structure-from-Motion，以儲存針孔模型和無失真的映像。 GitHub 

1. 使用 Nerfstudio 網站上的 [NeRF Studio splatfacto](https://docs.nerf.studio/nerfology/methods/splat.html)、Nerfstudio 網站上的 [Wild 中的 Splatfacto](https://docs.nerf.studio/nerfology/methods/splatw.html) 或 [gsplat 網站上的 simple\_trainer.py gsplat 程式庫範例](https://docs.gsplat.studio/main/examples/colmap.html)來訓練 Gaussian Splatting，並將輸出儲存到您指定的`.ply`檔案。

下列影片示範在截止日期雲端上的高斯潑濺管道工作流程。

[![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 機群的截止日期雲端陣列，才能執行高斯潑濺任務。若要設定，請完成下列步驟：

1. 遵循 GitHub 網站上的 [CUDA 陣列範例 CloudFormation 範本](https://github.com/aws-deadline/deadline-cloud-samples/tree/mainline/cloudformation/farm_templates/cuda_farm)說明，建立具有 CUDA GPU 機群且可建置 conda 套件的截止日期雲端陣列。

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 機群的截止日期雲端陣列、`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。
+ 關閉影像穩定功能。關閉此功能可在所有影格之間保留相同的鏡頭光學，並可提高求解的品質。
+ 根據主體規劃攝影機動作。若要擷取物件，例如長凳或自行車，請在不同的高度和距離圍繞主體繞行數次。若要擷取房間內部，請跟隨房間外部，攝影機朝內，並在不同的攝影機高度重複。若要擷取較不結構化的空間，例如外部地形，請考慮如何在高斯潑濺中包含您想要的一切，以及如何從多個不同的角度擷取所有空間。
+ 以緩慢且穩定的動作擷取影片。
+ 繼續移動攝影機。避免從單一位置停止和平移。

將您從相機擷取的影片複製到電腦，以提交至陣列。

## 提交 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 選項。例如，若要使用 Monte Carlo Markov 鏈 (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 機群提供之記憶體用量的輸入影片或選項，則需要更新機群的最小設定。使用更新的參數值重新部署 CloudFormation 範本，或從截止日期雲端主控台編輯設定。

## 監控工作
<a name="tutorial-gsplat-monitor"></a>

提交任務之後，您可以從截止日期雲端監控任務表中監控其狀態。根據輸入影片和您選擇的設定，任務可能會在 10 分鐘內完成，或需要數小時。

任務執行時，開啟任務的內容選單，然後選擇**檢視日誌**以開啟日誌檢視。隨著管道逐步完成，它會更新任務執行詳細資訊中可見的狀態訊息。

如果您遇到錯誤，此檢視中的日誌輸出可協助您追蹤原因。常見原因包括記憶體不足或無法解決相機姿勢。管道可能會在下列任何步驟期間失敗：FFmpeg 框架擷取、GLOMAP Structure-from-Motion解析，或 NeRF Studio 訓練。若要解決錯誤，請調整機群基礎設施或使用較低的影像解析度或影像計數。

## 下載並檢視高斯潑濺 .ply
<a name="tutorial-gsplat-view"></a>

**下載並檢視輸出**

1. 當任務成功完成時，請在截止日期雲端監視器的任務資料表中開啟已完成**任務**的內容選單，然後選擇**下載輸出**。根據您的設定，它會顯示下載進度，或顯示您可以用來下載的 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>

截止日期雲端監視器包含用量總管功能，可預估您執行的任務成本，並顯示每個訓練成本。如果您願意在具備 CUDA 功能的執行個體可用且中斷率夠低的離峰時間執行測試，則 Spot 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`任務套件，以符合您的需求。您可以自訂自己的 3D 重建管道，或遵循相同的模式，在截止日期的 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)：
+ 使用 GitHub 網站上的[開放任務描述 CLI](https://github.com/OpenJobDescription/openjd-cli) 在任何地方執行任務，例如本機或 Amazon EC2 執行個體，而不是在您的陣列上。
+ 遵循 GitHub 網站上的任務[開發進度範例中的模式，將管道的單一任務分解為依相依性連線](https://github.com/aws-deadline/deadline-cloud-samples/tree/mainline/job_bundles/job_dev_progression)的多個開放任務描述步驟。不同的步驟可以在不同的機群上執行，例如用於擷取影格的 CPU 機群，以及用於訓練的 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) 
+ 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/)
+ [截止日期雲端的開啟任務描述 (OpenJD) 範本](build-job-bundle.md)