Stable Diffusionをベースに開発されたAnimateDiffは、シンプルなテキストプロンプトから動画を簡単に作成できます。画像生成AIを使って動画を生成する基本を知りたい方に向けて、この記事で一気に詳しく解説しています。
※本記事はワークフロー含め、期間限定無料で提供します!
[PR] ComfyUIマスター:カスタムノードとアプリ開発
こんにちわ、AICU media編集部です。
「ComfyUI マスターガイド」第35回目、ついに動画編に突入です!
本記事では、SDXLとAnimateDiffを用いて、テキストから動画を作成する方法を説明します。AnimateDiff単体では、生成された動画は一貫性を保持しにくいですが、その原因と緩和方法をあわせて解説していきます。
[ComfyMaster34] 便利LoRA紹介: Detail Tweaker XLで画像の精細さをコントロール #ComfyUI
AnimateDiffは、Stable Diffusionをベースに開発された画像から動画を生成するtext-to-video(t2v)の技術です。既存のtext-to-image(t2i)モデルを特別な調整なしにアニメーション生成モデルに変換する実用的なフレームワークであり、これにより、ユーザーは高品質な画像生成能力を持つt2iモデルを、そのまま滑らかで視覚的に魅力的なアニメーションを生成するために活用できるようになります。
AnimateDiffの核心は「モーションモジュール」という、事前にトレーニングされたプラグアンドプレイのモジュールにあります。このモジュールは、リアルな動画データからモーションプライア(Motion Priors)を学習しており、一度トレーニングされると、同じ基盤となるT2Iモデルを使用する他のパーソナライズT2Iモデルにもシームレスに統合可能です。具体的な仕組みは以下の3つのステップに分かれます。
モーションプライア(Motion Priors)とは?
モーションプライアとは、動画データから学習される「動きの先行知識」を指します。これには以下の特徴があります。
1. ドメインアダプターの導入
AnimateDiffでは、まず「ドメインアダプター」と呼ばれる別のネットワークを導入します。これは、画像データと動画データの間に存在する画質や内容の違いを補正するためのものです。動画データはしばしば動きのブレや圧縮アーティファクト、ウォーターマークが含まれるため、直接学習させるとアニメーションの品質が低下する恐れがあります。ドメインアダプターを用いることで、モーションモジュールはモーションプライアのみを学習し、画像の質に関する情報は元のT2Iモデルが保持します。
2. モーションモジュールの学習
次に、「モーションモジュール」を学習します。これは、動画データから動きのパターンであるモーションプライアを抽出し、アニメーション生成に必要な時間的なダイナミクスをモデルに追加する役割を担います。モーションモジュールは、Transformerアーキテクチャをベースにしており、動画の各フレーム間の関連性を学習します。このモジュールをT2Iモデルに統合することで、生成される画像が時間とともに自然に動くアニメーションへと変換されます。
3. MotionLoRAによる動きのパターンの微調整
最後に、「MotionLoRA」と呼ばれる軽量な微調整技術を用います。これは、既に学習済みのモーションモジュールを新しい動きのパターンに適応させるためのもので、例えばカメラのズームインやパンニングといった特定の動きを追加したい場合に使用します。MotionLoRAは少数の参考動画と短時間のトレーニングで新しい動きのパターンを学習できるため、ユーザーは簡単に特定の効果を追加できます。
AnimateDiffの主な利点は以下の通りです。
さて早速はじめていきましょう。
ComfyUIでのカスタムノードのインストール方法があやふやな方はこちらを復習お願いいたします。
★復習[ComfyMaster4]ComfyUIカスタムノード導入ガイド! 初心者でも安心のステップバイステップ解説
Google ColabでのComfyUI環境設定から学びたい方はこちら
★復習[ComfyMaster1] Google ColabでComfyUIを動かしてみよう!
準備ができたら、以下のカスタムノードを使用するため、ComfyUI Managerからインストールしてください。
ComfyUI-AnimateDiff-Evolvedは、Stable Diffusionモデルを拡張して動画生成を可能にするカスタムノードです。元のAnimateDiffを進化させたバージョンで、動画生成のためのモーションモジュールと高度なサンプリング技術を組み込んでいます。
https://github.com/Kosinkadink/ComfyUI-AnimateDiff-Evolved
ComfyUI-VideoHelperSuiteは、動画生成を支援するためのカスタムノードです。動画の編集や加工を容易にする機能を提供します。今回は、一連の画像を動画にして保存するノードを使用するために必要となります。
https://github.com/Kosinkadink/ComfyUI-VideoHelperSuite
今回は、RealVisXLのLightningバージョンを使用します。Lightningバージョンでは、サンプリングのステップ数を4-6回に抑えることができます。生成量の多いAnimateDiffでは、TurboやLightningなどの数ステップで生成完了するモデルを選ぶと良いでしょう。
以下のリンクよりモデルをダウンロードし、「ComfyUI/models/checkpoints」フォルダに格納してください。
SDXLのモデルで動画生成するため、SDXLのモーションモジュールをダウンロードします。SDXLのモーションモデルには、「AnimateDiff-SDXL」と「Hotshot-XL」の2種類があります。AnimateDiff-SDXLは16フレーム、Hotshot-XLは8フレームのコンテクストに対応しており、AnimateDiff-SDXLのコンテクストは長く、一貫した動画を作成しやすいですが、一方で品質が悪いことが指摘されています。詳細は、以下のIssueをご確認ください。
https://github.com/guoyww/AnimateDiff/issues/382
今回は、両方のモデルを使用してみます。それぞれ以下よりダウンロードし、「ComfyUI/custom_nodes/ComfyUI-AnimateDiff-Evolved/models」フォルダに格納してください。
https://huggingface.co/guoyww/animatediff/blob/main/mm_sdxl_v10_beta.ckpt
https://huggingface.co/hotshotco/Hotshot-XL/blob/main/hsxl_temporal_layers.f16.safetensors
以下がワークフローの全体像になります。このワークフローは、テキストプロンプトから直接アニメーション動画を生成する簡潔な例です。AnimateDiffを使用することで、フレーム間の一貫性を保ちながら滑らかなアニメーションを生成します。低ステップ数(4ステップ)での高速生成を行いながら、AnimateDiffの特性を活かして品質を維持しています。
ワークフローは、以下のリンクよりダウンロードしてください。
https://note.com/api/v2/attachments/download/2aaedfeba22c3cfd52c3184503b3c893
このワークフローの構造を以下の通りにフローチャートで表現します。
以下に、このワークフローの主要な部分とその機能を詳細に説明します。
通常、モーションモジュールでは、短いフレーム数しか扱えない(AnimateDiffは16フレーム、HotshotXLは8フレーム)です。これをかいかつするのがContext OptionsとView Optionsです。これらは、アニメーションを作成する際に、AnimateDiffやHotshotXLといったモデルの制限を超えて、より長いアニメーションを作るための方法です。
Context Optionsは、アニメーションの一部ずつを処理する方法です。これにより、同時に使うメモリ(VRAM)の量を制限できます。要するに、大きな作業を小分けにして進めることで、VRAMの負担を減らしているのです。これには、Stable Diffusionの拡散処理やControlNetなどの補助技術が含まれます。
View Optionsは、モーション(動き)を処理するモデルが、見るべきデータ(潜在変数)を小分けにする方法です。この方法ではVRAMを節約できませんが、処理が安定しやすく、より速く動きます。なぜなら、データが全ての処理を経る必要がないからです。
Context OptionsとView Optionsの違いは、Context Optionsがメモリを節約して少しずつアニメーションを処理するのに対し、View Optionsはメモリの節約はできませんが、速くて安定しています。
この2つを組み合わせることで、長くて安定したアニメーションを作りながら、VRAMの使用量をうまく調整することができます。VRAMに余裕がある場合は、処理をより速く行うためにView Optionsをメインに使うこともできます。
「Sample Settings」ノードは、通常のKSamplerノードでは設定できないサンプリングプロセスをカスタマイズするための機能を提供します。デフォルトの設定では何の影響も与えないため、安全に接続しても動作に変更はありません。
Sample Settingsのnoise_typeで生成されるノイズのタイプを選択できます。この中のFreeNoiseは、安定性を増すために利用できます。FreeNoiseは、FreeInitという、動画生成モデルにおける時間的一貫性を向上させるための手法を用いています。この方法は、追加のトレーニングを行うことなく、ビデオ拡散モデルを使用して生成された動画の全体的な品質を改善します。
基本的に最初のcontext_lengthウィンドウと同じ初期ノイズをコンテキストの重複部分で再利用し、それ以降のコンテキストウィンドウの重複部分にはランダムにシャッフルされたバージョンを配置します。コンテキストウィンドウの重複部分でノイズをシャッフルしないため、context_lengthフレームごとに内容が繰り返されるという副作用があります。
前述したFreeInitの特性上、FreeInitはイテレーションが最低2回必要になります。FreeInitの動作としては、最初のイテレーションで生成された動画から低周波のノイズを取得し、それをランダムに生成された高周波のノイズと組み合わせて次のイテレーションを実行します。各イテレーションは完全なサンプルであり、イテレーションが2回行われると、1回またはイテレーションオプションが接続されていない場合に比べて実行時間が2倍になります。
それでは、ワークフローを実行してみましょう。マシンスペックにもよりますが、5秒の動画を生成するにも多くの時間を要します(A100のGPUで1分、A6000で3分ほどでした)。
以下は、Sample Settingsを適用しない場合の生成結果です。プロンプトに従い女性の動画が生成されていますが、一貫性がないことが分かります。これは、AnimateDiffの特性で、Context Optionsノードのcontext_length内でしかコンテクストを正しく保持できないためです。context_overlapで数フレームをオーバーラップさせることで、次のコンテクストでの生成に前の生成結果を反映させますが、それも限界があるようです。
次にSample Settingsのnoise_typeをFreeNoiseにして生成結果です。先ほどよりも変化が少なく、コンテクスト間で一貫性が保たれていることが分かります。
その他に、一貫性を保つ方法として、Motion LoRAを使う方法があります。しかし、Motion LoRAは、SD1.5用しか存在せず、SDXLには適用できません。SD系列だと、SDXLがメジャーになっている中で、SD1.5を使用する人はあまりいないと思います。そのため、これがSDXL+AnimateDiffでのt2vの限界だと思います。ただし、この特性を活かした面白い表現をしたり、抽象的な表現をするには十分にAnimateDiffを活かせると思います。
次は、Sample Settingsのnoise_typeをdefautで、モーションモデルにHotshot-XLを使用して生成した結果です。コンテクスト長が8フレームしかないため、0.5秒ごとにコンテクストが変わってしまい、AnimateDiff-SDXL以上に変化の激しい動画となっています。
次にSample Settingsのnoise_typeをFreeNoiseにして生成した結果です。AnimateDiff-SDXLと同様、先ほどよりも一貫性が増しました。Hotshot-XLの方がAnimateDiff-SDXLより明瞭だと言われますが、対応している解像度がAnimateDiff-SDXLは1024×1024、Hotshot-XLは512×512なので、解像度が異なることもあり、違いが分かりづらいです。Hires.fixすれば、どちらもそれほど気にならないかもしれません(text2videoに限れば)。
AnimateDiffは、Stable Diffusionの技術を基に、画像生成AIの枠を超えて動画生成を実現した画期的なツールです。軽量でありながら、自然で一貫性のあるアニメーションを生成できるため、クリエイティブな用途に広く活用が期待されます。特に、テキストプロンプトから直接アニメーションを生成できる点は、デザイナーやアニメーターにとって大きな利便性を提供します。
しかし、現状ではContext Optionsノードの制約やMotion LoRAの対応が限定的で、完全に安定した結果を得るためには工夫が必要です。今後、SDXLシリーズに最適化された技術の進展により、さらに質の高い動画生成が可能になることが期待されます。
新しい技術に挑戦し続けることは、より高品質で魅力的なコンテンツを生み出す力となります。AnimateDiffを駆使して、これまでにないアニメーション表現に挑戦してみてください。
次回は、AnimateDiffでvideo-to-video(v2v)をする方法を紹介します。乞うご期待!
X(Twitter)@AICUai もフォローよろしくお願いいたします!
[PR] ComfyUIマスター:カスタムノードとアプリ開発
画像生成AI「Stable Diffusion」特に「ComfyUI」を中心としたプロ向け映像制作・次世代の画像生成を学びたい方に向けたプランです。最新・実用的な記事を優先して、ゼロから学ぶ「ComfyUI」マガジンからまとめて購読できます。 メンバーシップ掲示板を使った質問も歓迎です。
ゼロから学ぶ「ComfyUI」マガジン
https://note.com/aicu/m/md2f2e57c0f3c
マガジン単体の販売は1件あたり500円を予定しております。
2件以上読むのであればメンバーシップ参加のほうがお得です!というのもメンバーシップ参加者にはもれなく「AICU Creator Union」へのDiscordリンクをお伝えし、メンバーオンリー掲示板の利用が可能になります。
https://note.com/aicu/membership/boards/61ab0aa9374e/posts/db2f06cd3487?from=self
もちろん、初月は無料でお試しいただけます!
毎日新鮮で確かな情報が配信されるAICUメンバーシップ。
退会率はとても低く、みなさまにご満足いただいております。
✨️オトクなメンバーシップについての詳細はこちら
この記事の続きはこちらから https://note.com/aicu/n/n1728bd0668f5
Originally published at https://note.com on Nov 20, 2024.