Google Colab で Stable Video Diffusion を試す
「Google Colab」で「Stable Video Diffusion」を試したのでまとめました。
1. Stable Video Diffusion
「Stable Video Diffusion」は、「Stability AI」が開発した画像から動画を生成するAIモデルです。解像度 1024x572 で、14フレーム (2秒) または25フレーム (4秒) の動画を生成します。
2. Stable Video Diffusion のモデル
現在、2つのモデルが提供されています。
3. Colabでの実行
Colabでの実行手順は、次のとおりです。
(1) Colabのノートブックを開き、メニュー「編集 → ノートブックの設定」で「GPU」の「A100」を選択。
(2) パッケージのインストール。
# パッケージのインストール
!pip install -U diffusers transformers accelerate
(3) パイプラインの準備。
import torch
from diffusers import StableVideoDiffusionPipeline
# パイプラインの準備
pipe = StableVideoDiffusionPipeline.from_pretrained(
"stabilityai/stable-video-diffusion-img2vid-xt",
torch_dtype=torch.float16,
variant="fp16"
)
pipe.enable_model_cpu_offload()
(4) 左端のフォルダアイコンから画像をアップロード。
・input.png
(5) 画像の読み込み。
from diffusers.utils import load_image
# 画像の読み込み
image = load_image("input.png")
#image = load_image("https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/svd/rocket.png?download=true")
image = image.resize((1024, 576))
(6) 動画生成。
40秒ほどで動画生成が完了します。
from diffusers.utils import export_to_video
# 動画生成
frames = pipe(
image,
decode_chunk_size=8,
generator=torch.manual_seed(42)
).frames[0]
export_to_video(frames, "generated.mp4", fps=7)
「decode_chunk_size」で、一度にデコードされるフレーム数を制御できます。これにより、メモリ使用量を削減できます。「decode_chunk_size=1」を指定すると、使用するメモリの量は最小限になりますが、動画がちらつく可能性があります。
4. DALL-E 3の画像からの動画生成
「DALL-E 3」(ChatGPT) を使うことで、簡単に動画作成できます。
・input1.png
・input2.png
5. Torch.compile
UNetを次のようにコンパイルすると、メモリがわずかに増加しますが、20~25%の高速化を実現できます。
(1) UNetを以下のように設定。
pipe.enable_model_cpu_offload()
↓
pipe.to("cuda")
pipe.unet = torch.compile(pipe.unet, mode="reduce-overhead", fullgraph=True)
(2) 以下のコードを実行。
Colabでは動画生成時にエラーが発生したため、この手法を適用しました。
!export LC_ALL="en_US.UTF-8"
!export LD_LIBRARY_PATH="/usr/lib64-nvidia"
!export LIBRARY_PATH="/usr/local/cuda/lib64/stubs"
!ldconfig /usr/lib64-nvidia
動画生成で、初回は時間かかりますが、2回目以降は40秒かかっていた動画が30秒になりました。
6. Low-memory
次のオプションは、推論速度を犠牲にしてメモリ要件を低くします。
有効化手順は、次のとおりです。
pipe.enable_model_cpu_offload()
frames = pipe(image, decode_chunk_size=8, generator=generator).frames[0]
↓
pipe.enable_model_cpu_offload()
pipe.unet.enable_forward_chunking()
frames = pipe(
image,
decode_chunk_size=2,
generator=generator,
num_frames=25
).frames[0]
すべて組み込むと、メモリ要件は 8GB VRAM 未満になる予定です。
7. Micro-conditioning
生成する動画をより詳細に制御できる Micro-conditioning を提供します。
以下は、Micro-conditioning を使用して、より動きのある動画を生成する例です。
from diffusers.utils import export_to_video
# 動画生成
frames = pipe(
image,
decode_chunk_size=8,
generator=torch.manual_seed(42),
motion_bucket_id=180,
noise_aug_strength=0.1
).frames[0]
export_to_video(frames, "generated.mp4", fps=7)
この記事が気に入ったらサポートをしてみませんか?