西川和久の不定期コラム

高速な動画生成AI「AnimateLCM」登場!そしてStable Video Diffusion 1.1も試した

 去年2023年12月中旬に「Stable Video Diffusion」(以降svd_xt)で1枚の画像から動画にする話をしたが、約2カ月経って新しい技術が登場した。まずその話と、svd_xt 1.1が2月3日に出たので合わせてご紹介したい。

AnimateLCMとは!? = SD 1.5 + LCM + 2vid

 svd_xt 1.1とほぼ同時に出たAnimateLCM。詳細などはここをご覧頂きたいが、ザックリ、以前お話した通常20〜30 Stepかかる画像生成を、4〜10 Step程度にできるLCM(Latent Consistency Model)を使い、SD 1.5の512x512を4 Stepで生成。それをfps分必要枚数作り、つなげて高速に動画を作る仕掛けだ。先のURLにサンプル動画が山のように入っているので、興味のある人はぜひご覧頂きたい。

 たとえば10fpsで2秒の動画を作ろうとすると、20枚の画像が必要となる。1枚だけなら大したことないものの、x20となるとそれなりに時間がかかるのは容易に想像がつく。それをLCMで5分の1程度に短縮するのだから効果は大きい。SDXLでなくSD 1.5ベースなのも生成時間を優先したためだろう。

 早速試したいところだが、AUTOMATIC1111のExtensionsやComfyUIのカスタムNodeは執筆時点でなく、どうしたものか……っと思っていたところ、huggingfaceにデモUIがあり、そのコードが公開されていた。中を見ると、動きそうだったのでダウンロード、ローカルで動かしてみた。以下、そのテストレポートとなる。

インストール

 まずhuggingfaceにあるコードやデータを丸ごとダウンロードする。一番簡単なのはgitを使うこと。ただgitはModelファイルのような巨大なファイルを扱えないため、Git LFS(Large File Storage)をインストールする必要がある。しかし、調べるとWindows版のgitは標準で入っているので特に何もする必要はない。Ubuntuでは以下のようになる。

$ curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | sudo bash
$ sudo apt-get install git-lfs
$ git lfs install

 次に適当なフォルダへ移動しgit clone、環境構築を行なう。

(base) PS D:\> git clone https://huggingface.co/spaces/wangfuyun/AnimateLCM
(base) PS D:\> cd AnimateLCM
git clone直後
(base) PS D:\AnimateLCM> conda create -n AnimateLCM python=3.10
(base) PS D:\AnimateLCM> conda activate AnimateLCM
※ minicona設定済前提。python=3.11では動かない

(AnimateLCM) PS D:\AnimateLCM> pip install -r requirements.txt

(AnimateLCM) PS D:\AnimateLCM> pip install torch==2.0.0 torchvision==0.15.1 torchaudio==2.0.1 --index-url https://download.pytorch.org/whl/cu118
(AnimateLCM) PS D:\AnimateLCM> pip install chardet
※ この2行、Ubuntuでは必要なかった

(AnimateLCM) PS D:\AnimateLCM> pip install .\triton-2.0.0-cp310-cp310-win_amd64.whl
※ tritonはWindowsの場合、事前にこちら(https://huggingface.co/r4ziel/xformers_pre_built/resolve/main/triton-2.0.0-cp310-cp310-win_amd64.whl)をダウンロードして、フォルダへコピーしておく。Ubuntuでは普通にpip install triton

 これで準備OK。あとはアプリを起動する。Webブラウザで下記のURLを入力すれば動くはずだ。

(AnimateLCM) PS D:\AnimateLCM> python app.py
http://127.0.0.1:7860
※ 起動
app.py起動中

 注意点としては、AnimateLCMフォルダ下は約24GBも容量を占有するので、ストレージ残を事前に確認した方が良い。

 なお、LAN上のほかのPCからアクセスしたい場合や、ポート番号を変えたい場合は、app.pyの最後の行にあるdemo.launch()を以下のように書き換える。

app.py
demo.launch(server_name="0.0.0.0", server_port=7888)

さすがに速い動画生成!

 早速動画を作りたいところだが、軽くUIチェック。画面を見ると上から「Pretrained Model Path」、「Select motion module」、「Select base Dreambooth model (required)」、「Select LoRA model (optional)」、「LoRA alpha」、「LCM LoRA alpha」があることが分かる。

 motion moduleはまだベータ版。base Dreambooth modelはこのシステム専用LoRA。それぞれのalphaは重みだ。

 次に「Prompt」と「Negative Prompt」。「Sampling method」はLCMのみ。Sampling steps 4。最大25まで設定可能で大きくすると、細かい描画になるものの、その分、時間がかかる。ただ4だと少し荒いのでできれば6にしたいところ。6だとシャープになる。

 「Width」と「Height」は512。どちらも最大1,024まで可能だが、そもそもSD 1.5ベースなので、512×512、512×768、768×512など推奨解像度にしないと変な絵が出てくる。

起動直後の画面

 「Animation length」は動画の長さ。ただ16でも最大の20でも尺2秒は変わらない。そして「CFG Scale」と「Seed」。注意点としてはSeedを-1にしてもランダムにはならず、必ず右横のサイコロアイコンを押す必要がある。[Generate]ボタンで生成開始。日頃からAUTOMATIC1111を使ってる人にとっては、分かりやすいUIと言えよう。

 まず画面下にサンプルが4つあるので、全て生成してみる。4 Step/2秒の動画がUSB4 GPU Box接続のGeForce RTX 3090で約10秒(PCIe接続のGeForce RTX 4090だと約6秒)。以下生成された4枚となる。後述するsvd_xtだとRTX 4090でさえ2秒で1分20秒ほどかかるので雲泥の差だ。

a boy is holding a rabbit (8 Step)
1girl smiling (4 Step)
1girl,face,white background, (6 Step)
clouds in the sky, best quality (4 Step)

 次にPromptを“(best quality:1.2), photo-realistic of a beautiful japanese woman”……とし、2枚目はmonochrome photo-realisticとして生成みた。結構いい感じなのが出る(Negative Promptはbad quality)。

photo-realistic……
monochrome photo-realistic……

 UIを見ると「Select base Dreambooth model (required)」は3択。上記2つはrealistic2なのだが、realistic1とcartoon3dがあるので試すと……。

realistic1
cartoon3d

 どちらも動きがrealistic2より大きいと言った感じだろうか。その分、崩れかけている。また当初cartoon2dがあったものの、現在はなくなっている。

 ところでこの絵を見て分かる人は分かると思うが、画像生成はSD 1.5のベースModelを使っている 。このModelで作られる絵は、失礼ながら結構ひどいもので絶対にこんな感じにならない。調べるとこれら専用LoRAはそれぞれ約2GB。一般的に配布されてる“美女Model”と同じサイズだ。つまり総入れ替え的な感じになっている。「なるほど納得!」と言ったところ。

 次に尺。生成した動画で調べると8fps固定のようだが、Animation lengthを16から20に変えても2秒/8fpsのまま。最大が20になっているのでこれ以上の数値は入らない。そこでコードに手を入れ試すことにした。具体的にはapp.pyの

label="Animation length", value=16,  minimum=12,   maximum=20,   step=1)

 ここをmaximum=40として、app.pyを再起動すると、40まで設定可能になる。試したところ24で3秒、40で5秒になるが、段々背景がシンプルになり、かつ動かなくなる。おそらく尺が長いと一貫性が保てず破綻するので、細かい背景をなくした上、動きを最小にしていくのだと思われる。また16と20で同じSeed値でも内容は変わる。

