Pyramid Flow:AIで動画を生成!初心者でも使えるGUIツール

最近、AIによる動画生成が注目を集めています。MidJourneyやStable Diffusionで画像生成を試したことがある方も多いのではないでしょうか? そんな中、今回は一歩進んで「動画生成AI」に挑戦してみたいと思います。

テキストを入力するだけで動画を生成したり、1枚の画像から動きのある映像を作り出したり…こんな魔法のようなことが、実は無料で試せるんです。今回使用するのは「Pyramid Flow」という動画生成AIです。

このツールの特徴は、なんといってもブラウザ上で簡単に操作できるGUIインターフェースが用意されていること。プログラミングの経験が浅い方でも、環境さえ整えれば誰でも試すことができます。

それでは、実際にPyramid Flowを動かしながら、AIによる動画生成の世界を覗いてみましょう!

Pyramid Flowとは

Pyramid Flowは、テキストや画像から動画を生成できる革新的なAIツールです。Flow Matchingという技術を基にした効率的な動画生成モデルで、オープンソースのデータのみで学習されているため、誰でも無料で利用できます。

主な特徴として:

  • 高品質な動画生成(最大10秒、768p解像度、24FPS)
  • テキストからの動画生成
  • 画像からの動画生成
  • ブラウザベースの直感的なGUIインターフェース
  • メモリ使用の最適化機能搭載

特に注目したいのは、ブラウザ上で操作できるGUIインターフェースが用意されていることです。コマンドラインに不慣れな方でも、簡単に動画生成を試すことができます。また、1枚の画像から動画を生成する機能は、静止画に命を吹き込むような感覚で、クリエイティブな表現の可能性を広げてくれます。

GitHub - jy0205/Pyramid-Flow: Code of Pyramidal Flow Matching for Efficient Video Generative Modeling
Code of Pyramidal Flow Matching for Efficient Video Generative Modeling - jy0205/Pyramid-Flow

必要な環境

Pyramid Flowを動作させるには以下の環境が必要です:

  • Python 3.8.10(推奨バージョン)
  • NVIDIA GPUを搭載したPC
  • Visual Studio Code(推奨エディタ)
  • CUDA対応のGPUドライバ

環境構築の手順

本記事では、Windows環境でのセットアップ手順を説明します。VSCodeを使用することで、より視覚的に作業を進めることができます。

1. Pythonバージョンの管理

まず、適切なPythonバージョン(3.8.10)を使用できるように設定します。今回はpyenvを使用してバージョン管理を行います。

現在のバージョンを確認:

python --version

私の環境では3.10.11がインストールされていました。これを3.8.10に切り替えていきます。

2. プロジェクトのセットアップ

まず、GitHubからプロジェクトをクローンします。

git clone https://github.com/jy0205/Pyramid-Flow
cd Pyramid-Flow

pyenvを使って、このディレクトリのみPython 3.8.10を使用するように設定します。
pyenvに関しては以下の記事を参考にしてください。

pyenv local 3.8.10

Point! VSCodeを使用している場合は、この設定を反映させるためにVSCodeを一度完全に閉じて、再度開く必要があります。再度開いた後、ターミナルで以下のコマンドを実行して、正しくバージョンが切り替わっていることを確認しましょう:

python --version

3. 仮想環境の作成

Pythonの仮想環境を作成し、有効化します:

python -m venv venv
venv\Scripts\activate

仮想環境が有効になると、プロンプトの先頭に(venv)と表示されます。

これで基本的な環境が整いました。次は必要なパッケージのインストールに進みましょう。

4. 必要なパッケージのインストール

まず、pipを最新版にアップグレードします:

python -m pip install --upgrade pip

必要なパッケージのインストールには2つの方法があります。まずは推奨される方法として、requirements.txtを使用する方法です:

pip install -r requirements.txt

あるいは、個別にパッケージをインストールすることもできます:

pip install gradio torch Pillow diffusers huggingface_hub

どちらの方法でも問題なく動作しますが、プロジェクトでテスト済みの正確なバージョンを使用できるrequirements.txtを使用する方法をお勧めします。このコマンドは、プロジェクト作成者が必要だと判断したPythonパッケージをまとめてインストールするために使用されます。

