Otama's Playground

AIで遊んだ結果などをつらつら載せていきます。

AIで動画生成をしてみたいんじゃあああ!!!【Stable Video Diffusion編】

ChatGPTの動画生成はほぼ静止画の何かにナレーションをつけるぐらいしかできないので全く面白くない!!なので,ChatGPT以外でちゃんとした「映像」を生成できる方法を調べてみます。いくつか方法がありますが,今回は「Stable Video Diffusion」をローカルで実行する方法を試してみようと思います

Stable Video Diffusion

作業する前にまずは相手を知ることから始めます。ありがたいことに公式がモデルの概要を説明してくれてるので拝借。これを例にもれずChatGPTに食わせて要約してもらいます。 huggingface.co

概要

  1. モデル説明
    • Stable Video Diffusion (SVD) Image-to-Videoは、Stability AIが開発した潜在拡散モデルで、単一の画像から短い動画を生成します。25フレームの動画を576x1024の解像度で生成し、f8デコーダーで時間的一貫性を確保しています。
  2. 評価
    • ユーザー調査によると、SVD-Image-to-VideoはGEN-2やPikaLabsなどの代替モデルに比べて動画の品質が優れていると評価されています。
  3. 制限事項
    • このモデルは短い動画(4秒以内)しか生成できず、動きが少ない場合があります。また、テキストのレンダリングや、フォトリアリスティックな顔や人物の生成が正確でないことがあります。
  4. 付録
    • トレーニングデータは品質と安全性のためにフィルタリングされ、人間による評価が行われました。トレーニングには大量の計算資源が必要で、出力には透かしが含まれています。使用統計は将来の改善のために追跡されています。

潜在拡散モデル is 何?

潜在拡散モデル(LDM)は、画像生成において特に高解像度の画像合成を効率的に行うための技術です。以下はその概要です:

  1. 基本的な仕組み
    • 潜在空間の利用:
      • 画像を直接ピクセル単位で生成するのではなく、低次元の潜在空間(抽象的なデータ空間)で処理を行います。これにより、計算コストが大幅に削減されます。
    • 拡散モデル:
      • 潜在空間内でデータにノイズを加え、徐々にそのノイズを取り除いて元のデータ(画像)を再構築する手法です。これにより、より高品質で詳細な画像生成が可能になります。
  2. メリットと応用
    • 計算効率:
      • 低次元の潜在空間で動作するため、計算コストが低く、高解像度の画像生成が効率的に行えます。
    • 高品質な画像生成:
      • 従来の方法と比較して、画像のディテールや品質が向上します。
    • 汎用性:
      • テキストやバウンディングボックスなどの条件を基にした画像生成や、画像修復、スーパーレゾリューションなど様々なタスクに対応可能です。

公式デモを試す

必要なもの

  • HuggingFaceのアカウント
  • HuggingFaceのログイントークン
  • 下記リポジトリへのアクセス権
    • 下のリンク先でtermsに同意してアクセス権を貰う
    • huggingface.co
  • NVIDIAのGPU(おそらく実行に必要)
  • CUDA(もしかしたら必要)

作業内容

ローカルを汚したくないので自分はdockerを使用する方法でやります。

  1. dockerイメージを作成する
    • コンテナ作成時にデモが自動で実行されるようにします
  2. コンテナを立ち上げる(デモを実行する)

1. dockerイメージを作成する

  1. 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"]
    
  2. イメージのbuildを行う かなり時間がかかるので、待ってる間は茶でもしばいててください

      // svd-imageという名前でimageをbuildする
      // パスは先ほど作成したDockerfileが置いてあるパスを指定してください
      docker image build -t svd-image --build-arg token={HuggingFaceのログイントークン} . 
    

2. コンテナを立ち上げる

  • gpusを指定することでコンテナからGPUリソースへのアクセスを可能にしています
  • 実行にだいぶ時間かかる、かつなぜかログがあまり出力されないので心配になりますが、辛抱強く待ってみてください。
  • コマンド実行完了後、表示されたpublic URLにブラウザでアクセスすればデモアプリケーションが表示されます。
// 先ほど作成したimageを指定して実行
docker run --rm -i --gpus all svd-image

ENJOY!

  • 僕の場合はメモリ不足エラーですべての努力がお釈迦でしたとさ...
    • VRAM8GB+dockerに割り当てられたRAM8GBで合計16GBあるはずなのですが...
  • そのうちメモリ増設して再挑戦してみます!できた方がいらっしゃったらどのくらいのスペックで実行できたか教えていただけると嬉しいです。

[追記: 2024/05/20] ↓の方法で自分の環境でもStable Video Diffusionを実行できたので、記事へのリンクを貼っておきます。 otama-playground.com