【Stable Diffusion】DiffusersでCivitaiのモデルデータを変換して使う方法を紹介!

こんにちは!悠です!

 

今回はColab無料枠でも制限なくAIイラストを生成できる「Diffusers」を使って、Civitaiのモデルデータを利用する方法をご紹介いたします。

Diffusersで使うことができないsafetensors形式のモデルデータも、変換スクリプトに通してやることで問題なく使えるようになりますよ!

 

なおこの記事は下で紹介したものの続きになります。最初にこちらをご覧になってから、この記事の内容を試してみてください。

【Stable Diffusion】Diffusersを使ってColab無料枠でAIイラストを生成する方法【2023年】
無料版のGoogle Colaboratoryでも、規約違反することなく「Stable Diffusion」でAIイラストを生成できる「Diffusers」の使い方についてまとめた記事です。

 

アイキャッチ画像はモデルに「NostalYakiMix」を使用しています!Civitaiでダウンロードできます。最近AI君が書いてくれた手の絶妙なグチャり具合が好きになってきましたw
スポンサーリンク
スポンサーリンク

変換スクリプトの入手方法

CivitaiのモデルデータをDiffusersでも使えるようにする変換スクリプトは、LoRAを手軽に自作できるツール「kohya gui」の作者であるkohya様によって配布されています。

下記のページ内にある「convert_diffusers20_original_sd_v4.zip」をダウンロードしてください。

Stable Diffusion checkpointとDiffusersモデルの相互変換スクリプト(SD2.0対応)|Kohya S.|note
はじめに Stable Diffusion checkpointとDiffusersモデルの変換スクリプトは、Diffusers公式からStable Diffusion v1.xのものは提供されていますが、2.0対応のものは12/3時点でリリースされていません。拙作のDreamBooth学習スクリプトでモデル自体の変...

 

 

保存したらZIPファイルを解凍しておきましょう。



変換スクリプトでCivitaiのモデルデータを変換する

今回ダウンロードした変換スクリプトはGoogle Colaboratory上でも、ローカル環境でも使用することができます。

 

Google Colaboratory版の場合

まず最初に先ほどダウンロードした変換スクリプトの中にある「convert_diffusers20_original_sd.py」と「model_util.py」をGoogle Drive上にアップロードします。

 

私の場合は下記のように、Scriptフォルダを作成してその中に保存しました。

 

次に変換したいモデルデータを、そのモデルデータ名のフォルダの中に保存しておいてください。

例えば「chilled_remix_v1Fp16vae.safetensors」というモデルなら、「chilledremix」というフォルダの中に保存します。

 

次のColabを起動します。下の記事で紹介したDiffusersでLoRAを使用できるノートブックを作成している前提で説明していきます。

【Stable Diffusion】Diffusersを使ってColab無料枠でAIイラストを生成する方法【2023年】
無料版のGoogle Colaboratoryでも、規約違反することなく「Stable Diffusion」でAIイラストを生成できる「Diffusers」の使い方についてまとめた記事です。

 

今回の変換スクリプトを使う前に1~4番目のセルを一度実行しておいてください。これはpip install系のコマンドで必要なモジュールをインストールするためです。

6番目以降のセルに下記のコードを入力し実行します。

#スクリプトを格納するフォルダを作成
!mkdir -p /content/script

#Driveから変換スクリプトをコピー
!cp /content/drive/MyDrive/StableDiffusion/script/convert_diffusers/convert_diffusers20_original_sd.py /content/script
!cp /content/drive/MyDrive/StableDiffusion/script/convert_diffusers/model_util.py /content/script

 

このセルでDriveに保存した変換スクリプトをcolab内にコピーしています。

 

その次のセルに下記のコマンドを入力して実行します。

%cd /content/script

#モデルデータを変換する
!python convert_diffusers20_original_sd.py /content/drive/MyDrive/StableDiffusion/Model/chilledremix/chilled_remix_v1Fp16vae.safetensors /content/drive/MyDrive/StableDiffusion/Model/chilledremix --v1 --reference_model runwayml/stable-diffusion-v1-5

 

モデルデータを変換するコードは、次のように入力しましょう。

!python convert_diffusers20_original_sd.py (変換したいモデルデータのパス)(変換したモデルデータを保存するパス)–v1 –reference_model runwayml/stable-diffusion-v1-5

 