pip install -r requirements.txt

  • 役割:
    requirements.txt ファイルに記述されたパッケージリストを一括でインストールします。
  • 特徴:
    • ファイル内にインストールすべきすべてのパッケージと、必要に応じてバージョン指定が記載されています。
      gradio==3.30.0
      torch==2.0.0+cu118
      Pillow>=9.0.0
      diffusers==0.17.0
      huggingface_hub==0.13.0
    • 開発者が依存関係を明確に管理できるため、再現性のある環境構築が可能です。
    • 使用者はコマンドを1回実行するだけで環境を整えられます。

pip install gradio torch Pillow diffusers huggingface_hub

  • 役割:
    コマンドラインに直接指定したパッケージをインストールします。
  • 特徴:
    • 明示的に記載されたパッケージのみをインストールします。
    • バージョン指定がない場合、最新バージョンがインストールされます。
    • 手動で依存関係を追加する場合に便利ですが、複数回のコマンド実行が必要になることがあります。

主な違い

項目pip install -r requirements.txtpip install gradio torch ...
対象パッケージファイルに記載されたすべてのパッケージコマンドで指定したパッケージのみ
バージョン管理ファイル内で指定可能バージョンを指定しなければ最新を取得
再現性高い(同じファイルを使えば環境を再現可能)再現性が低い(全ユーザーで異なる可能性)
実行回数一度で済むパッケージを追加するたびに再実行が必要
用途プロジェクト全体の依存関係の管理一時的なインストールや軽い作業向け

どちらを選ぶべきか?

  • プロジェクト全体のセットアップ:
    • 再現性が重要な場合、requirements.txt を使う方が推奨されます。
    • チームで共有する際やドキュメント化が必要な場合に便利。
  • 個別パッケージのインストール:
    • 試験的にパッケージを追加したり、特定の作業で必要な場合は、pip install パッケージ名 を使うのが簡単です。

補足

もし requirements.txt にないパッケージをインストールした場合、それらを requirements.txt に追記することを忘れないようにしましょう。以下のコマンドで現在の環境にインストールされているパッケージリストを取得できます:

pip freeze > requirements.txt

この方法で環境を保存しておけば、後から再現性を確保できます!

5. GUIの起動

パッケージのインストールが完了したら、以下のコマンドでGUIを起動します:

python app.py

実際の表示内容

