ChatGPTの動画生成はほぼ静止画の何かにナレーションをつけるぐらいしかできないので全く面白くない!!なので,ChatGPT以外でちゃんとした「映像」を生成できる方法を調べてみます。いくつか方法がありますが,今回は「Stable Video Diffusion」をローカルで実行する方法を試してみようと思います
Contents
Stable Video Diffusionの概要
作業する前にまずは相手を知ることから始めます。以下が公式の説明。
- Stable Video DiffusionはStability AIが開発したLatent Diffusion Modelで、一枚の画像から短い動画を生成します(image-to-video)。25フレームの動画を576×1024の解像度で生成できます。
- ユーザー調査によると、Stable Video DiffusionのImage-to-VideoはGEN-2やPikaLabsなどの代替モデルに比べて動画の品質が優れていると評価されています。
- このモデルは短い動画(4秒以内)しか生成できず、動きが少ない場合があります。また、人物の生成が正確でないことがあります。
公式デモを試す
必要なもの
- HuggingFaceのアカウント
- HuggingFaceのログイントークン
- 下記リポジトリへのアクセス権
- ↓のリンク先でtermsに同意してアクセス権を貰う
- https://huggingface.co/stabilityai/stable-video-diffusion-img2vid-xt-1-1
- NVIDIAのGPU(おそらく実行に必要)
- CUDA(もしかしたら必要)
作業内容
ローカルを汚したくないので自分はdockerを使用する方法でやります。
- dockerイメージを作成する
- コンテナ作成時にデモが自動で実行されるようにします
- コンテナを立ち上げる(デモを実行する)
1. dockerイメージを作成する
まず、Dockerfileを作成。
Dockerfile
FROM python:3.10.14-bookworm
# huggingfaceのログイントークン(buildで指定しない場合はエラーになる)
ARG token=""
# clone repo
WORKDIR /home
RUN git clone https://github.com/Stability-AI/generative-models.git .
# install requirements
RUN pip install --no-cache-dir -r ./requirements/pt2.txt
# Reinstall OpenCV using apt due to an error with libGL.so.
RUN apt -y update && apt -y upgrade && apt -y install libopencv-dev
# hugging faceのcredentialを登録しておく(トークンはbuild時に指定必須)
RUN huggingface-cli login --token $token
# キャッシュ削除
RUN apt-get autoremove -y &&\
apt-get clean &&\
rm -rf /usr/local/src/*
# 起動時のコマンドを指定
CMD ["python", "-u", "-m", "scripts.demo.gradio_app"]
次にイメージをbuildします。かなり時間がかかるので、待ってる間は茶でもしばいててください
Bash
// svd-imageという名前でimageをbuildする
// パスは先ほど作成したDockerfileが置いてあるパスを指定してください
docker image build -t svd-image --build-arg token={HuggingFaceのログイントークン} .
2. コンテナを立ち上げる
- gpusを指定することでコンテナからGPUリソースへのアクセスを可能にしています
- 実行にだいぶ時間かかる、かつなぜかログがあまり出力されないので心配になりますが、辛抱強く待ってみてください。
- コマンド実行完了後、表示された
public URL
にブラウザでアクセスすればデモアプリケーションが表示されます。
Bash
// 先ほど作成したimageを指定して実行
docker run --rm -i --gpus all svd-image
ENJOY!
僕の場合はメモリ不足エラーですべての努力がお釈迦でしたとさ…。VRAM8GB+dockerに割り当てられたRAM8GBだと足りないようです。
[追記: 2024/05/20] ↓の方法で自分の環境でもStable Video Diffusionを実行できたので、記事へのリンクを貼っておきます。