今回は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
こんなのが出てきた
ツインテメイド指定で色々出してみた
次回は真っ黒画像が出力される問題への対策と、長いプロンプトを入れるとエラーになる問題に対処します