🪄

Paperspaceで始めるMagic Animate:導入から設定まで

2023/12/09に公開

はじめに

AIの世界は日々進化しており、最近話題になっているのが「magic-animate」です。TikTok運営のByteDance等がリリースしたこの革新的な技術は、人の写真をAIで動かすことができます。

例えば、お気に入りの有名人やアニメキャラクターの写真を使って動きを再現したり、別の人の動きを真似たりすることが可能です。magic-animateは、写真の自然な動きと色彩の維持、細かい動きの明確な表現にこだわって作られており、写真を動かす魔法のような技術と言えるでしょう。

https://x.com/toki_mwc/status/1733319932342104417?s=20

GitHubでコードが公開されているため、興味がある方は自由に試すことができます。

https://github.com/magic-research/magic-animate

本記事では、この最新AI技術をPaperspaceで試してみました。
Paperspaceはその手軽さと高性能で、AIプロジェクトに最適な環境を提供しています。

この記事を通じて、Paperspaceを用いるメリットやmagic-animateを導入する際の重要な注意点も詳しく説明し、あなたがスムーズに導入を進められるようになれば幸いです。。

Paperspaceの紹介

Paperspaceは、AIや3Dグラフィックスのような先進的なアプリケーション開発に最適なクラウドサービスです。特に、GPUやIPUといった高度なコンピューティング部品を搭載しているため、AIや3Dグラフィックスの計算を迅速に処理することが可能です。

Paperspaceの最大の利点は、その利便性とコスト効率の高さです。ユーザーは自分でコンピューターを購入したり設定したりする必要がなく、使った分だけの料金を支払うシステムになっています。さらに、「ノートブック」というツールを通じて、AIや3Dグラフィックスのプログラムを簡単に書いたり、実行したりすることができます。

このように、PaperspaceはAIや3Dグラフィックスのアプリケーション開発を手軽に、かつ低コストで行えるクラウドサービスとして、多くの開発者にとって魅力的な選択肢となっています。

導入ガイド

magic-animateをPaperspace上で活用するためのステップバイステップガイドをご紹介します。このガイドを通じて、簡単に設定を完了できるようになります。

GitHubのインストールガイドやGoogle Colabでmagic-animateを実行している記事のコードを見ながら試しましたが、Paperspaceで直接使用してもうまくいきませんでした。

今回は、仮想環境(venv)を構築してからテストを行いました。

Paperspaceアカウントの作成

初めての方は、Paperspaceのウェブサイトにアクセスし、アカウントを作成します。
必要な情報を入力し、アカウントを有効化させましょう。

Jupyter Notebookでの環境構築

今回、るぺったん様の記事を参考にさせていただきました。
記事に添付しています「webui_paper.ipynb」にジュピターノートブックで仮想環境を構築するコードがありましたのでお借りしました。

https://note.com/rupettan/n/nf6f2ebee0fa8

初期設定

こちらは起動毎に実行します。

コードが長くなるため、Proプラン以上の方に向けたコードで進めていきます。

# 環境の保存先の設定
import os
import datetime
import shutil

%cd /tmp
inst_path = "/notebooks"

ma_path = os.path.join(inst_path, "magic-animate")

# aria2インストール
!if [ $(dpkg-query -W -f='${Status}' aria2 2>/dev/null | grep -c "ok installed") = 0 ]; then sudo apt update && sudo apt install -y aria2; fi


# git lfs インストール:
!curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | sudo bash
!sudo apt-get install git-lfs
!git lfs install

# ダウンロード処理
huggingface_token = "YOUR_HUGGINGFACE_TOKEN" # 自分のトークンに変更

