AnimateDiff のモーションの学習を試す
「AnimateDiff」のモーションの学習を試したので、まとめました。
1. AnimateDiff のモーションの学習
以下のリポジトリのコードでAnimateDiff のモーションを学習してみます。
2. Colabでの実行
Colabでの実行手順は、次のとおりです。
2-1. インストール
(1) リポジトリの「Fine_tune_AnimateDiff.ipynb」を開き、メニュー「ファイル→ドライブにコピーを保存」。
(2) 「Install」セルの実行。
パッケージをインストールします。
(3) 「Install」セルの下に次のセルを追加して実行。【変更あり】
追加のパッケージをインストールします。
# 追加のパッケージのインストール
!pip install diffusers[torch]==0.26
!pip install compel ffmpeg
2-2. 学習するモーションの準備
(1) 「Project」セルの実行。
プロジェクトの設定を準備します。
(2) 「Download bunny」セルの実行。
動画をダウンロードします。
(3) 「Video to images」セルの実行。
動画を画像に変換します。
(4) 「Make video」セルの実行。
学習するモーションの動画を生成します。フェードインしつつ上スクロールする動画になります。
2-3. 学習
(1)「Default train config」セルに「temporal_context: 24」を追加して実行。【変更あり】
Issueを参考にしてます。
validation_data:
prompts:
- prompt
video_length: 16
width: 512
height: 512
temporal_context: 24
num_inference_steps: 20
guidance_scale: 12.5
use_inv_latent: true
num_inv_steps: 50
(2)「Write train config」セルに「"temporal_context": 24」を追加して実行。【変更あり】
Issueを参考にしてます。
"validation_data": {
"prompts": [
f"{train_prompt}",
],
"video_length": video_length,
"width": width,
"height": height,
"temporal_context": 24,
"num_inference_steps": 20,
"guidance_scale": 12.5,
"use_inv_latent": True,
"num_inv_steps": 50,
},
(3) 「Train」セルの実行。
学習を実行し、モーションのチェックポイントを出力します。(models/Motion_Module/bunny/inv_latents/ddim_latent-1.pt)
2-4. 推論
(1) 「Write infer config」セルの実行。
推論の設定を準備します。
(2) 「Define args」セルの実行。
推論パラメータの設定を準備します。
(3) 「Load models」セルの実行。
モデルを読み込みます。
(4) 「Load latents」セルの実行。
学習したモーションを読み込みます。
(5) 「Infer」セルの次の2箇所を変更して実行。【変更あり】
推論を実行します。
(a) 80行目の「DDIMScheduler」の初期化方法の変更。
scheduler=DDIMScheduler(**OmegaConf.to_container(inference_config.noise_scheduler_kwargs)),
↓
scheduler=DDIMScheduler.from_config(OmegaConf.to_container(inference_config.noise_scheduler_kwargs)),
(b) pipelineに引数「temporal_context = 24,」「fp16 = True,」を追加。
sample = pipeline(
prompt,
negative_prompt = n_prompt,
num_inference_steps = model_config.steps,
guidance_scale = model_config.guidance_scale,
width = args.W,
height = args.H,
video_length = args.L,
latents = latents,
temporal_context = 24, # 追加
fp16 = True, # 追加
).videos
フェードインしつつ上スクロールする動画が生成されます。