diffusion_transformer_768p/config.json: 100%|█████████████████| 465/465 [00:00<00:00, 226kB/s] 
README.md: 100%|█████████████████████████████████████████| 9.38k/9.38k [00:00<00:00, 4.45MB/s] 
diffusion_transformer_image/config.json: 100%|████████████████| 465/465 [00:00<00:00, 233kB/s] 
text_encoder_2/config.json: 100%|█████████████████████████████| 782/782 [00:00<00:00, 391kB/s] 
text_encoder/config.json: 100%|███████████████████████████████| 613/613 [00:00<00:00, 204kB/s] 
(…)t_encoder_2/model.safetensors.index.json: 100%|███████| 19.9k/19.9k [00:00<00:00, 6.63MB/s] 
tokenizer/merges.txt: 100%|████████████████████████████████| 525k/525k [00:00<00:00, 1.21MB/s] 
tokenizer/special_tokens_map.json: 100%|██████████████████████| 588/588 [00:00<00:00, 235kB/s] 
tokenizer/tokenizer_config.json: 100%|████████████████████████| 705/705 [00:00<00:00, 276kB/s] 
tokenizer/vocab.json: 100%|██████████████████████████████| 1.06M/1.06M [00:00<00:00, 1.61MB/s] 
tokenizer_2/special_tokens_map.json: 100%|███████████████| 2.54k/2.54k [00:00<00:00, 1.26MB/s] 
spiece.model: 100%|████████████████████████████████████████| 792k/792k [00:00<00:00, 2.17MB/s] 
tokenizer_2/tokenizer.json: 100%|████████████████████████| 2.42M/2.42M [00:01<00:00, 1.68MB/s] 
tokenizer_2/tokenizer_config.json: 100%|█████████████████| 20.8k/20.8k [00:00<00:00, 5.93MB/s] 
model.safetensors: 100%|███████████████████████████████████| 246M/246M [00:49<00:00, 5.00MB/s] 
diffusion_pytorch_model.bin: 100%|███████████████████████| 1.34G/1.34G [02:03<00:00, 10.9MB/s]
Fetching 24 files:  17%|██████▌                                | 4/24 [02:03<12:53, 38.69s/it] 
diffusion_pytorch_model.safetensors:  18%|██▋            | 1.38G/7.89G [02:02<12:30, 8.66MB/s] 
diffusion_pytorch_model.safetensors:  40%|██████         | 3.16G/7.89G [04:16<04:17, 18.4MB/s]
diffusion_pytorch_model.safetensors:  32%|████▊          | 2.53G/7.89G [04:16<05:16, 16.9MB/s] 
diffusion_pytorch_model.safetensors:  32%|████▊          | 2.55G/7.89G [04:15<15:01, 5.92MB/s] 
model-00001-of-00002.safetensors:  29%|█████▏            | 1.43G/4.99G [02:01<03:59, 14.9MB/s] 
model-00001-of-00002.safetensors:  64%|███████████▌      | 3.22G/4.99G [04:15<02:12, 13.4MB/s] 
model-00002-of-00002.safetensors:  27%|████▉             | 1.24G/4.53G [01:59<06:22, 8.62MB/s] 
model-00002-of-00002.safetensors:  59%|██████████▋       | 2.69G/4.53G [04:14<03:21, 9.12MB/s]

注意点 ここでエラーが発生する場合があります。特に以下のエラーメッセージが表示された場合は、GPUの設定が必要です:

[WARNING] CUDA is not available. Proceeding without GPU.

6. GPU対応の設定

GPUを使用するために、まずホストのCUDAバージョンを確認します:

nvcc -V

確認したバージョンに応じて、適切なPyTorchをインストールします。例えば、CUDA 12.4の場合:

pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu124

これで環境構築は完了です。requirements.txtにCUDA関連のライブラリ(例: torchtorchvision など)の記載がない場合、CUDA対応のPyTorchや他のライブラリを手動でインストールする必要があります。

手動でCUDA関連ライブラリをインストールする理由

  1. 環境ごとの違い:
    • CUDAのバージョンは、GPUやドライバの環境に依存します。
    • requirements.txtに固定したCUDA対応のライブラリを記載すると、他の環境で問題が発生する可能性があります。
  2. PyTorchのインストールガイド:

CUDA対応ライブラリの手動インストール例

たとえば、CUDA 12.4を使用している場合、次のようにインストールします:

pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu124

requirements.txt にCUDAを追加しない理由

  • 移植性を保つため:
    • 多くのプロジェクトでは、CPU版のPyTorchを requirements.txt に記載することで、CUDAがない環境でも動作可能にしています。
    • 例:
      torch==2.0.0
      torchvision==0.15.0
    • CUDA対応のPyTorchは、必要なユーザーが手動でインストールします。

requirements.txtにCUDA版を追加したい場合

固定環境でのみ動作させる場合は、以下のように記載できます:

torch==2.0.0+cu124 --index-url https://download.pytorch.org/whl/cu124
torchvision==0.15.0+cu124 --index-url https://download.pytorch.org/whl/cu124
torchaudio==2.0.0+cu124 --index-url https://download.pytorch.org/whl/cu124

ただし、上記はCUDA 12.4専用のPyTorchであり、異なるCUDAバージョンでは動作しないため注意が必要です。


最善の方法

または、インストール手順をドキュメント化しておき、ユーザーが選択可能にします。

requirements.txt にはCPU版を記載し、CUDA対応が必要な場合は手動でインストールする方法が推奨されます。

実際のセットアップで直面した問題

ここまで簡単に手順を説明してきましたが、実際には幾つかの問題に直面しました。特にPythonのバージョン切り替えでは思わぬ落とし穴がありました。