def file_download(model_url, model_path):
    base_name = os.path.basename(model_url)

    print("ファイルダウンロード")
    print("URL:" + model_url)
    print("name:" + base_name)
    print("path:" + model_path)
    print("path:" + pretrained_models_path)
    
    if model_url.startswith("https://drive.google.com"):
        print("GoogleDrive")
        os.chdir(model_path)
        !gdown --fuzzy {model_url}
    elif model_url.startswith("https://huggingface.co/"):
        print("Huggingface")
        base_name = base_name.replace('?download=true','')
        if "/blob/" in model_url:
            model_url = model_url.replace("/blob/", "/resolve/")
        user_header = f'"Authorization: Bearer {huggingface_token}"'
        !aria2c --console-log-level=error --summary-interval=10 --header={user_header} -c -x 16 -s 16 -k 1M {model_url} -d {model_path} -o {base_name}
    elif model_url.startswith("https://civitai.com/"):
        print("Civitai")
        model_url = "\"" + model_url + "\""
        !aria2c --console-log-level=error --summary-interval=10 -c -x 16 -s 16 -k 1M {model_url} -d {model_path}
    else:
        print("other")
        !aria2c --console-log-level=error --summary-interval=10 -c -x 16 -s 16 -k 1M {model_url} -d {model_path} -o {base_name}


print("finish:初期設定")

仮想環境の構築

初回時のみ実行します。

%cd {inst_path}

# 仮想環境がない場合のみ
if os.path.isdir("venv") == False:
    !pip install virtualenv
    !virtualenv venv

    #PyTorch2.0インストール
    !venv/bin/pip3 install torch torchvision torchaudio
    #xformersインストール
    !venv/bin/pip3.10 install xformers

print("finish:仮想環境作成")
ジュピターノートブックで仮想環境を使用する場合

Jupyter Notebookでは、各セルが独立して実行されるため、一度仮想環境をアクティベートしても、次のセルでその状態が維持されません。そのため、各セルでパッケージをインストールする際には、仮想環境のpipを直接指定する必要があります。(Google Bardの説明)

magic-animateインストール

初回時のみ実行

magic-animateの動作に必要なパッケージをインストールします。

# magic-animateのインストール
%cd {inst_path}

# 本体が存在しない場合のみ
if os.path.isdir("magic-animate") == False:
    !git clone https://github.com/magic-research/magic-animate
    %cd magic-animate
    !{inst_path}/venv/bin/pip3 install -r requirements.txt

print("finish:magic-animateインストール")

もしかしたら「!{inst_path}/venv/bin/pip3 install -r requirements.txt」の部分が動作しないかもしれません。その場合は、ターミナルで実行してください。

モデル等のダウンロード

初回時のみ

モデルなどのダウンロードですが、サイズが大きいので時間がかかります。

# モデル等のダウンロード
!git clone -b fp16 https://huggingface.co/runwayml/stable-diffusion-v1-5 /notebooks/magic-animate/pretrained_models/stable-diffusion-v1-5/
!git clone https://huggingface.co/stabilityai/sd-vae-ft-mse /notebooks/magic-animate/pretrained_models/sd-vae-ft-mse/
!git lfs clone https://huggingface.co/zcxu-eric/MagicAnimate /notebooks/magic-animate/pretrained_models/MagicAnimate/

コンフィグファイルの編集

ここ結構重要です!
GitHubの更新でパスが変わったり、サンプル画像が変わったりすることでエラーになることもありますので適宜編集してください。

ファイルの場所は「magic-animate/configs/prompts/animation.yaml」です。
画像ファイルと動画ファイルを設定します。

コンフィグファイル
animation
pretrained_model_path: "pretrained_models/stable-diffusion-v1-5"
pretrained_vae_path: "pretrained_models/sd-vae-ft-mse"
pretrained_controlnet_path: "pretrained_models/MagicAnimate/densepose_controlnet"
pretrained_appearance_encoder_path: "pretrained_models/MagicAnimate/appearance_encoder"
pretrained_unet_path: ""

motion_module: "pretrained_models/MagicAnimate/temporal_attention/temporal_attention.ckpt"

savename: null

fusion_blocks: "midup"

seed:           [1]
steps:          25
guidance_scale: 7.5

source_image:
  - "inputs/applications/source_image/monalisa.png"
  - "inputs/applications/source_image/0002.png"
  - "inputs/applications/source_image/demo4.png"
  - "inputs/applications/source_image/dalle2.jpeg"
  - "inputs/applications/source_image/dalle8.jpeg"
  - "inputs/applications/source_image/multi1_source.png"
