[stable diffusion videos] AIでテキストから動画を生成

2022年10月26日水曜日

Artificial Intelligence

本記事では、stable diffusion videosと呼ばれる機械学習手法を用いてテキストから動画を生成する方法をご紹介します。

アイキャッチ

Stable Diffusion Videos

概要

Stable Diffusion Videosは画像生成AIとして注目を集めるStable Diffusionを用いてビデオを生成するライブラリです。

モデルに始点と終点のテキストプロンプトを入力し、2つのテキストプロンプト間の中間画像を連続的に生成することで動画を生成します。

下記の動画は、始点を「woman」とし、終点を「skull」として生成した動画です。
女性が徐々に骸骨になっていく様子が表現されています。

アイキャッチ

本記事では上記手法を用いて、テキストから動画を生成する方法をご紹介します。

デモ(Colaboratory)

それでは、実際に動かしながらテキストから動画を生成します。
ソースコードは本記事にも記載していますが、下記のGitHubでも取得可能です。
GitHub - Colaboratory demo

また、下記から直接Google Colaboratoryで開くこともできます。
Open In Colab

なお、このデモはPythonで実装しています。
Pythonの実装に不安がある方、Pythonを使った機械学習について詳しく勉強したい方は、以下の書籍やオンライン講座などがおすすめです。

環境セットアップ

それではセットアップしていきます。
まず、Stable DiffusionをロードするためにHuggingFaceのアクセストークンが必要です。
発行手順は以下の記事をご参照ください。

HuggingFaceからアクセストークン取得後Google Colaboratoryを開きます。

Colaboratoryを開いたら下記を設定しGPUを使用するようにしてください。

「ランタイムのタイプを変更」→「ハードウェアアクセラレータ」をGPUに変更

はじめに、ライブラリをインストールします。

%cd /content

!pip install stable_diffusion_videos[realesrgan]

次に取得したアクセストークンを設定しておきます。

access_tokens="ここに取得したAccess Tokenを記載" # @param {type:"string"}

最後にライブラリをインポートします。

import torch
from stable_diffusion_videos import StableDiffusionWalkPipeline, Interface
from IPython.display import HTML
from base64 import b64encode

以上で環境セットアップは完了です。

学習済みモデルのセットアップ

ここでは、先ほど設定したアクセストークンを使ってStable Diffusionをロードします。

model_id = "CompVis/stable-diffusion-v1-4"

pipeline = StableDiffusionWalkPipeline.from_pretrained(
    model_id,
    torch_dtype=torch.float16,
    revision="fp16",
    use_auth_token=access_tokens
).to("cuda")

interface = Interface(pipeline)

あわせて、生成した動画をインライン表示する関数を定義しておきます。

def visualize_video_colab(video_path):
  """動画をインライン表示"""
  mp4 = open(video_path,'rb').read()
  data_url = "data:video/mp4;base64," + b64encode(mp4).decode()
  return HTML("""
    <video width=400 controls>
        <source src="%s" type="video/mp4">
    </video>
  """ % data_url)

Text to Video

それでは、テキストから動画を生成します。
まず、プロンプトなど各種設定を行います。
本記事では、dead treesからsakura treesまでの中間画像を補完する動画を生成してみます。

# @markdown src prompt
prompt1 = "A beautiful japanese landscape with dead trees, apocalyptic style, Simon Stlenhag, 4k, ultrarealistic, octane render, volumetric lighting" # @param {type:"string"}
# @markdown dst prompt
prompt2 = "A beautiful japanese landscape with sakura trees, apocalyptic style, Simon Stlenhag, 4k, ultrarealistic, octane render, volumetric lighting" # @param {type:"string"}

# @markdown seeds
seed1 = 12 #@param {type:"integer"}
seed2 = 1212 #@param {type:"integer"}

# @markdown FPS
fps = 10 #@param {type:"integer"}

# @markdown number of interpolation steps
num_interpolation_steps = 20 #@param {type:"integer"}

# @markdown video size
height = "512" #@param [64, 128, 256, 512, 640, 712]
width = "712" #@param [64, 128, 256, 512, 640, 712]

設定に従いフレーム画像を生成します。

video_path = pipeline.walk(
    [prompt1, prompt2],
    [seed1, seed2],
    fps=fps,                      
    num_interpolation_steps=num_interpolation_steps,
    height=int(height),                
    width=int(width),                  
)

出力結果は以下の通りです。
枯れ木に次第に桜が咲く様子が表現されています。

Result

まとめ

本記事では、Stable Diffusion Videosを用いて、テキストプロンプト間の動画を生成する方法をご紹介しました。
様々な発展を続けるStable Diffusionですが、簡単なアニメーションであれば、AIに作らせた方が手軽な時代が直ぐそこかもしれません。

また本記事では、機械学習を動かすことにフォーカスしてご紹介しました。
もう少し学術的に体系立てて学びたいという方には以下の書籍などがお勧めです。ぜひご一読下さい。


また動かせるだけから理解して応用できるエンジニアの足掛かりに下記のUdemyなどもお勧めです。

参考文献

1.  論文 - High-Resolution Image Synthesis with Latent Diffusion Models

2. GitHub - CompVis/stable-diffusion

AIで副業ならココから!

まずは無料会員登録

プロフィール

メーカーで研究開発を行う現役エンジニア
組み込み機器開発や機会学習モデル開発に従事しています

本ブログでは最新AI技術を中心にソースコード付きでご紹介します


Twitter

カテゴリ

このブログを検索

ブログ アーカイブ

TeDokology