VSCodeでのバージョン切り替えの注意点

pyenvでPythonのバージョンを3.8.10に設定したはずなのに、次のような状況に遭遇しました:

python --version
Python 3.10.11

なんと、pyenv local 3.8.10を実行しても、バージョンが切り替わっていません。調査の結果、VSCodeの仕様により、ウィンドウを完全に閉じて再起動する必要があることが分かりました。

正しい切り替えの確認方法

VSCodeを再起動後、プロジェクトのファイル構成を確認してみました:

dir
2024/11/22  16:52    <DIR>          .
2024/11/22  16:51    <DIR>          ..
2024/11/22  16:51             1,446 .gitignore
2024/11/22  16:52                 8 .python-version
2024/11/22  16:51    <DIR>          annotation
2024/11/22  16:51            15,269 app.py
2024/11/22  16:51             5,619 app_multigpu.py
2024/11/22  16:51    <DIR>          assets
2024/11/22  16:51             8,105 causal_video_vae_demo.ipynb
2024/11/22  16:51    <DIR>          dataset
2024/11/22  16:51    <DIR>          diffusion_schedulers
2024/11/22  16:51    <DIR>          docs
2024/11/22  16:51             3,391 image_generation_demo.ipynb
2024/11/22  16:51             4,909 inference_multigpu.py
2024/11/22  16:51             1,086 LICENSE
2024/11/22  16:51    <DIR>          pyramid_dit
2024/11/22  16:51            16,508 README.md
2024/11/22  16:51               406 requirements.txt
2024/11/22  16:51    <DIR>          scripts
2024/11/22  16:51    <DIR>          tools
2024/11/22  16:51    <DIR>          train
2024/11/22  16:51    <DIR>          trainer_misc
2024/11/22  16:51            14,387 utils.py
2024/11/22  16:51             7,052 video_generation_demo.ipynb
2024/11/22  16:51    <DIR>          video_vae

このコマンドで表示されるファイルの中に、重要な.python-versionというファイルを発見。中身を確認すると3.8.10とだけ記述されています。VSCodeのエクスプローラーで視覚的に確認するか、PowerShellやコマンドプロンプトでWindows標準のエクスプローラーから確認することもできます。

再度バージョンを確認すると:

python --version
Python 3.8.10

今度は正しくバージョンが切り替わっていました!

もう一つの落とし穴:不足パッケージのエラー

環境構築が終わったと思い、早速アプリケーションを起動しようとしました:

python app.py

しかし、今度は別のエラーに遭遇してしまいました:

Traceback (most recent call last):
File "app.py", line 3, in
import gradio as gr
ModuleNotFoundError: No module named 'gradio'

必要なパッケージが不足していたようです。以下のコマンドで追加インストールを試みます:

pip install gradio torch Pillow diffusers huggingface_hub

すると今度はpip自体のバージョンが古いという警告が:

WARNING: You are using pip version 21.1.1; however, version 24.3.1 is available.

せっかくなのでpipも最新版にアップグレードしておきましょう:

python -m pip install --upgrade pip

念には念を入れて、もう一度必要なパッケージをインストール:

pip install -r requirements.txt

このように、環境構築では予期せぬエラーの連続でしたが、一つずつ解決していくことで、最終的に動作する環境を整えることができました。

環境構築の続き

さて、様々な問題を乗り越えて基本的な環境が整いました。しかし、まだ最後の重要な設定が残っています。

GPUの設定

アプリケーションを実行すると、以下のような警告が表示されるかもしれません:

[WARNING] CUDA is not available. Proceeding without GPU.

この警告は、GPUが正しく認識されていないことを示しています。動画生成には大量の計算処理が必要なため、GPUの設定は非常に重要です。

まず、システムにインストールされているCUDAのバージョンを確認します:

nvcc -V

私の環境ではCUDA 12.4がインストールされていました。

nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2024 NVIDIA Corporation
Built on Thu_Mar_28_02:30:10_Pacific_Daylight_Time_2024
Cuda compilation tools, release 12.4, V12.4.131
Build cuda_12.4.r12.4/compiler.34097967_0

