さらに視覚的な結果については、プロジェクト ページをチェックしてください。
詳細については、論文を参照してください。
環境のクローンを作成し、必要な依存関係をインストールしてください。
conda env create -f environment.yml
conda activate occfusion
conda install pytorch==2.4.0 torchvision==0.19.0 torchaudio==2.4.0 pytorch-cuda=12.4 -c pytorch -c nvidia
pip install submodules/diff-gaussian-rasterization
pip install submodules/simple-knn
pip install " git+https://github.com/facebookresearch/pytorch3d.git "
pip install --upgrade https://github.com/unlimblue/KNN_CUDA/releases/download/0.2/KNN_CUDA-0.2-py3-none-any.whl
Wild2Avatar によってサンプリングされた 6 つの OcMotion シーケンスのトレーニング/レンダリング コードを提供します。前処理されたシーケンスが役立つと思われる場合は、Wild2Avatar と CHOMP を引用することを検討してください。
処理されたシーケンスをここからダウンロードし、ダウンロードしたシーケンスを./data/
ディレクトリに解凍してください。 ./data/
の構造は次のようになります。
./
├── ...
└── data/
├── 0011_02_1_w2a/
├── images/
├── masks/
└── ...
├── 0011_02_2_w2a/
├── 0013_02_w2a/
├── 0038_04_w2a/
├── 0039_02_w2a/
└── 0041_00_w2a/
ここからニュートラル SMPL モデルを登録してダウンロードしてください。ダウンロードしたモデルをフォルダー./assets/
に置きます。
より効率的な標準空間 SDS を有効にするために、標準 2D ポーズ用の OpenPose キャンバスが事前に計算されており、ここからダウンロードできます。ダウンロードしたフォルダーをフォルダー./assets/
に置きます。
ステージ 0 (オプション、以下を参照) でモデルをトレーニングするには、完全な人間による修復のためのバイナリ マスクを計算する必要があります。セグメンテーションにはSAM-HQを利用しました。マスクを自分で計算したい場合は、事前トレーニング済みの重みsam_hq_vit_h.pth
ここからダウンロードし、ダウンロードした重みをフォルダー./assets/
に配置してください。
ダウンロードが成功すると、 ./assets/
の構造は次のようになります。
./
├── ...
└── assets/
├── daposesv2
├── -5.png
└── ...
├── SMPL_NEUTRAL.pkl
└── sam_hq_vit_h.pth (optional)
すべてのOcMotionシーケンスに対して事前トレーニングされたモデルを提供し、迅速な推論/評価を可能にします。ここからocmotion/
フォルダーをダウンロードし、ダウンロードしたフォルダーを./output/
に配置してください。
OccFusion のトレーニングは 4 つの連続したステージで構成されます。ステージ 0 と 2 はオプションで、カスタマイズされたモデル、ソブラー、プロンプトを使用して、遮蔽された人間を修復します。組み合わせが異なると、修復結果に大きな影響を与える可能性があります。人間の生成を条件とした高品質のポーズはこの作品の範囲外です。ユーザーが自分で試すことができるように、コード (以下のステージ 0 とステージ 2 を参照) を提供します。
ここからダウンロードできるように、(論文で結果を再現するために) 事前に計算された生成を提供しています。解凍して、 oc_generations/
フォルダーをルート ディレクトリに直接配置してください。私たちの計算を使用すると、ステージ 0 と 2 をスキップできます。
トレーニング前に、Hugging Face モデルをキャッシュするためのカスタマイズされたディレクトリを指定することを強くお勧めします。これは、トレーニング スクリプトの最初の実行時に自動的にダウンロードされます。
export HF_HOME= " YOUR_DIRECTORY "
export HF_HUB_CACHE= " YOUR_DIRECTORY "
ステージ 0 (初期化ステージ) を実行して、SAM と安定拡散を使用して完全な人間のバイナリ マスクをセグメント化して修復します。 OctMotion シーケンスでステージ 0 を実行するには、対応するSUBJECT
変数のコメントを解除し、
source run_oc_stage0.sh
セグメント化されたバイナリ マスクは./oc_genertaions/$SUBJECT/gen_masks/
ディレクトリに保存されます。
ステージ 1 を実行して、最適化ステージを開始します。 OcMotion シーケンスでステージ 1 を実行するには、対応するSUBJECT
変数のコメントを解除し、
source run_oc_stage1.sh
チェックポイントはレンダリングとともに./output/$SUBJECT/
に保存されます。
最適化されたモデルを使用してステージ 2 を実行し、incontext-inpainting を起動します。 OctMotion シーケンスでステージ 2 を実行するには、対応するSUBJECT
変数のコメントを解除し、
source run_oc_stage2.sh
インペイントされた RGB イメージは、 ./oc_genertaions/$SUBJECT/incontext_inpainted/
oc_genertaions/$SUBJECT/incontext_inPaint/ ディレクトリに保存されます。
最後に、修復された RGB イメージと最適化されたモデル チェックポイントを使用して、ステージ 3 を実行してリファインメント ステージを開始します。 OctMotion シーケンスでステージ 3 を実行するには、対応するSUBJECT
変数のコメントを解除し、
source run_oc_stage1.sh
チェックポイントはレンダリングとともに./output/$SUBJECT/
に保存されます。
ステージ 1 と 3 では、トレーニングの終了後にレンダリング プロセスが自動的にトリガーされます。トレーニングされたチェックポイントで明示的にレンダリングするには、次を実行します。
source render.sh
このコード ベースは GauHuman に基づいて構築されています。 SDS ガイダンスは DreamGaussian から借用しています。
遮蔽された人間のレンダリングに関する以前の作品もチェックしてください。 OccNeRF と Wild2Avatar。
このリポジトリが仕事や研究に役立つと思われる場合は、以下を引用してください。
@inproceedings { occfusion ,
title = { OccFusion: Rendering Occluded Humans with Generative Diffusion Priors } ,
author = { Sun, Adam and Xiang, Tiange and Delp, Scott and Fei-Fei, Li and Adeli, Ehsan } ,
booktitle = { The Thirty-eighth Annual Conference on Neural Information Processing Systems } ,
url = { https://arxiv.org/abs/2407.00316 } ,
year = { 2024 }
}