1枚の画像から話す動画を作る「V-Express」の仕組みと使い方

画像生成

はじめに

ポートレートビデオ生成とは、1枚の画像からその人物が話している動画を作ることです。

これまでの手法では、次のような課題がありました。

  • テキスト、音声、ポーズなどの制御信号のバランスを取るのが難しい
  • 特に音声の影響が他の信号に隠れてしまいがち
  • 弱い信号だけで学習させると、うまく学習できない

V-Expressは、これらの課題を「段階的なドロップアウト」という手法で解決します。
これにより、音声などの弱い信号も効果的に反映させつつ、ポーズや画像も考慮した自然な動画生成を可能にしています。

V-Express: 条件付きドロップアウトによるポートレート動画生成の段階的トレーニング (V-Express: Conditional Dropout for Progressive Training of Portrait Video Generation)
論文の概要この論文は、シングル画像からポートレート動画を生成するための新しい手法V-Expressを紹介します。V-Expressは、異なる強度の制御信号(テキスト、音声、参照画像、ポーズ、深度マップなど)をバランス良く扱うことで、高品質な...

リリース情報

  • 2024/06/05:論文を公開
  • 2024/06/03:ComfyUI用のプラグインをリリース
  • 2024/05/29:動画の揺れを軽減する後処理を追加
  • 2024/05/23:コードとモデルを公開

インストール方法

必要なライブラリをインストールします。

# 必要ライブラリのインストール
pip install diffusers==0.24.0
pip install imageio-ffmpeg==0.4.9
pip install insightface==0.7.3
pip install omegaconf==2.2.3
pip install onnxruntime==1.16.3
pip install safetensors==0.4.2
pip install torch==2.0.1
pip install torchaudio==2.0.2
pip install torchvision==0.15.2
pip install transformers==4.30.2
pip install einops==0.4.1
pip install tqdm==4.66.1
pip install xformers==0.0.22
pip install av==11.0.0

# コードのダウンロード 
git clone https://github.com/tencent-ailab/V-Express

# モデルのダウンロード
cd V-Express
git lfs install
git clone https://huggingface.co/tk93/V-Express
mv V-Express/model_ckpts model_ckpts

これで、スクリプトを使う準備ができました。

モデルのダウンロード

必要なモデルは以下の場所から入手できます。

  • stability-ai/sd-vae-ft-mse
  • runwayml/stable-diffusion-v1-5 (unetの設定ファイルのみ)
  • facebook/wav2vec2-base-960h
  • insightface/buffalo_l

シナリオ1:Aの写真とAの別シーンでの会話動画がある場合(ベストプラクティス)

Aの写真と、Aが別のシーンで話している動画がある場合は、以下のスクリプトを実行します。
このモデルは、与えられた動画と一致する会話動画を生成できます。
プロジェクトページで、さらに多くの例を見ることができます。

!python inference.py \
    --reference_image_path "./test_samples/short_case/tys/ref.jpg" \ # 参照画像のパス(Aの写真)
    --audio_path "./test_samples/short_case/tys/aud.mp3" \ # 音声ファイルのパス
    --kps_path "./test_samples/short_case/tys/kps.pth" \ # キーポイント(顔のランドマーク)のパス  
    --output_path "./output/short_case/talk_tys_no_retarget.mp4" \ # 出力動画のパス
    --retarget_strategy "no_retarget" \ # リターゲット戦略(この場合は、リターゲットなし)
    --num_inference_steps 25 # 推論ステップ数(生成品質と処理時間のトレードオフ)

オプションの説明

  • --reference_image_path:参照画像(生成したい人物の写真)のパスを指定します。
  • --audio_path:生成する動画の音声ファイルのパスを指定します。
  • --kps_path:参照画像から抽出したキーポイント(顔のランドマーク)のデータのパスを指定します。
  • --output_path:生成された動画の出力パスを指定します。
  • --retarget_strategy:顔のリターゲット戦略を指定します。ここでは、リターゲットなしを選択しています。
  • --num_inference_steps:推論ステップ数を指定します。値が大きいほど品質が向上しますが、処理時間も長くなります。

使い方

このスクリプトを実行すると、指定した参照画像の人物が指定した音声で話している動画が生成されます。
生成された動画は、--output_pathで指定したパスに保存されます。

注意点

  • 参照画像と音声ファイルは、同じ人物のものを使用することをお勧めします。
  • キーポイントデータ(kps.pth)は、参照画像から事前に抽出しておく必要があります。
  • 生成品質と処理時間のバランスは、--num_inference_stepsの値で調整できます。

使い方の注意点

会話の顔生成では、ターゲット動画と参照キャラクターの顔の向きが似ているほど良い結果になります。

また、現在のモデルは英語の方が性能が高く、他言語はまだ十分テストされていません。

以上が、V-Expressの概要になります。
弱い条件を徐々に反映させる工夫により、より自然なポートレートビデオの生成を実現した画期的な手法だと言えるでしょう。

GoogleColabノートブック

Google Colab

参考サイト

GitHub - tencent-ailab/V-Express: V-Express aims to generate a talking head video under the control of a reference image, an audio, and a sequence of V-Kps images.
V-Express aims to generate a talking head video under the control of a reference image, an audio, and a sequence of V-Kps images. - tencent-ailab/V-Express
tk93/V-Express · Hugging Face
We’re on a journey to advance and democratize artificial intelligence through open source and open science.

コメント

タイトルとURLをコピーしました