このバージョンに対応するPyTorchをインストールします:

pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu124

これで、やっと本格的な動画生成に必要な環境が整いました!

次は実際に動画を生成してみましょう…

動画生成を試してみよう

環境構築が完了したら、いよいよ動画生成を試してみましょう。アプリケーションを起動します:

python app.py

起動すると、かなり大きなサイズのモデルのダウンロードが始まります。これには時間がかかるので、気長に待ちましょう。ダウンロードが完了すると、ブラウザが自動的に開き、Gradioのインターフェースが表示されます。

GUIの使い方

インターフェースには大きく分けて2つのタブがあります:

  1. Text-to-Video(テキストから動画を生成)
    • プロンプト:生成したい動画の説明を入力
    • Duration:動画の長さ(384pの場合は最大16フレーム、768pの場合は最大31フレーム)
    • Guidance Scale:生成の詳細度を調整
    • Video Guidance Scale:動きの強さを調整
    • Resolution:解像度の選択(384pまたは768p)
  2. Image-to-Video(画像から動画を生成)
    • 入力画像:動画のベースとなる画像をアップロード
    • プロンプト:動画の動きや雰囲気を説明するテキスト
    • その他のパラメータ:Text-to-Videoと同様

生成のコツ

  • 384p解像度から始めることをお勧めします(処理が軽い)
  • プロンプトは具体的に書くほど意図した結果が得られやすい
  • GPUメモリが8GB程度の場合、数回生成すると”CUDA out of memory”エラーが発生することがあります。その場合はブラウザを更新してください

動画生成の実例

テキストから動画を生成してみる

まずは簡単な例から試してみました。以下のプロンプトを入力します:

A movie trailer featuring the adventures of the 30 year old space man wearing a red wool knitted motorcycle helmet, blue sky, salt desert, cinematic style, shot on 35mm film, vivid colors

パラメータ設定:

  • Resolution: 384p(初回は低解像度から)
  • Duration: 16
  • Guidance Scale: 7.0
  • Video Guidance Scale: 5.0

生成された動画は、赤いニット帽のような宇宙飛行士が砂漠を歩く様子が映し出されました。映画のワンシーンのような雰囲気が出ていて、プロンプトの意図がよく反映されています。

画像から動画への変換

次に、画像から動画を生成してみました。サンプル画像の「万里の長城」を使用し、以下のプロンプトを設定:

FPV flying over the Great Wall

パラメータ設定:

  • Resolution: 384p
  • Duration: 16
  • Video Guidance Scale: 4.0

静止画から徐々にカメラが動き出し、まるでドローンで撮影したかのような動画が生成されました。

メモリ使用量の確認

動画生成は非常にGPUメモリを消費します。実際の使用状況を確認するため、以下のスクリプトを実行してみました:

import torch
print(f"総メモリ: {torch.cuda.get_device_properties(0).total_memory / 1024**2:.0f}MB")
print(f"割り当て済み: {torch.cuda.memory_allocated() / 1024**2:.0f}MB")
print(f"キャッシュ: {torch.cuda.memory_reserved() / 1024**2:.0f}MB")

結果:

Copy総メモリ: 8188MB
割り当て済み: 0MB
キャッシュ: 0MB

私の環境では8GBのGPUメモリしかないため、高解像度(768p)での生成は難しく、数回の生成でメモリ不足になってしまいました。

注意点とトラブルシューティング

GPUメモリ不足の問題

実際に使用してみて最も顕著だったのは、GPUメモリの制約です。私の環境(8GB GPU)では以下のような問題が発生しました:

  • 768p解像度での生成が難しい
  • 384pでも数回の生成後にメモリ不足
  • “CUDA out of memory”エラーが頻繁に発生

対処方法

メモリ不足に対しては、以下の対策が有効です:

  1. 低解像度(384p)で作業する
  2. Duration(フレーム数)を減らす
  3. エラー発生時はブラウザを再読み込み
  4. GPUメモリをクリアするために、アプリケーションを再起動

実用的な使用方法

