Stable Video Diffusionによるローカルでの動画生成

Stable Diffusionの開発元Stability AIから、ローカルで動かせる本格的な動画生成AI『Stable Video Diffusion』が研究用プレビューとして公開されました。

Stable Video Diffusion のご紹介 — Stability AI Japan

昨年から続く画像生成AIの急速な発展に比べ、動画ではなかなかStable Diffsionに匹敵するようなモデルは現れていませんでした。規模も負荷も画像より大きい動画の生成では、巨大なVRAMや演算が求められます。その学習も凄まじいデータ量になりやすく、ベースとなるようなモデルは登場してきませんでした。

つい先日もMetaがEmu Videoという非常に高性能な動画生成モデルを発表していますが、デモと論文はあっても、コードやウェイトデータは公開されていません。

サービスとしてはStable Diffsionの開発にも携わったRunwayのGen-1, 2や、やや後発のPika Labsなどもあります。人物特化だったりモーフィングだったり、機能を限定したサービスや研究も色々あります。けれどいずれも、ローカルで動かなかったり機能が不足していたりします。動画の生成をローカルで比較的手軽に、極端な高性能を要求せず、しかし実用的に動作するものがほぼ無かったのです。

ただしSDと組み合わせて機能するAnimateDiffがあり、最近SDXLにも対応したのでこれが本命でした。そこに現れた今回のStable Video Diffusion(以下SVD)。あくまで研究目的用ライセンスでの公開ですが、ローカルで、しかも中程度の一般向け機器でも動作します。またその品質がRunwayなどの商用サービスに極端に劣らない可能性も持っています。

この動画はSVDで動作テスト後最初に生成したもので、解像度とフレーム数が少ないのでFFmpegというツールで簡易的な拡大と補間だけしています。それ以外は公開されているスクリプトをほぼそのまま使い、設定もほとんどデフォルト。それでもこれぐらいの品質が出ています。

動画の元にした画像もSDXL 1.0で生成したため、この女性も映る背景も現実には一切存在せず、これを描くための3Dデータなどもありません。また画像も動画もRTX4060 Ti 16GBを載せたWindowsマシンという、そう珍しくない一般用のハードウェアで生成されています。

以下の動画もすべて、生成した画像からSVDで生成したものです。

SVDを使うには

公開されたばかり、しかも研究用のため、誰もが手軽に使える環境はまだ整っていません。しかし早くも対応ツールが出始めています。

sdbds/SVD-webuiを使うと、Windows環境では公式より楽に導入できるかもしれません。あるいはStable DiffusionのGUIとして有名なComfyUIで、暫定的にSVDを使えるkijai/ComfyUI-SVDも登場しました。

ComfyUIを使う場合

と思いきや、11/24にComfyUIが公式にSVDに対応。しかもVRAMも8GBで生成できるようです。

ComfyUI Update: Stable Video Diffusion on 8GB vram with 25 frames and more. | ComfyUI blog

このアップデートでは高速な生成を可能にするLCMや、高解像度の生成時に構図が破綻するのを軽減するKohyaさんのDeep Shrinkなどにも対応しています。ComfyUIを使える場合、これが今一番手軽にSVDに触れる方法でしょう。

ComfyUIは、Stable Diffusionによる画像生成をノードベースのUIで行える、オープンソースのツールです。

ノードベースのUIでは、このような「ノード」を繋いで処理を構築することで、プログラミングの柔軟性とGUIの分かりやすさの両立を目指します。ComfyUIでもそうした恩恵があり、特にノードの繋がりを「キュー」として積み上げていける使い勝手は、試行錯誤とテスト生成を繰り返す画像生成ではとても優れています。

さらにComfyUIは画像生成モデルの最適化も非常にレベルが高く、生成に不可欠なGPUのメモリであるVRAMの消費量も、他の方法で生成するより抑えられる場合があります。Stable Diffusion用のGUI環境というとAUTOMATIC1111/stable-diffusion-webuiが事実上の標準ですが、ノードベースのUIに抵抗がなければ、ComfyUIが今一番おすすめです。

ComfyUIのセットアップ

セットアップ作業は多少慣れが必要かもしれませんが、案内する記事もたくさん公開されているのでそれらをご覧ください。