Animation length=24で3秒
Animation length=40で5秒

 最後に人以外の作例を4つ(4 Step)。魚だけrealistic2、ほかはrealistic1になっている。

回転寿司?
電車

 いかがだろうか? 時間がかからないので、次々作ってしまうのが難点(笑)。またsvd_xt 1.0の頃によく出た、顔が完全に崩れるケースもレア(なくはない)。

 SD 1.5ベースで解像度が低く8fpsなので、後処理でフレーム補間、Upscaleを入れればもっと画質は良くなるはずだ。この点は未テスト。宿題としたい(発表はX?)。

Stable Video Diffusion 1.1リリース

 2023年12月中旬にStable Video Diffusion 1.0がリリースされ、AI界隈ではちょっとした騒ぎになったが、その1.1が2月3日にリリースされた

 軽くテストしただけだが、1番大きな違いはModelのファイルサイズ。1.0では9GB近くあったのが1.1では半分の4.5GBになっていること。AI系のModelは巨大なのが多く、あっと言う間に1TBがいっぱいになるので、このサイズ縮小は嬉しい限り。

 ほかは少し触った感じだと、1.0では顔が完全に崩れるケースが結構あったのに対して、1.1ではその出現率が減ったことだろうか(減っただけで、なくなったわけではない)。とにかく動きに関しては出るまで分からない運任せのsvd_xtなだけに、まったく使えない率が下がる=効率が上がる。

 以下、1.0と1.1でSeedも含め同一設定で生成したのを掲載したので参考にしてほしい。どちらもかなりリアルだが、1.1は(たまたま)瞬きするので余計リアルに見える。

Stable Video Diffusion 1.0。髪の毛がゆらゆら揺れつつパン
Stable Video Diffusion 1.1。加えて瞬きするのがGood!

 今回生成にはComfyUIのsvd_xt用Workflowを使用。内容的には8fpで作り(1段目)、16fpsへフレーム補間(2段目)、それを24fpsへフレーム補間(3段目)、最後はx2にUpscaleしている(4段目)。ここまで手をかけると、結構らしい動画となる。

生成に使用したComfyUI Workflow

 元画像は1,344×768(16:9)で生成し、それをいったん1.6xへUpscaleした後、また元の解像度に縮小している。これは細部を出すためで、比較すると、たとえばヘッドフォンのロゴっぽい部分などがより詳細に出ているのが分かる。

1,344×768で生成した画像
1.6x Upscaleした後、1,344×768へ縮小した画像。ヘッドフォンのロゴっぽい部分などがより詳細に出ている

 さすがにAnimateLCMと見比べるとまったく別次元の動画だ。ただその分、GeForce RTX 4090でも先の1段目だけで1分20秒ほどかかり、仕様上25フレームしか作れないのが残念なところ(10fpsだと2.5秒の尺)。


svd_xt 1.1のサンプルがモノクロだったのでカラー版。同じく4段階の後処理をしている。先日東京でも雪が積もったので雪バージョン

 以上、AnimateLCMとStable Video Diffusion 1.1のご紹介をした。Stable Diffusionの技術で動画を生成する場合、最大のポイントは一貫性を保つこと。画像でも設定やPromptが少し変われば出てくる絵がコロコロ変わるだけに、動画となると難しい部分となる。この辺り、今年どこまで改善されるか楽しみだ!