Google Colab で hallo2 を使うときにハマったこと
下記の記事を読み、Google Colab で hallo2 を使いたいと思いました。
思い切ってColab PROを購入して、取り掛かりました。
でも、上手く行きませんでした。
まず参考にした記事は、こちらです。
Repositoryは、こちらです。
今回の失敗の原因
- huggingface_hubとdiffusersのアップデートが必要だった
- 必要なモデルをすべてダウンロードできていなかったこと
- サンプル素材のディレクトリの指定の誤り
huggingface_hubとdiffusersのアップデート
Google Colabのノートブックで実行しているとき、次のエラーが出ました。
Traceback (most recent call last):
File "/content/./hallo2/scripts/inference_long.py", line 36, in <module>
from diffusers import AutoencoderKL, DDIMScheduler
File "/usr/local/lib/python3.10/dist-packages/diffusers/__init__.py", line 5, in <module>
from .utils import (
File "/usr/local/lib/python3.10/dist-packages/diffusers/utils/__init__.py", line 38, in <module>
from .dynamic_modules_utils import get_class_from_dynamic_module
File "/usr/local/lib/python3.10/dist-packages/diffusers/utils/dynamic_modules_utils.py", line 28, in <module>
from huggingface_hub import cached_download, hf_hub_download, model_info
ImportError: cannot import name 'cached_download' from 'huggingface_hub' (/usr/local/lib/python3.10/dist-packages/huggingface_hub/__init__.py)
ChatGPT PlusのGPT-4oに質問したところ、huggingface_hub パッケージのバージョンが古いために発生している可能性がありますと回答がありました。
それで、下記のコマンドを実行しました。
1.huggingface_hub パッケージを更新
!pip install --upgrade huggingface_hub
2. diffusers パッケージも更新
!pip install --upgrade diffusers
モデルのダウンロードについて
参考にした記事では、ファイルが大きすぎてダウンロードができなかったことが書かれていました。
私は、この部分のダウンロードできなったモデルの一覧を作り手動でダウンロードするという部分を行っていなかったのです。
今回ChatGPT PlusのGPT-4oを使て、モデルのダウンロードができるコードを作りました。
from huggingface_hub import HfApi
# リポジトリIDを指定
repo_id = "fudan-generative-ai/hallo2"
base_url = f"https://huggingface.co/{repo_id}/resolve/main"
# ダウンロード先ディレクトリ
download_dir = "./pretrained_models"
# Hugging Face APIを使用してリポジトリ内のファイル一覧を取得
api = HfApi()
files = api.list_repo_files(repo_id=repo_id)
# wgetコマンドを作成して実行
import os
if not os.path.exists(download_dir):
os.makedirs(download_dir)
for file in files:
# フルURLを生成
file_url = f"{base_url}/{file}"
# 保存先パス
save_path = os.path.join(download_dir, file)
# 保存先のディレクトリが存在しない場合は作成
os.makedirs(os.path.dirname(save_path), exist_ok=True)
# wgetコマンドを実行
os.system(f"wget -O {save_path} {file_url}")
このコードを実行して、必要なモデルのダウンロードと配置ができました。
リップシンクに使う画像と音声ファイルのディレクトリの指定
リップシンクで使う素材は、下記のディレクトリの中にあります。
/content/hallo2/examples
この場所の指定が、上手く行かなかったのです。
それで最初は、下記のように直接下記のファイルを修正しました。
/content/hallo2/scripts/inference_long.py
このように、修正しています。
画像のディレクトリ
修正前
parser.add_argument("--source_image", type=str, required=False,
help="source image")
修正後
parser.add_argument("--source_image", type=str, required=False, default="/content/hallo2/examples/reference_images/1.jpg",
help="source image")
音声のディレクトリ
修正前
parser.add_argument("--driving_audio", type=str, required=False,
help="driving audio")
修正後
parser.add_argument("--driving_audio", type=str, required=False, default="/content/hallo2/examples/driving_audios/1.wav",
help="driving audio")
全体のコード
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument(
"-c", "--config", default="configs/inference/long.yaml")
parser.add_argument("--source_image", type=str, required=False, default="/content/hallo2/examples/reference_images/1.jpg",
help="source image")
parser.add_argument("--driving_audio", type=str, required=False, default="/content/hallo2/examples/driving_audios/1.wav",
help="driving audio")
parser.add_argument(
"--pose_weight", type=float, help="weight of pose", required=False)
parser.add_argument(
"--face_weight", type=float, help="weight of face", required=False)
parser.add_argument(
"--lip_weight", type=float, help="weight of lip", required=False)
parser.add_argument(
"--face_expand_ratio", type=float, help="face region", required=False)
parser.add_argument(
"--audio_ckpt_dir", "--checkpoint", type=str, help="specific checkpoint dir", required=False)
command_line_args = parser.parse_args()
実際には、このスクリプトを直接修正しなくても、環境設定のファイルを修正することで対応できます。
こちらのファイルです。
/content/hallo2/configs/inference/long.yaml
このファイルの中身を適宜修正してください。
ご自身のファイルを使うときも、このファイルを修正してください。
source_image: ./examples/reference_images/1.jpg
driving_audio: ./examples/driving_audios/1.wav
私の環境では、examplesのディレクトリが、下記の位置でした。
/content/hallo2/examples
hallo2というディレクトリ名が無いことで、今回エラーになりました。
実行結果
今回1.jpgなど1の素材を使ったので、このディレクトリになったと思います。
merge_video.mp4を再生すると、リップシンクができていました。
/content/output_long/debug/1/merge_video.mp4
まとめ
以上の内容が、Google Colabでhallo2を実行したときに発生するエラーです。
このエラーが出ずに、スムーズに使える場合もあるかもしれないです。
今回私の学びとして備忘録を兼ねて、記事にまとめました。
Discussion