流れとしては以下の通りですが、Windows環境であれば特にpytorchのセットアップは注意が必要です。

  1. gitでComfyUIのリポジトリをclone
  2. (できれば)venv等で環境を切って有効化
  3. requirements.txtからtorchをコメントアウト
  4. torchを公式の提示するコマンドでインストール
  5. pipでrequirements.txtからインストール
  6. 必要なモデルデータ(safetensors等のウェイトデータ)をmodels/checkpointsにコピー
  7. py main.pyで実行

ComfyUIの動画生成用Workflow

ComfyUIでは「Workflow」という単位で、生成のためのノードの構造やパラメータを保存・復元でき、今回のSVD用に公式の動画生成用Workflowが公開されています。

Video Examples | ComfyUI_examples

ここでは「画像から動画を生成」と「テキストから画像を生成し、生成した画像から動画を生成」という2種類のworkflowが掲載されています。両者に原理的な大きな違いは無いので、好きな方を選んで問題ありません。

今回はテキストから動画までを一度に生成するWorkflowを使ってみましょう。Workflowをロードすると、次の画面が表示されます。

青のブロックが画像の生成、緑のブロックが動画の生成処理です。重要なのはモデルデータを適切に選び直すことぐらいで、ほとんどWorkflowそのままで問題ないはずです。

青のブロックの「Clip Text Encode (Prompt)」というラベルのボックスが、どんな画像を生成するか指示を入力するノードです。今回は”movie. middle-aged man. anger. Dirt, scratches. Lyrical color. realistic.”としました。あとはモデル名を自分の置いたファイル名に合わせて選び直すだけで、他の設定は一切変えずに動画の生成をしてみましょう。

右端にあるパネルから「Queue Prompt」ボタンを押すと、その時点の設定で生成処理がキューに積まれます。連続して生成を行いたい場合は、変更などを適宜加えてキューに積んでいけば、色々な実験を放置して実施できます。

ハードウェアによりますがVRAMが大きく不足していない限り、モデルデータのロードなども含めて長くとも10分程度で動画が生成されるでしょう。2回目以降は主な生成処理だけになるため、1本あたり30秒~5分程度で終わります。

生成結果がこちら。標準ではwebmで出力されますがmp4に変換したものです。私の環境はVRAM16GBの決してハイエンドではないビデオカードを利用していますが、驚くほど簡単に動画が生成できてしまいました。しかし背景に多少動きがあっても、ズームしていくだけでは動画生成の面白さが弱いです。

この動画の生成に使用された画像はComfyUIのtmpフォルダに書き出されているので、今度は画像から動画を生成するWorkflowを使って、異なる動きの動画を生成しましょう。まだまだSVDのパラメータはわかっていないことだらけですが、「motion bucket id」については、大きければ動きを激しくし、小さくすると落ち着く傾向があるようです。また1~10の低い値にすると、カメラや背景よりも被写体が動きやすくなる傾向も確認できています。

とはいえ14フレーム6fpsの動画ですから、かなり見づらいです。後処理として拡大とフレーム補間をかけましょう。

後処理は手軽にFFmpegで行います。FFmpegは汎用の動画編集ユーティリティで、コマンドから手軽に動画の変換や編集が行なえます。FFmpeg単体で可能なこれらの処理は決して最高品質ではありませんが非常に手軽です。より高品質な拡大や補間は、やはりAIを活用したRunwayTopaz Video AIを使うべきでしょう。

今回のSVDは試験目的での公開ですし、まだまだパラメータもこなれていないのかもしれません。正式公開にはもっと分かりやすく汎用的な制御が可能になるのを期待しています。

おまけとして、ComfyUIのガイドに記載のパラメータの解説だけ訳して引用しておきます。

  • video_frames: 生成するビデオ フレームの数。
  • motion_bucket_id: 数値が大きいほど、ビデオ内の動きが多くなります。
  • fps: fps が高くなるほど、ビデオの途切れが少なくなります。
  • augmentation level: 初期画像に追加されるノイズの量。値が高いほど、ビデオは初期画像のように見えなくなります。 動きを増やすには値を大きくします。
  • VideoLinearCFGGuidance: このノードは、これらのビデオ モデルのサンプリングを少し改善します。このノードは様々なフレームにわたって cfg を線形にスケーリングします。例では、最初のフレームは cfg 1.0 (ノードの min_cfg)、中間フレームは 1.75、そして最終フレームは 2.5 になります。 (サンプラーに設定された cfg)。 このように初期フレームから離れるほど徐々に高い cfg が適用されます。