変換したモデルデータを保存するパスには、「chilledremix」フォルダのようにモデルデータの1つ上の階層を指定するのがおすすめです。

 

セルを実行すると、Diffusersで利用するのに必要なファイルが出力先に自動生成されます。

 

 

それではこの変換したモデルをDiffusersで使ってみましょう。4番目のセル(モデルやVAEを定義するセル)内に次のように入力します。モデルのパスの部分以外はすべていつもと同じです。

from diffusers import StableDiffusionPipeline, EulerDiscreteScheduler
from diffusers.models import AutoencoderKL
import torch

#画像生成に使うモデルデータ
model_id = "/content/drive/MyDrive/StableDiffusion/Model/chilledremix"
#画像生成に使うVAE
vae = AutoencoderKL.from_pretrained("stabilityai/sd-vae-ft-ema")
#画像生成に使うスケジューラー
scheduler = EulerDiscreteScheduler.from_pretrained(model_id, subfolder="scheduler")

pipe = StableDiffusionPipeline.from_pretrained(model_id, scheduler=scheduler, vae=vae, custom_pipeline="lpw_stable_diffusion")

#LoRAを読み込む
pipe = load_safetensors_lora(pipe, '/content/drive/MyDrive/StableDiffusion/Lora/flat2.safetensors',alpha=-1.0) 

pipe = pipe.to("cuda")

 

画像生成に使うモデルデータの欄に、下記のようにモデルデータと変換スクリプトで生成したファイルが含まれているフォルダを選択してください。

model_id = “/content/drive/MyDrive/StableDiffusion/Model/chilledremix

 

この際、モデルデータ自体(chilled_remix_v1Fp16vae.safetensors)を選択してしまうとエラーになるので注意しましょう。

これで導入は完了です。実際に画像を生成してみてください。

 

ローカル環境で変換する場合

ローカル環境でこのスクリプトを使うためにはPytorch環境が必要になってきます。

「Stable Diffusion WebUI」を導入している方は、「~\webui\venv\Scripts」の中に変換スクリプト「convert_diffusers20_original_sd.py」と「model_util.py」をドラッグアンドドロップし、そのディレクトリ内で変換コマンドを使えばOKです。

 

まとめ

以上が、DiffusersでCivitaiのモデルデータを利用可能にする変換スクリプトの使い方でした。

これでDiffusersでも「全モデルデータの使用」+「LoRAの使用」ができるようになりましたね!

 

後はhires.fixと拡張機能の導入さえできれば、ほぼWebUIと同じ使い方ができるんですが…

やり方を発見しましたら、すぐに記事にしてまとめていきます。

 

では、ここまで読んでいただきありがとうございました。

コメント

  1. yaashi より:

    素敵な記事をありがとうございます。
    前の記事を実行したのち、今回の記事でセル4のモデルをXXMix_9realisticという三次元モデルに変更し画像生成をしたのですが、出力が全て二次元のアニメイラストで行われてしまいます。
    何か考えられる原因はありますでしょうか。

    • 悠 より:

      コメントありがとうございます!

      それは不思議ですね…!
      diffusersで3次元モデルの画像を生成できることはchilledremixで確認できたので、例えばポジティブにphotorealistic、ネガティブにpaintingやillustrationとか入れても変わりませんでしょうか?

      ちなみに今diffusersで使用しているプロンプトをwebuiでつかうと、3次元モデルが生成されますでしょうか?(もしwebuiを導入出来ない環境の場合は申し訳ありません!)

      後もしかすると、XXMix_9realisticの前にアニメモデルでイラストを生成していた場合、何かのきっかけで前のモデルが残ったままになっているとかありえますかね?
      なので一度ランタイムを削除して再度XXMix_9realisticを指定すると上手くいったりするかも、と思いました!

      あ、あともう一つ思いついたんですが、モデルを指定した後4つ目のセルを再度実行していないとかありませんかね?

  2. yaashi より:

    ありがとございます。
    >>一度ランタイムを削除して再度XXMix_9realisticを指定すると上手くいったりするかも、と思いました!
    こちらと
    >>ポジティブにphotorealistic、ネガティブにpaintingやillustrationとか入れても変わりませんでしょうか?
    で無事に解決しました。
    お忙しい中にお返事をいただき本当にありがとうございます!!