ジャコ Lab

プログラミング関連のメモ帳的ブログです

diffusers v0.15.0 の Text-to-Video Zero を Google Colab で使ってみる

TextToVideoZeroPipeline x Minea/MeinaMix_V11

zako-lab929.hatenablog.com

diffusers v0.15.0 には上記で使用した Text-to-Video 以外に Text-to-Video Zero というものが紹介されていました。

github.com

この記事では Text-to-Video Zero を Google Colab で使ってみようと思います!

Text-to-Video Zero とは

diffusers v0.15.0 で diffusers に統合された Text-to-Video です。
ゼロショットで動画を生成してくれるようです。

リリースノートからは Demo ページに飛ばされ、Demo ページから GitHub に到達し、GitHub から Hugging Face のドキュメントに到達しました。

ゼロショットって何?

github.com

元々は上記の GitHub で制作されたもの?

huggingface.co

Hugging Face のドキュメントに diffusers 経由での使い方が載っていました。Text-to-Video Zero では以下のような方法を用いて動画を生成できるようです。

・テキストプロンプトから動画を生成
・ポーズやエッジを使って動画を生成
・Instruct-Pix2Pix
ControlNet を触ってきたので用語がわかるぞ!

ゼロショットとは

ゼロショット学習(Zero-shot learning)は、機械学習の一種であり、モデルが新しいクラスやタスクに対して事前のトレーニングなしに学習や推論を行う能力を指します。通常、機械学習モデルはトレーニングデータに基づいて学習され、そのデータセットに含まれていたクラスやタスクに対してのみ良い性能を発揮します。しかし、ゼロショット学習では、新しいクラスやタスクに対しても適応できるように設計されています。

例えば、画像認識のタスクにおいて、モデルが犬や猫などの通常のクラスに対してトレーニングされた後、新しいクラスである「シマウマ」や「キリン」に対しても正確な予測ができるようになる、といったシナリオが考えられます。

ChatGPT さんによると、上記のことだそうです。

つまり、使用するモデルは決まっていなく、訓練済みのモデルであれば良い感じに推論してくれるってこと?

やってみる

import torch
from diffusers import TextToVideoZeroPipeline

# パイプラインの準備
pipe = TextToVideoZeroPipeline.from_pretrained(
    "runwayml/stable-diffusion-v1-5", 
    torch_dtype=torch.float16
).to("cuda")

# パイプラインを実行
prompt = "A panda is playing guitar on times square"
result = pipe(prompt=prompt).images
result = [(r * 255).astype("uint8") for r in result]

# 出力
imageio.mimsave("video.mp4", result, fps=4)

パイプラインには TextToVideoZeroPipeline を使用し、
モデルは "runwayml/stable-diffusion-v1-5" を使用するようです。

ドキュメント通りにやったらimageioが Not Defined で怒られた!

Google Colab 上のインストールされているのかを確認しましたが、そのまま import して問題なさそうです。

!pip list | grep imageio
---
imageio                          2.31.6
imageio-ffmpeg                   0.4.9

以下の記述を追加します。

import imageio
imageio は画像とか動画とかボリュメトリックデータとか色々なものを読み書きするモジュールみたい!

出力結果

Text-to-Video Zero 出力結果

この時代のパンダはギターを引けるのか...

別のモデルを使用してみる

使用するモデルは Meina/MeinaMix_V11 を使わせていただきます。

zako-lab929.hatenablog.com

初めて使った派生モデルだからね!
import imageio
import torch
from diffusers import TextToVideoZeroPipeline

# パイプラインの準備
pipe = TextToVideoZeroPipeline.from_pretrained(
    "Meina/MeinaMix_V11",
    torch_dtype=torch.float16
).to("cuda")

# パイプラインを実行
prompt = "A girl is playing guitar on times square"
result = pipe(prompt=prompt).images
result = [(r * 255).astype("uint8") for r in result]

# 出力
imageio.mimsave("video.mp4", result, fps=4)
パンダとの変更点
・モデルIDをMeina/MeinaMix_V11に変更
・プロンプトのpandagirlに変更

出力結果

TextToVideoZeroPipeline x Minea/MeinaMix_V11

凄い!静止画のときもクオリティが高くて感動したけど、動画でも女の子がちゃんとギター引いてる!!

まとめ

応用が効いてメッチャ面白い!