HuggingFace Diffusers 0.15 : パイプライン : テキスト-to-動画合成

HuggingFace Diffusers 0.15 : API : パイプライン : テキスト-to-動画合成 (翻訳/解説)

翻訳 : (株)クラスキャット セールスインフォメーション
作成日時 : 04/15/2023 (v0.15.0)

* 本ページは、HuggingFace Diffusers の以下のドキュメントを翻訳した上で適宜、補足説明したものです:

* サンプルコードの動作確認はしておりますが、必要な場合には適宜、追加改変しています。
* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。

 

クラスキャット 人工知能 研究開発支援サービス

クラスキャット は人工知能・テレワークに関する各種サービスを提供しています。お気軽にご相談ください :

◆ 人工知能とビジネスをテーマに WEB セミナーを定期的に開催しています。スケジュール
  • お住まいの地域に関係なく Web ブラウザからご参加頂けます。事前登録 が必要ですのでご注意ください。

お問合せ : 本件に関するお問い合わせ先は下記までお願いいたします。

  • 株式会社クラスキャット セールス・マーケティング本部 セールス・インフォメーション
  • sales-info@classcat.com  ;  Web: www.classcat.com  ;   ClassCatJP

 

 

HuggingFace Diffusers 0.15 : API : パイプライン : テキスト-to-動画合成

This pipeline is for research purposes only.

 

概要

VideoFusion: Decomposed Diffusion Models for High-Quality Video Generation (VideoFusion : 高品質な動画生成のための分解 (VideoFusion) 拡散モデル) by Zhengxiong Luo, Dayou Chen, Yingya Zhang, Yan Huang, Liang Wang, Yujun Shen, Deli Zhao, Jingren Zhou, Tieniu Tan.

論文の要旨は以下のようなものです :

ノイズを徐々にデータポイントに追加することにより forward 拡散過程を構築してから新しいサンプルを生成するために逆のノイズ除去過程を学習する、拡散確率モデル (DPM) は複雑なデータ分布を処理できることを示してきました。画像合成におけるその最近の成功にもかかわらず、DPM を動画生成に適用することは高次元データ空間のために依然として挑戦的です。従来の手法は通常は標準的な拡散過程を採用し、そこでは同じ動画クリップ内のフレームは独立したノイズにより破壊され、コンテンツの冗長性と時間的な相関性を無視しています。このワークはフレーム毎のノイズを、すべてのフレームで共有されるベースノイズと時間軸に沿って変化する残差ノイズに分解することによる分解拡散過程を提案します。ノイズ除去パイプラインはノイズ分解を適切にマッチさせるために 2 つの jointly-learned ネットワークを採用しています。様々なデータセット上の実験は、VideoFusion と呼称する、私たちのアプローチが高品質な画像生成において GAN ベースと拡散ベースの代替を上回っていることを確かめました。更に、分解定式化が事前訓練済み画像拡散モデルから恩恵を受け、テキスト条件付き動画作成をうまくサポートできることを示しています。

リソース

 

利用可能なパイプライン

 

使用例

16 フレーム (2s at 8 fps) のデフォルト長の短い動画を生成することから始めましょう :

import torch
from diffusers import DiffusionPipeline
from diffusers.utils import export_to_video

pipe = DiffusionPipeline.from_pretrained("damo-vilab/text-to-video-ms-1.7b", torch_dtype=torch.float16, variant="fp16")
pipe = pipe.to("cuda")

prompt = "Spiderman is surfing"
video_frames = pipe(prompt).frames
video_path = export_to_video(video_frames)
video_path

Diffusers はパイプラインのレイテンシーとメモリ消費量を改善するために様々な最適化テクニックをサポートしています。動画は画像よりも多くメモリを消費することが多いので、メモリ消費を抑えるために CPU オフローディングと VAE スライシングを有効にすることができます。

CPU オフローディングと VAE スライシングを使用して同じ GPU 上で 8 秒間 (64 フレーム) の動画を生成してみましょう :

import torch
from diffusers import DiffusionPipeline
from diffusers.utils import export_to_video

pipe = DiffusionPipeline.from_pretrained("damo-vilab/text-to-video-ms-1.7b", torch_dtype=torch.float16, variant="fp16")
pipe.enable_model_cpu_offload()

# memory optimization
pipe.enable_vae_slicing()

prompt = "Darth Vader surfing a wave"
video_frames = pipe(prompt, num_frames=64).frames
video_path = export_to_video(video_frames)
video_path

PyTorch 2.0, “fp16” 精度と上述のテクニックを使用して 64 動画フレームを生成するために 7 GB の GPU メモリだけ必要です。

We can also use a different scheduler easily, using the same method we’d use for Stable Diffusion :

import torch
from diffusers import DiffusionPipeline, DPMSolverMultistepScheduler
from diffusers.utils import export_to_video

pipe = DiffusionPipeline.from_pretrained("damo-vilab/text-to-video-ms-1.7b", torch_dtype=torch.float16, variant="fp16")
pipe.scheduler = DPMSolverMultistepScheduler.from_config(pipe.scheduler.config)
pipe.enable_model_cpu_offload()

prompt = "Spiderman is surfing"
video_frames = pipe(prompt, num_inference_steps=25).frames
video_path = export_to_video(video_frames)
video_path

Here are some sample outputs:

An astronaut riding a horse.
An astronaut riding a horse.
Darth vader surfing in waves.
Darth vader surfing in waves.

 

利用可能なチェックポイント

 

以上