LivePortraitとは?
LivePortraitは、Kuaishou Technologyによって開発された効率的なポートレートアニメーションフレームワークで、1枚のソース画像からリアルな動画を合成することを目的としています。ソース画像を外見の参照として使用し、ドライビング動画、音声、テキスト、または生成から動き(表情と頭のポーズ)を導き出します。
主流の拡散ベースの方法とは異なり、LivePortraitは、計算効率と制御性のバランスを効果的に取るために暗黙のキーポイントベースのフレームワークを探求し、拡張します。実用性のために、一般化、制御性、効率に重点を置いています。LivePortraitは、拡散方法と比較しても高い生成品質を持ちながら、非常に高速です - PyTorchを使用してRTX 4090 GPUでフレームあたり約12.8ミリ秒です。
詳細については、をご覧ください。
LivePortraitの仕組み
高レベルでは、LivePortraitはソース画像とドライビング動画を入力として受け取ります。ソース画像から外見を抽出し、ドライビング動画から動きを抽出します。これらはワーピングおよび生成モジュールを使用して組み合わせられ、ソース画像のアイデンティティを保持しながら、ドライビング動画の動きと表情に従うアニメーションポートレート動画を合成します。
LivePortraitの主要なコンポーネントは次のとおりです:
- 外見特徴抽出器: ソース画像からアイデンティティと外見情報をエンコードします。
- 動き抽出器: ドライビング動画のフレームから動きの特徴(顔のキーポイント)を抽出します。
- ワーピングモジュール: 抽出された動きを使用してソース画像の特徴をワープし、ドライビングのポーズと表情に合わせます。
- 画像生成器: ワープされた特徴を取り、最終的なフォトリアリスティックなアニメーションフレームを合成します。
- スティッチング&リターゲティングモジュール: オプションで生成されたポートレートを元の画像にステッチし、目や口など特定の顔の領域を制御できるようにします。
これらのモジュールは効率的に設計されており、高品質で制御可能なLivePortraitアニメーションを可能にします。
ComfyUI LivePortraitの使い方
ノードとワークフローのおかげで、ComfyUIでリアルなポートレートアニメーションを作成するのが簡単になりました。以下は、彼のComfyUI LivePortraitワークフローの主要なコンポーネントとパラメーターの内訳です。
ComfyUI LivePortrait Img2Vidワークフローの主要ステップ
1. Live Portraitモデルのロード
- "DownloadAndLoadLivePortraitModels"ノードを追加します
- パフォーマンスを最適化するために精度をautoまたはfp16に設定します
2. LivePortrait用の顔検出器の選択
- "LivePortraitLoadCropper" (InsightFace)と"LivePortraitLoadMediaPipeCropper"ノードの間で選択します
- InsightFaceはより正確ですが、非商用ライセンスがあります。MediaPipeはCPU上でより速いですが、精度は低いです
- 両方とも顔を検出してクロップするための"cropper"を出力します
3. LivePortrait用のソース画像のロードと前処理
- "Load Image"ノードを使用してソースポートレート画像をロードします
- "ImageResize"ノードを使用して512x512にリサイズします
- リサイズされた画像を"LivePortraitCropper"ノードに接続します
- 選択した顔検出器の"cropper"出力もこのノードに接続します
- "LivePortraitCropper"ノードの主要パラメーター
"dsize": クロップされた顔画像の出力解像度を設定します
- デフォルトは512で、顔は512x512ピクセルにクロップされます
- 高い値に設定すると、顔が高解像度でクロップされますが、処理が遅くなる可能性があります
- 低い値に設定すると、処理が速くなりますが、詳細が失われる可能性があります
"scale": 顔のクロップのズームイン度合いを制御します
- デフォルトは2.3で、高い値に設定すると顔により近づき、低い値に設定すると頭や背景の一部を含むようになります
- クロップが顔全体と一部の背景を含むように調整する必要がありますが、余分なスペースは含まないようにします
- 良い顔のクロップは、モーショントランスファーがうまく機能するために重要です
- ソース画像のフレーミングに応じて、通常の値は1.8から2.5の範囲です
"face_index": 画像に複数の顔が検出された場合、どの顔をクロップするかを選択します
- デフォルトは0で、最初に検出された顔を選択します
- 画像内の別の顔を選択したい場合は、この値を増やします
- 検出された顔は"face_index_order"設定(デフォルトは大きい順)に基づいて順序付けられます
"vx_ratio"と"vy_ratio"(オプション): クロップを垂直(vy)または水平(vx)にオフセットすることができます
- 値の範囲は-1から1です
- 例えば、vyを0.1に設定すると、フレームサイズの10%だけクロップが上にシフトします
- 自動クロップがわずかにずれている場合に役立ちます
"face_index_order": face_indexで選択する際の検出された顔の順序を設定します
- デフォルトは"large-small"で、顔の大きい順に並びます
- 左から右、上から下など、他の順序にも設定できます
- これは画像に複数の顔がある場合にのみ関連します
4. LivePortrait用のドライビング動画のロードと前処理
- "VHS_LoadVideo"ノードを使用してドライビング動画をロードします
- "frame_load_cap"プリミティブを使用してフレーム数を調整します
- "GetImageSizeAndCount"ノードを使用して動画フレームを480x480にリサイズします
- オプションで別の"LivePortraitCropper"ノードを使用してドライビング動画フレームをクロップすることができます
5. LivePortraitのモーショントランスファーの適用
- "LivePortraitProcess"ノードを追加します
- ロードされたパイプライン、ソース画像のcrop_info、クロップされたソース画像、およびドライビングフレームを"LivePortraitProcess"ノードに接続します
- "LivePortraitProcess"ノードの主要パラメーター
"lip_zero": 有効にすると、特定の閾値を下回るとリップパラメーターがゼロに設定されます
- これは不自然なリップの動きを減らし、リップシンクを改善するのに役立ちます
- 特にすべてのリップの動きを保存したい場合を除き、これを有効にすることをお勧めします
"lip_zero_threshold": "lip_zero"が有効な場合にリップパラメーターがゼロに設定される閾値を設定します
- デフォルトは0.03で、高い値に設定するとリップの動きがより多くゼロに設定され、低い値に設定するとより多くの動きが保存されます
- 抑制されるリップの動きの量を変更したい場合はこれを調整します
"stitching": 有効にすると、スティッチングプロセスを使用してアニメーション化された顔を元の画像にブレンドします
- これはアニメーション化された顔と背景の間のシームレスな移行を作成するのに役立ちます
- 最も自然な見た目の結果を得るためにこれを有効にすることをお勧めします
"delta_multiplier": モーションパラメーターを乗数でスケールします
- デフォルトは1.0で、高い値に設定すると動きが誇張され、低い値に設定すると動きが減少します
- 顔の動きの全体的な強度を調整するために使用できます
- 望ましい効果に応じて通常の値は0.8から1.5の範囲です
"mismatch_method": ソースとドライビングフレームの数が一致しない場合のワークフローの処理方法を設定します
- オプションは"constant"、"cycle"、"mirror"、および"cut"です
- "constant"は最後のフレームを保持し、"cycle"はループし、"mirror"は前後に再生し、"cut"は停止します
- デフォルトは"constant"で、ドライビング動画がソースより長いまたは短い場合に別の動作を望む場合はこれを変更します
"relative_motion_mode": ドライビング動画からソース画像への動きの転送方法を制御します
- オプションは"relative"、"source_video_smoothed"、"relative_rotation_only"、"single_frame"、および"off"です
- デフォルトは"relative"で、相対的なモーショントランスファーを使用します
- "off"はモーショントランスファーを完全に無効にします
- 特定の使用ケースに最適な結果を得るために異なるモードを試してみてください
"driving_smooth_observation_variance": "source_video_smoothed"モーションモードを使用する場合のドライビングモーションの滑らかさを制御します
- 高い値に設定すると動きがより滑らかになり、低い値に設定するとオリジナルの動きがより多く保存されます
- デフォルトは0.000003で、転送されたモーションの滑らかさを変更したい場合はこれを調整します
6. LivePortraitの結果を合成(オプション)
- アニメーション化された顔を元の画像に合成するには、"LivePortraitComposite"ノードを使用します
- 元のソース画像、クロップされたアニメーション画像、LivePortrait出力データ、およびオプションのマスクを接続します
- これにより、アニメーション化された顔がブレンドされたフルフレームが出力されます
7. LivePortraitのリターゲティングの設定(オプション)
- 目や唇の細かい制御のために、"LivePortraitRetargeting"ノードを使用します
- 目および/または唇のリターゲティングを有効にし、その乗数を調整します
- リターゲティング情報を"LivePortraitProcess"に接続します
このワークフローではInsightfaceモデルが必要です。Insightfaceモデル(https://github.com/deepinsight/insightface/releases/download/v0.7/buffalo_l.zip)のライセンスは非商用です。
LivePortrait Vid2Vidに興味がある場合は、をご利用ください。