video_path:
  - "inputs/applications/driving/densepose/running.mp4"
  - "inputs/applications/driving/densepose/demo4.mp4"
  - "inputs/applications/driving/densepose/demo4.mp4"
  - "inputs/applications/driving/densepose/running2.mp4"
  - "inputs/applications/driving/densepose/dancing2.mp4"
  - "inputs/applications/driving/densepose/multi_dancing.mp4"

inference_config: "configs/inference/inference.yaml"
size: 512
L:    16
S:    1 
I:    0
clip: 0
offset: 0
max_length: null
video_type: "condition"
invert_video: false
save_individual_videos: false

source_image:とvideo_path: で生成しないものは削除してもいいかもしれません。デフォルトのままだとその分、生成時間が長くなります。

参考例:モナリザが走る動画のみ生成したい場合
source_image:
  - "inputs/applications/source_image/monalisa.png"
video_path:
  - "inputs/applications/driving/densepose/running.mp4"

magic-animateの実行(GUIなし)

簡単なテストを行い、magic-animateが正常に動作することを確認します。
任意の画像を使用して、AIによる動画生成を試してみましょう。

!bash -c "source /notebooks/venv/bin/activate && cd /notebooks/magic-animate && bash scripts/animate.sh"

生成が完了すると、/storage/magic-animateにsamplesというディレクトリが新たに追加されています。その中に生成された動画が入っています。

注意点

magic-animateをPaperspaceで使用する際、いくつかの重要な注意点があります。また、遭遇する可能性のある問題に対するトラブルシューティングのヒントもご紹介します。

  1. モデル等のパス設定: pretrained_model_path、pretrained_vae_pathなどのモデル等のパスの設定も注意してください。ダウンロードした場所が異なると以下のようなエラーになります。
OSError: pretrained_models/stable-diffusion-v1-5 is not a local folder and is not a valid model identifier listed on 'https://huggingface.co/models'
  1. 画像と参照動画の数: source_image:とvideo_path:が1対1にならないとエラーになるようです。
    「magic-animate/inputs/applications/source_image」の中にある画像があるのか、animation.yamlに記載されているのかもチェックしてください。

  2. オリジナル画像の追加: サンプル画像以外で新たに違う写真を追加したい場合は、animation.yamlのsource_image:部分を変更してください。また、画像は3チャンネルに変換する必要があります。

3チャンネルに変更するコード

# 3チャンネルに変換
import cv2
image_path = "/notebooks/sample.png"
output_path = "/notebooks/sample_convert.png"
image = cv2.imread(image_path, cv2.IMREAD_UNCHANGED)
image = cv2.cvtColor(image, cv2.COLOR_BGRA2BGR)
cv2.imwrite(output_path, image)

# 変換した画像をsource_imageに移動
%cd /notebooks
!mv sample_convert.png /notebooks/magic-animate/inputs/applications/source_image

以下のように画像を配置して実行すれば、3チャンネル変換して指定のパスに送られます。
(上記だとファイル名がsample_convert.pngに変わるので注意)

まとめ

この記事を通じて、magic-animateをPaperspaceで使用する方法について詳細にご紹介しました。この先進的なAIツールを活用することで、AIによる動画生成の可能性を最大限に引き出すことができます。また、Paperspaceの利用により、このプロセスを手軽に、かつ効率的に行うことが可能です。

主なポイントのおさらい

  • magic-animateは、写真を動かすための先進的なAIツールです。
  • Paperspaceは、強力なコンピューティングリソースを提供するクラウドサービスで、magic-animateの使用に適しています。
  • 注意点のヒントを押さえることで、スムーズな導入と使用が可能になります。

参考

https://github.com/magic-research/magic-animate/issues/13
https://stackoverflow.com/questions/46976455/python-imageio-warningrootimageio-ffmpeg-writer-warning
https://note.com/npaka/n/n87d566157231

Discussion