ml-stable-diffusionでckptのモデルを使用する

Apple Silicon MacでAI画像生成の続き

今回はcpkt形式で配布されているモデルをml-stable-diffusionで使用する方法について、アニメ風イラスト生成に特化したSakuraMix-V2というモデルを例にして解説します。

cpkt形式のモデルを直接CoreML用モデル(mlpackage形式)に変換することはできないので、cpkt → diffusers → mlpackage という二段階の変換を行う。なお、ギガバイト級のファイルをいくつもダウンロードするのでモバイル回線で実行するのは避けましょう。

モデル変換

pythonの追加ライブラリをインストール

pip install omegaconf

pip install safetensors

ckptをdiffusersへ変換するスクリプトを取得

ckptをdiffusersに変換pythonスクリプトconvert_original_stable_diffusion_to_diffusers.pyをダウンロードしてml-stable-diffusionのディレクトリに設置

モデルをダウンロード

Hugging Faceのnatsusakiyomi/SakuraMix からSakuraMix-v2.cpktをダウンロードしてml-stable-diffusionのディレクトリに設置

ckptからdiffusersに変換

以下のコマンドを実行する

python convert_original_stable_diffusion_to_diffusers.py --checkpoint_path SakuraMix-v2.ckpt --device cpu --extract_ema --dump_path ./SakuraMix-v2

⚠️ 変換作業が終わっても --dump_path で指定したフォルダを削除してはいけない。このフォルダがないと画像変換時にHugging Faceからモデルをダウンロードしようとしてエラーになる

diffusersからmlpackageに変換

以下のコマンドを実行する

python -m python_coreml_stable_diffusion.torch2coreml --convert-vae-decoder --convert-unet --convert-text-encoder --convert-safety-checker --model-version SakuraMix-v2 --attention-implementation SPLIT_EINSUM -o ./models/

modelsディレクトリに以下の4つのファイルが生成されたら変換成功

Stable_Diffusion_version_SakuraMix-v2_safety_checker.mlpackage
Stable_Diffusion_version_SakuraMix-v2_text_encoder.mlpackage
Stable_Diffusion_version_SakuraMix-v2_unet.mlpackage
Stable_Diffusion_version_SakuraMix-v2_vae_decoder.mlpackage

画像生成

ツインテメイドを描かせてみる

python -m python_coreml_stable_diffusion.pipeline --prompt "1 girl, twintails hair, maid" -i ./models/ -o ./images/ --model-version=SakuraMix-v2 --compute-unit ALL --seed 1412351639

こんなのが出てきた

ツインテメイド指定で色々出してみた

次回は真っ黒画像が出力される問題への対策と、長いプロンプトを入れるとエラーになる問題に対処します