目錄
論文題目
Champ: 利用三維參數指導制作可控且一致的人體圖像動畫
安裝
創建 conda 環境:
使用 pip 安裝軟件包
推理
1.?下載預訓練模型
2.?準備準備引導動作數據
運行推理
訓練模型
準備數據集
運行訓練腳本
數據集
政安晨的個人主頁:政安晨
歡迎?👍點贊?評論?收藏
收錄專欄:?零基礎玩轉各類開源AI項目
希望政安晨的博客能夠對您有所裨益,如有不足之處,歡迎在評論區提出指正!
項目首頁:Champ
開源地址:GitHub - fudan-generative-vision/champ: Champ: Controllable and Consistent Human Image Animation with 3D Parametric GuidanceChamp: Controllable and Consistent Human Image Animation with 3D Parametric Guidance - fudan-generative-vision/champhttps://github.com/fudan-generative-vision/champ
論文地址:
https://arxiv.org/pdf/2403.14781
https://arxiv.org/abs/2403.14781
論文題目
Champ: 利用三維參數指導制作可控且一致的人體圖像動畫
在本研究中,我們介紹了一種人體圖像動畫制作方法,該方法利用潛在擴散框架中的三維人體參數模型,來增強 curernt 人體生成技術中的形狀排列和運動引導。該方法利用 SMPL(Skinned Multi-Person Linear)模型作為三維人體參數模型,建立統一的身體形狀和姿勢表示。這有助于從源視頻中準確捕捉復雜的人體幾何和運動特征。具體來說,我們將從 SMPL 序列中獲取的渲染深度圖像、法線貼圖和語義貼圖與基于骨骼的運動引導結合起來,用全面的三維形狀和詳細的姿勢屬性來豐富潛在擴散模型的條件。多層運動融合模塊整合了自我注意機制,用于融合空間域中的形狀和運動潛表征。通過將三維人體參數模型表示為運動導向,我們可以在參考圖像和源視頻運動之間進行人體參數形狀配準。在基準數據集上進行的實驗評估證明,該方法具有生成高質量人體動畫的卓越能力,能準確捕捉姿勢和形狀變化。此外,我們的方法在擬議的野生數據集上也表現出了卓越的泛化能力。
給定一個輸入人體圖像和一個描述運動序列的參考視頻,目標是合成一個視頻,其中圖像中的人物復制在參考視頻中觀察到的動作,從而創建一個可控的、時間上一致的視覺輸出。
安裝
系統要求Ubuntu20.04/Windows 11、Cuda 12.1
已測試 GPUA100、RTX3090
創建 conda 環境:
conda create -n champ python=3.10conda activate champ
使用 pip 安裝軟件包
pip install -r requirements.txt
推理
推理入口點腳本是 ${PROJECT_ROOT}/inference.py。在測試案例之前,有兩項準備工作需要完成:
1.?下載預訓練模型
您可以從我們的 HuggingFace 軟件倉庫輕松獲取推理所需的所有預訓練模型。(https://huggingface.co/fudan-generative-ai/champ)
通過下面的 cmd 將預訓練模型克隆到 ${PROJECT_ROOT}/pretrained_models 目錄中:
git lfs install
git clone https://huggingface.co/fudan-generative-ai/champ pretrained_models
或者,您也可以從源代碼庫中單獨下載:
Champ ckpts:包括去噪 UNet、制導編碼器、參考 UNet 和運動模塊。
(https://huggingface.co/fudan-generative-ai/champ/tree/main)
StableDiffusion V1.5:在 Stable-Diffusion-V1-2 的基礎上進行了初始化和微調。(感謝 runwayml)(https://huggingface.co/runwayml/stable-diffusion-v1-5)
sd-vae-ft-mse:權重旨在與擴散器庫一起使用。(感謝 stablilityai)(https://huggingface.co/stabilityai/sd-vae-ft-mse)
圖像編碼器:從 CompVis/stable-diffusion-v1-4-original 進行微調,以接受 CLIP 圖像嵌入而非文本嵌入。(感謝 lambdalabs)(https://huggingface.co/lambdalabs/sd-image-variations-diffusers/tree/main/image_encoder)
最后,這些預訓練模型的組織結構如下:
./pretrained_models/
|-- champ
| ? |-- denoising_unet.pth
| ? |-- guidance_encoder_depth.pth
| ? |-- guidance_encoder_dwpose.pth
| ? |-- guidance_encoder_normal.pth
| ? |-- guidance_encoder_semantic_map.pth
| ? |-- reference_unet.pth
| ? `-- motion_module.pth
|-- image_encoder
| ? |-- config.json
| ? `-- pytorch_model.bin
|-- sd-vae-ft-mse
| ? |-- config.json
| ? |-- diffusion_pytorch_model.bin
| ? `-- diffusion_pytorch_model.safetensors
`-- stable-diffusion-v1-5
? ? |-- feature_extractor
? ? | ? `-- preprocessor_config.json
? ? |-- model_index.json
? ? |-- unet
? ? | ? |-- config.json
? ? | ? `-- diffusion_pytorch_model.bin
? ? `-- v1-inference.yaml
2.?準備準備引導動作數據
在進行推理時,必須使用通過 SMPL 和渲染生成的指導運動數據。
您可以從 HuggingFace 軟件倉庫下載預渲染示例(https://huggingface.co/datasets/fudan-generative-ai/champ_motions_example),
并將其放入 ${PROJECT_ROOT}/example_data 目錄:
git lfs install
git clone https://huggingface.co/datasets/fudan-generative-ai/champ_motions_example example_data
您也可以按照 SMPL 和渲染文檔制作自己的運動數據。
(champ/docs/data_process.md at master · fudan-generative-vision/champ · GitHub)
最后,${PROJECT_ROOT}/example_data 將變成這樣:
./example_data/
|-- motions/ ?# Directory includes motions per subfolder
| ? |-- motion-01/ ?# A motion sample
| ? | ? |-- depth/ ?# Depth frame sequance
| ? | ? |-- dwpose/ # Dwpose frame sequance
| ? | ? |-- mask/ ? # Mask frame sequance
| ? | ? |-- normal/ # Normal map frame sequance
| ? | ? `-- semantic_map/ # Semanic map frame sequance
| ? |-- motion-02/
| ? | ? |-- ...
| ? | ? `-- ...
| ? `-- motion-N/
| ? ? ? |-- ...
| ? ? ? `-- ...
`-- ref_images/ # Reference image samples(Optional)
? ? |-- ref-01.png
? ? |-- ...
? ? `-- ref-N.png
運行推理
現在,我們將所有準備好的模型和運動數據分別保存在 ${PROJECT_ROOT}/pretrained_models 和 ${PROJECT_ROOT}/example_data 中。
下面是推理命令:
python inference.py --config configs/inference/inference.yaml
動畫結果將保存在 ${PROJECT_ROOT}/results 文件夾中。您可以通過修改 inference.yaml 來更改參考圖像或引導動作。
inference.yaml 中的默認 motion-02 約有 250 幀,需要 ~20GB VRAM。
注:如果您的 VRAM 不足,可以切換到較短的運動序列,或從較長的序列中剪切出一個片段。我們在 inference.yaml 中提供了一個幀范圍選擇器,您可以用 [min_frame_index, max_frame_index] 列表替換它,這樣就能方便地從序列中剪切出一個片段。
訓練模型
?訓練過程包括兩個不同的階段。更多信息,請參閱 arXiv 上論文的 "訓練部分"。
(https://arxiv.org/abs/2403.14781)
準備數據集
準備自己的人體動作訓練視頻(或使用我們的 HuggingFace 示例訓練數據 https://huggingface.co/datasets/fudan-generative-ai/champ_trainning_sample),并修改訓練配置 yaml 中的 data.video_folder 值。
所有訓練視頻都需要處理成 SMPL 和 DWPose 格式。請參閱數據處理文檔(champ/docs/data_process.md at master · fudan-generative-vision/champ · GitHub)。
目錄結構如下:
/training_data/
|-- video01/ ? ? ? ? ?# A video data frame
| ? |-- depth/ ? ? ? ?# Depth frame sequance
| ? |-- dwpose/ ? ? ? # Dwpose frame sequance
| ? |-- mask/ ? ? ? ? # Mask frame sequance
| ? |-- normal/ ? ? ? # Normal map frame sequance
| ? `-- semantic_map/ # Semanic map frame sequance
|-- video02/
| ? |-- ...
| ? `-- ...
`-- videoN/
|-- ...
`-- ...
選擇另一小批數據作為驗證集,并修改訓練配置 yaml 中的 validation.ref_images 和 validation.guidance_folders 根。
運行訓練腳本
要訓練 Champ 模型,請使用以下命令:
# Run training script of stage1
accelerate launch train_s1.py --config configs/train/stage1.yaml# Modify the `stage1_ckpt_dir` value in yaml and run training script of stage2
accelerate launch train_s2.py --config configs/train/stage2.yaml
數據集
Type | HuggingFace | ETA |
---|---|---|
Inference | SMPL motion samples | Thu Apr 18 2024 |
Training | Sample datasets for Training | Sun May 05 2024 |
作者政安晨向他們的工作致敬。