限られたリソースで効率的に使用するために:

  • まず低解像度で動画の雰囲気を確認
  • 良い結果が得られたら、同じパラメータで高解像度に挑戦
  • メモリ不足が発生したら、一度アプリケーションを再起動

CondaとPython仮想環境の比較

機能CondaPython仮想環境(venv/virtualenv)
仮想環境の作成・管理簡単に環境を作成・切り替え可能プロジェクトごとに仮想環境を作成
多言語サポートPython以外(R, Julia, etc.)もサポートPython専用
パッケージ管理Conda独自のパッケージ管理システムpipを使用
デフォルトの依存解決依存関係を自動解決一部は手動で解決が必要
環境の複製conda env exportで簡単に共有requirements.txtで共有可能
サードパーティリポジトリConda ForgeなどPyPIのみ(pip install

Pythonの仮想環境でCondaに相当する操作を実現する方法

1. 仮想環境の作成と管理

Condaではconda createで簡単に仮想環境を作成できますが、Python仮想環境でも以下のコマンドで似たようなことが可能です。

仮想環境の作成

python -m venv myenv  # 仮想環境を作成
source myenv/bin/activate  # 仮想環境を有効化

環境の切り替え


deactivate  # 仮想環境を終了
source another_env/bin/activate  # 他の仮想環境を有効化

2. パッケージの依存関係管理

Condaは依存関係を自動的に解決しますが、pipでも以下の手順で依存関係の管理が可能です。

パッケージのインストール

pip install numpy pandas

依存関係のエクスポート

pip freeze > requirements.txt

環境の再現


pip install -r requirements.txt

3. 仮想環境の再現

Condaではconda env exportconda env createで環境を共有しますが、Python仮想環境でも同様のことが可能です。

現在の環境をエクスポート

requirements.txtに全パッケージを保存:

pip freeze > requirements.txt

他の開発者が同じ環境を再現


python -m venv newenv
source newenv/bin/activate
pip install -r requirements.txt

4. 外部ツールの利用

CondaはPython以外のパッケージ(CライブラリやR言語など)も簡単に管理できますが、Pythonの仮想環境でこれを再現するにはsystemのツールやaptなどを使う必要があります。

例: aptを併用してシステムパッケージを管理

sudo apt install libssl-dev
python -m venv myenv
source myenv/bin/activate
pip install cryptography

C拡張ライブラリのインストール例

必要な依存ライブラリをインストールした後、仮想環境内でパッケージをインストールできます。


5. Python仮想環境をCondaのように強化するツール

Python仮想環境の利便性をさらに高めるために、以下のツールを併用する方法があります。

pipenv

pipenvは仮想環境とパッケージ管理を統合するツールです。

  • 仮想環境の作成とパッケージ管理が簡単。
  • Pipfileで環境を再現可能。
pip install pipenv
pipenv install numpy pandas  # パッケージをインストールして仮想環境を作成
pipenv shell                 # 仮想環境を有効化
pipenv lock                  # 環境をロック(依存関係を固定化)

poetry

poetryはプロジェクト管理向けのツールで、依存関係解決や仮想環境管理が可能です。


pip install poetry
poetry init          # プロジェクトを初期化
poetry add numpy     # パッケージを追加
poetry install       # 依存関係をインストール
poetry shell         # 仮想環境を有効化

6. Condaの代替が必要な場合

もしPython以外のツールも統合的に管理したい場合、以下を考慮できます:

  • mamba: Condaの高速な代替ツール。
  • Docker: 完全に隔離された環境を提供。Python仮想環境とも併用可能。

Pythonの仮想環境でもCondaに相当する操作が可能ですが、Python専用であることがポイントです。pipenvpoetryのようなツールを併用すると、さらに管理が容易になります。

もしPython以外の多言語環境やネイティブライブラリの管理が必要であれば、CondaやDockerの利用を検討すると良いでしょう!

まとめ

Pyramid Flowは非常に魅力的なツールですが、現状ではある程度のGPUスペックが必要です。16GB以上のGPUメモリがあれば、より快適に作業できるでしょう。

タイトルとURLをコピーしました