https://comfyanonymous.github.io/ComfyUI_examples/video/

公式サンプル(generative-models)を使う場合

せっかくなのでもうひとつ、Stability AIの公開している「generative-model (https://github.com/Stability-AI/generative-models)」と、付属のサンプルスクリプトを使った例も紹介しましょう。

ただし、環境のセットアップに慣れていないと、venv、torch、Triton、ウェイトファイルの配置、Pythonのパスなどなど引っかかるポイントがあります。通常はComfyUIの方を選んだ方が簡単でしょう。

セットアップが完了したら、streamlitというGUIフレームワーク経由でvideo_sampling.pyを動かすと、次の画面がブラウザで表示されます。

予め用意したモデルウェイトデータを配置しておくと、モデルの選択やロードが行なえます。今回のSVDには14フレーム生成可能な標準版”svd”と、25フレームまで生成可能な”svd_xt”があります。ウェイトデータは別なので必要に応じてそれぞれダウンロードしておきましょう。

モデルのロード完了直後にいきなり randn_like(): argument 'input' (position 1) must be Tensor, not NoneType というエラーが出ますが、画像が未選択のため表示されるものなので無視して問題ありません。

ロード完了後、元画像の指定が行なえます。こちらでも新しく画像を生成して使ってみましょう。

これまでの経験上、動画の生成では流体や炎がよく動いてくれるのと、絵画やイラストより実写的な方が得意で、人物は比較的良い結果が得られます。そこで今度は「松明を持った老人」の画像をSDXLで”A scene of a movie. An old man holding a torch. realistic. Dark night. Sad eyes. old skin.”として生成しました。

“Drag and drop file here”に生成した画像をドロップすると読み込まれるので、あとはパラメータを調整すれば準備完了です。調整といっても、細かなパラメータの持つ効果はまだ理解しきれていません。最低限変更するのはVRAM消費量を抑える”Decode t frames at a time”のみです。私の環境ではVRAM16GBと動画生成には心許ないため、デフォルトの14から最低の「1」に下げています。

カメラワークなど一切指定できないため、すべてSVDが推定したものですが、元の画像に合わせたそこそこ自然な表現が生成されているのではないでしょうか。

もちろん問題も山程あります。フレームレートは低いし、後半に行くほどいかにも画像生成らしいノイズの増加やディテールの欠落があります。松明は明らかに崩れていきますし、瞳はいつものように不正確。光源の強弱もきちんと反映されているとは言えません。また今回は得意そうな画像を選んでいますが、入力次第でまともな結果が得られない場合もあるでしょう。

それでもこの出力が民生用の中程度のマシンで、数分で得られる価値は非常に大きいです。画像生成は無数の表現の特徴を蓄積し再導出することで、目的に合わせた膨大な事前準備なしに、望む表現の出力を可能にする道を具体的に見せてくれました。動画の生成はその次に待ち望んだ軸であり、画像生成の用途や応用も大きく広げます。また、いずれすべての表現を生成が担っていくだろうという、私個人の空想にも重要だと考えています。品質についてはまだ設定の改善の余地は残されていますし、seedを変えながらいわゆるガチャを引くことも今の生成では不可欠でしょう。

さて、今度は補間をflowframesというRIFEなどに対応したAIベースのフレーム補間ツールで行ってみます。

不自然ですがアニメーションGIFっぽい印象はだいぶん減ったでしょうか。FFmpegの結果よりは幾分きれいに感じます。

フレームが進むほど目立っていく画像の劣化を低減できれば、途中や最後のフレームから更に動画を生成することで、モデルのサポートするより長い動画も生成できるでしょう。

これはまだ研究用のプレビューリリースで、正式に公開されるなら改善が加わるはずです。なにより、もしオープンな形で公開されるなら、画像生成で起きたのと同じ多数の手による向上が起きる可能性も高いでしょう。

ローカル動画生成がもたらす変化

こうしたローカルで動く手軽で比較的高品質な動画生成モデルが登場すると、色々な変化が考えられます。直近最も影響を受けるのは競合する動画生成のサービスでしょう。またStabiliity AIのアナウンスにあるように、このモデルをベースにした応用も待っています。そして派生や周辺の開発が進み、リアルタイムで一貫性を持ち汎用的なレンダラとしての生成AIにより近づきます。

競合サービスたち

AIによる動画の生成サービスとして最も有名なのはRunwayでしょう。AIを活用した商用のツールを多数提供しており、動画の生成もVideoToVideo (Gen-1), TextToVideo, ImageToVideo (Gen-2) と幅広く対応しています。SVDは今のところGen-2としか競合しませんが、影響は十分考えられます。

Gen-2のImageToVideoはとても優れていますが、思うように動かなかったり不正な結果が出る確率は低くありません。再生成にもそこそこのコストがかかります。ImageToVideo目当てでRunwayを使うユーザーは、その部分だけでもSVDで代用したくなるかもしれません。ローカルならリテイクのコストは劇的に下がります。

Runwayのツールは幅広くSVDがそれらの代替となりえない以上、すぐに大きな影響は見えないのかもしれません。それでもGen-2の料金見直しなどの圧力にはなり得ます。またSVDがSD程度にオープンとなるなら、他のツールの代替も実装されていく可能性があります。

Pika Labsは現在無料で、Discord経由のTextToVideoやImageToVideoを提供しています。こちらもすぐに競合するのはImageToVideoだけですが、順番待ちの不要なローカル生成は危険です。まもなく1.0公開というタイミングでSVDが現れたのは気の毒ですが、TextToVideoを強化したり、動画生成の品質向上を続けるしかないでしょうか。

他にもKaiberMoonvalleyなど近い機能を提供するサービスはみな影響されます。Xで教えてもらったSEINE(SVDと公開時期がとても近い…)などのFOSSやAnimateDiffも影響を受けるでしょう。Stability AIが今後SVDにどのようなライセンスを適用するのか。手軽なi2vだけでなく、より汎用的なt2vなどどこまで公開するのか。そういった動向が私たちの触れられる動画生成全体に関わってきそうです。

Stability AIの動き

SVDが研究専用である点について、Stability AIのリリース情報では以下の通り触れられています。

最新の進歩に基づいてモデルを更新し、皆さんのフィードバックを取り入れるていますが、この段階では実世界や商用アプリケーションでの使用を意図していません。安全性と品質に関する皆さんの洞察とフィードバックは、最終的なリリースのためのこのモデルの精緻化に重要です。

これは、新しいモダリティでのこれまでのリリースに沿ったものであり、完全なリリースを皆さんと共有することを楽しみにしています。

https://ja.stability.ai/blog/stable-video-diffusion

どこにもSDVがSD相当のオープンさで公開されるとはありません。むしろTextToVideoやマルチビュー推定などより広い用途については、ウェイトリストを公開しています。SDXLでは明確に提供を約束したのに比べ、Stable Audioが学習用のコードしか公開されていないことに近い印象です。

i2vのみとはいえ公開している以上、学習データなどの権利処理の申告な問題が原因ではないでしょう。しかしStability AIの戦略的にオープンとクローズを使い分けた収益化の模索は当然ありえます。

幅広い用途

動画の生成は、単に動画ファイルを作る以上の用途があります。

たとえば3Dの生成。一枚の画像から3Dオブジェクトを生成するには、対象物の形状を写っていない部分まで推定しなければなりません。動画の生成は時間方向の変化だけでなく、角度の変化にも対応するものなので、そこに応用可能です。

マルチビュー生成はSVDのリリース情報でもサンプルが掲載されていますし、Stability AIのSVDに関する論文でも触れられています。こうした成果までオープンになれば、性能の向上が著しいCSMなどの3D推定サービスにも流用されるかもしれません。なによりStability AI自身が3D推定モデルをリリースするのが一番ありえるでしょうか。

また同一対象物の異なる時点を整合性高く描けるなら、同じ人物の異なるショットも可能になっていきます。今はほんの僅かでも、より大きな変化を描けるようになれば、用途は膨大です。

いずれリアルタイムで生成が可能になれば、初期の生成AIレンダラとして、最初はアシスタント用などで使われていくのかもしれません。顧客の潜在的なニーズに合わせた外貌、表情、反応をその場で生成し提供する未来は、恐ろしくまた待ち遠しいです。

動画の生成は画像や音声や3Dなどとも密接で、誰もが体験しやすいその第一歩として、Stable Video Diffusionの今後にとても期待しています。

Stable Diffusionの開発元Stability …