【Paperspace】AIによる動画生成:Stable Video Diffusionの活用
はじめに
AIによる動画生成で、今回は、Stability AIの新技術: Stable Video Diffusion(SVD)について紹介します。
この記事では、Paperspaceというサービスを使って、SVDを試してみます。
Paperspaceは、パワフルなコンピューターを使えるので、AIがスムーズに動画を作れるんです。
どんな体験だったか、詳しく説明していきますね。
Runway Gen-2との検証していますが、以下のようなアニメーションが生成することができます。
Stable Video Diffusionとは
Stability AIが開発した「Stable Video Diffusion」は、動画作りに特化した新しいAIです。
いわば、写真を作るAIが「動画監督」になったようなものです。
PaperspaceでSVDを使う理由
Paperspaceは、パワフルなコンピューターを使えるので、AIがスムーズに動画を作れます。高スペックPCを持たないユーザーにオススメです。
PaperspaceでのSVDセットアップ
Paperspace Notebookの起動
Notebookを新規作成または既存で作成したものを立ち上げます。
新規作成については、るぺったん様の記事が参考になりました。
※SVDはpython3.10環境で動作するため、
Notebookの新規作成時、Containerの部分に
「cyberes/gradient-base-py3.10:latest」と入力してください。
SVDのセットアップ
Notebookの起動したら、SVDのセットアップを行います。
mkshing様がGoogle Colabで利用できるコードを投稿していましたので
そちらをお借りします。(若干、Paperspace用に変更しています。)
セットアップ
起動時、一回だけの実行でOKです。
#@title Setup
!nvidia-smi
!git clone https://github.com/Stability-AI/generative-models.git
# install required packages from pypi
# !pip3 install -r generative-models/requirements/pt2.txt
# manually install only necesarry packages for colab
!wget https://gist.githubusercontent.com/mkshing/4ad40699756d996ba6b3f7934e6ca532/raw/3f0094272c7a2bd3eb5f1a0db91bed582c9e8f01/requirements.txt
パッケージのインストール
Notebooks立ち上げ時に、毎回実行する必要があります。
!pip3 install -r requirements.txt
!pip3 install -e generative-models
!pip3 install -e git+https://github.com/Stability-AI/datapipelines.git@main#egg=sdata
!pip3 install gradio
Paperspace hack for SVD
パスが/content/(google colab)から/notebooks/(paperspace)へ変更していることに注意!
#@title Colab hack for SVD
# !pip uninstall -y numpy
# !pip install -U numpy
!mkdir -p /notebooks/scripts/util/detection
!ln -s /notebooks/generative-models/scripts/util/detection/p_head_v1.npz /notebooks/scripts/util/detection/p_head_v1.npz
!ln -s /notebooks/generative-models/scripts/util/detection/w_head_v1.npz /notebooks/scripts/util/detection/w_head_v1.npz
Download weights
以降はGoogle Colabと変更なし。そのまま使用してください。
2回目以降は、ここから実行してください。
(あと前述のパッケージもインストールしておく!)
注意:ダウロードに時間を要します。
# @title Download weights
import os
import subprocess
version = "svd_xt" #@param ["svd", "svd_xt"]
TYPE2PATH = {
"svd": ["https://huggingface.co/stabilityai/stable-video-diffusion-img2vid/resolve/main/svd.safetensors", "checkpoints/svd.safetensors"],
"svd_xt": ["https://huggingface.co/stabilityai/stable-video-diffusion-img2vid-xt/resolve/main/svd_xt.safetensors", "checkpoints/svd_xt.safetensors"]
}
download_from, download_to = TYPE2PATH[version]
# @markdown This will take several minutes. <br>
# @markdown **Reference:**
# @markdown * `svd`: [stabilityai/stable-video-diffusion-img2vid](https://huggingface.co/stabilityai/stable-video-diffusion-img2vid) for 14 frames generation
# @markdown * `svd_xt`: [stabilityai/stable-video-diffusion-img2vid-xt](https://huggingface.co/stabilityai/stable-video-diffusion-img2vid-xt) for 25 frames generation
os.makedirs("checkpoints", exist_ok=True)
if os.path.exists(download_to):
print("Already downloaded")
else:
print(f"download from {download_from} to {download_to}")
subprocess.call(["wget", download_from, "-O", download_to])
SVDとSVD-XTについて
-
SVD(Stable Video Diffusion)
目的:画像から動画を生成するためのモデル。
訓練:同じサイズ(576x1024)のコンテキストフレームから、14フレームの動画を生成するように訓練された。
特徴:「Stable Diffusion 2.1」の標準画像エンコーダーを使用。ただし、デコーダーは時間的に認識し、ちらつきを減らすものに置き換えられている。 -
SVD-XT
基本構造:SVDと同じ。
ファインチューニング:25フレームの動画生成に特化して調整された。
目的:より長い動画生成に対応。
要するに、SVDは14フレームの短い動画を、SVD-XTは25フレームのやや長い動画を生成するために使われます。
Load ModelとSampling function
コードはそのままGoogle Colabのコードをコピペしてください。(コードが長いので省略)
Do the Run!
以下のコードを実行すると、「Running on local URL:」と「Running on public URL:」の2つのリンクが出力されますので後者のRunning on public URL をクリックしてブラウザを起動します。
# @title Do the Run!
import gradio as gr
import random
def infer(input_path: str, resize_image: bool, n_frames: int, n_steps: int, seed: str, decoding_t: int) -> str:
if seed == "random":
seed = random.randint(0, 2**32)
seed = int(seed)
output_paths = sample(
input_path=input_path,
resize_image=resize_image,
num_frames=n_frames,
num_steps=n_steps,
fps_id=6,
motion_bucket_id=127,
cond_aug=0.02,
seed=23,
decoding_t=decoding_t, # Number of frames decoded at a time! This eats most VRAM. Reduce if necessary.
device=device,
)
return output_paths[0]
with gr.Blocks() as demo:
with gr.Column():
image = gr.Image(label="input image", type="filepath")
resize_image = gr.Checkbox(label="resize to optimal size", value=True)
btn = gr.Button("Run")
with gr.Accordion(label="Advanced options", open=False):
n_frames = gr.Number(precision=0, label="number of frames", value=num_frames)
n_steps = gr.Number(precision=0, label="number of steps", value=num_steps)
seed = gr.Text(value="random", label="seed (integer or 'random')",)
decoding_t = gr.Number(precision=0, label="number of frames decoded at a time", value=2)
with gr.Column():
video_out = gr.Video(label="generated video")
examples = [
["https://user-images.githubusercontent.com/33302880/284758167-367a25d8-8d7b-42d3-8391-6d82813c7b0f.png"]
]
inputs = [image, resize_image, n_frames, n_steps, seed, decoding_t]
outputs = [video_out]
btn.click(infer, inputs=inputs, outputs=outputs)
gr.Examples(examples=examples, inputs=inputs, outputs=outputs, fn=infer)
demo.queue().launch(debug=True, share=True, show_error=True)
SVDを使って動画を生成
ブラウザを起動すると、webUIが表示されますので設定を行います。
画像のアップロード
画像をアップロードする部分が表示されますので、
赤枠から好きな画像をアップロードします。
動画の生成
RUNボタンを押すと動画が生成されます。
再生時間3秒を生成するのに、A6000(VRAM48GB)で1分30秒~2分くらいかかりました。
「resize to optimal size」は画像を最適なサイズに変換する機能です。画像が引き延ばされて変になる場合は、チェックボタンを外してください。
そして、webUIを下にスクロールします。
生成が完了すると「generated video」画面に動画が表示されます。
右上のボタンで動画をダウンロードできます。
詳細な設定
Advanced optionsについて簡単に説明します。(使用しなくても大丈夫です)
間違っていましたらご指摘ください。
Advanced Optionsは、動画生成の際の詳細な設定を指します。ここでは、SVDやSVD-XTのようなモデルで使われる主要なオプションについて説明します。
- フレーム数(Number of Frames)
意味:生成する動画のフレーム数。
用途:動画の長さを決める。多いほど長い動画に。
※例えば、SVD-XTは25フレームの生成に最適化されていますが、30フレームを指定するとエラーが発生することがあります。一方で、50フレームなど、さらに多いフレーム数を設定すると問題なく動作しました。(倍々?)
-
ステップ数(Number of Steps)
意味:動画生成プロセスのイテレーション(繰り返し)数。
用途:多いほど詳細に生成プロセスが行われ、品質が向上する可能性があるが、処理時間も長くなる。 -
シード(Seed)
意味:乱数生成のための初期値。整数値または「ランダム」。
用途:同じシードを使うと、同じ結果が再現される。異なるシードでは異なる結果が得られる。「ランダム」を選ぶと、毎回異なる乱数が使われる。 -
一度にデコードされるフレーム数(Number of Frames Decoded at a Time)
意味:一度に処理されるフレームの数。
用途:この数が多いほど、一度に多くのフレームが処理される。しかし、メモリ消費量も増えるため、ハードウェアによっては制限が必要。
まとめ
PaperspaceでSVD(Stable Video Diffusion)を使ってみた結果、手軽に動画生成ができました。
皆さん、ぜひPaperspaceでStable Video Diffusion(SVD)を試してみてください。このツールは、AIを使って独自の動画を簡単に作ることができます。
さらに、あなたのSVD体験や感想、質問などがあれば、ぜひコメント欄で共有してください。皆さんの体験談や疑問点を聞くことで、私たちも学びが深まりますし、他の読者の方々にも参考になります。
Discussion