こんにちは!悠です!
今回は下の記事の続きで、「Diffusers」でLoRAを使ってAIイラストを生成する方法に関してまとめていきます。

まだご覧になっていない方は、必ず先にこちらを読んでいただいた後に、この記事の内容を試してみてください。

それでは早速いってみましょう!今回もコピペだけで簡単にできます!
「Diffusers」でLoRAを使う方法
この方法は、下記の記事を参考にさせていただきました。

まず1つ目のセルには今まで通り下記のコードを入力します。
#stable diffusionのインストール !pip install --upgrade diffusers[torch] transformers
2つ目のセルでGoogle Driveのマウントを行います。Google Drive内に保存したLoRAを読み込んでDiffusersで使えるようにするんですね。
from google.colab import drive drive.mount('/content/drive')
3つ目のセルでLoRAを読み込む際に使用する「load_safetensors_lora」という関数を定義します。
この部分は参考文献として紹介した記事の内容を、100%そのまま使わせていただきました。リンク先の「モジュール」という部分です。
これを私のブログに載せるわけにはいかないので、実際にリンク先に飛んでコピペしてください。
ただ、一番最初に!pip install safetensorsを付ける必要があるので、ここだけ注意してください。
!pip install safetensors import torch from safetensors.torch import load_file def load_safetensors_lora(pipeline, checkpoint_path, LORA_PREFIX_UNET="lora_unet", LORA_PREFIX_TEXT_ENCODER="lora_te", alpha=0.75): ######################################################### この先は参考文献のモジュールの欄をそのままコピペしてください。 #########################################################
4つ目のセルで使用するモデルやVAE、LoRAを定義します。
from diffusers import StableDiffusionPipeline, EulerDiscreteScheduler from diffusers.models import AutoencoderKL import torch #画像生成に使うモデルデータ model_id = "AIARTCHAN/MIX-Pro-V4" #画像生成に使う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") #NSFW規制を無効化する if pipe.safety_checker is not None: pipe.safety_checker = lambda images, **kwargs: (images, False)
今回は適用するだけで、手軽にディティールを向上させることができる最強のLoRA「flat2」を使います。
pipe = load_safetensors_lora(pipe, '/content/drive/MyDrive/StableDiffusion/Lora/flat2.safetensors',alpha=1.0)
上記の関数内に、Drive内に保存してあるLoRAファイルのパスを入力してください。
またalphaの部分はLoRAの比重です。お好みで設定してください。
なお試していませんが、LyCORIS(LoConやLoHa)は使えないと思います。あれは専用の拡張機能がないとWebUIでも使用不可ですしね。

5番目(最後)のセルは以前の記事と全く同じです。
import datetime import os #txt2img出力画像の保存先 !mkdir -p /content/txt2img_output # ファイル名に使う日付と時刻のフォーマットを定義する file_format = "%Y%m%d_%H%M%S" i=0 #ポジティブプロンプト prompt = "masterpiece,1girl,school uniform, miniskirt, yellow hair" #ネガティブプロンプト n_prompt = "(worst quality,low quality:1.4),(monochrome,greyscale:1.4),nude,nsfw" #生成枚数 num_images = 3 #出力画像を保存するフォルダ save_path = "/content/txt2img_output" #seed値 seed=1234 while i < int(num_images): #画像を生成 #seed固定 #generator = torch.Generator(device='cuda').manual_seed(seed) #image = pipe(prompt, negative_prompt=n_prompt, width=768, height=512, generator=generator, guidance_scale=7, num_inference_steps=20).images[0] #seed=-1(ランダム)の場合 image = pipe(prompt, negative_prompt=n_prompt, width=768, height=512, guidance_scale=7, num_inference_steps=20).images[0] #出力する画像の名前を生成する image_name = datetime.datetime.now().strftime(file_format) + f".png" #画像を保存する save_location = os.path.join(save_path, image_name) image.save(save_location) i = i + 1
これで準備は完了なので、上から順番にセルを実行していってください。
参考までにLoRA「flat2」を適用して生成した画像を貼っておきます。
モデルには「MIX-Pro-V4」を使用しており、プロンプトは次の通りです。
masterpiece,1girl,school uniform, miniskirt, yellow hair
(worst quality,low quality:1.4),(monochrome,greyscale:1.4),nude,nsfw
複数のLoRAを使う方法
コメント欄で、複数のLoRAを「Diffusers」で使用する方法に関して教えていただきました。
下記の記事にコードを反映しております!

まとめ
以上が「Diffusers」で、LoRAを使ってAIイラストを生成する方法についての紹介でした。
WebUIに比べて制限があったりや何かと不自由な部分も多いですが、Colabで使っても規制やBANリスクはないので気軽に試してみることができますよ!
では、ここまで読んでいただきありがとうございました。
コメント
> Hugging Faceからダウンロードできるものしか使うことができません。Civitaiのモデルデータは使用不可だと思います
変換スクリプトがdiffusersに用意されているので、safetensors形式とかのモデルも簡単に使えますよ!
コメントありがとうございます!
本当ですか!!Civitaiのモデルを使えたらかなり初心者の方におすすめできるようになりますね!
変換スクリプトを探して、なるべく早く記事にしてまとめていきます!!
【追記】やり方がわかりましたので、さっそく明日記事化いたします!
自分で作ったLoraを読み込ませると
RuntimeError: mat2 must be a matrix
というエラーが出るのですがなぜでしょうか
解決策はありますか?
コメントありがとうございます!
LoraではなくLycoris(locon、loha)だったりはしませんでしょうか?
Kohya LoRA Dreamboothで作ったLoraです
色んな動画で作り方があるのでそれを見て作ったのですがもしかしてLoraではないんですか?
花札マークからLoRAを選択する画面に行って、各LoRAの右上に表示されるiマークを押すと詳細が見れます。
その中に「ss_network_module」という部分があると思うんですが、そこにnetworks.loraと表示されていればloraです。lycoris.kohyaならlycorisです。
ただnetwork loraであったとしても、ss_network_argsに “conv_dim”: “1”,”conv_alpha”: “1”みたいな設定があったらそれはLoConらしいです。
どうなっていますでしょうか?
lycoris.kohyaと表示されていました
networks.loraじゃないと読み込まれないんですね
ありがとうございました
Diffusersでは、複数のLoRAを併用することはできるのでしょうか。
コメントありがとうございます!
できるかできないかで言えば、断言はできませんがおそらくできると思います。
ただ「どうやればできるのか」に関しては現在も試行錯誤中です。申し訳ございません…
なるほど…併用は少し難しそうですね…丁寧にありがとうございます。
こちらを参考に環境を構築させて頂きました。
>#LoRAを読み込む
>pipe = load_safetensors_lora(pipe, ‘/content/drive/MyDrive/StableDiffusion/Lora/flat2.safetensors’,alpha=1.0)
再度load_safetensors_lora()をコールし、同様にpipeと使用したいLoRAのパス、alphaを指定したら適用されたようです。
良い感じにlayerに追加してくれてるのかもしれません。
UIに関しては、
#LoRA_2を読み込む
LoRA_USE_2= True #@param {type:”boolean”}
if LoRA_USE_2== True:
LoRA_2=””#@param {type:”string”}
LoRA_alpha_2 = -1#@param {type:”number”}
pipe = load_safetensors_lora(pipe, LoRA_2, alpha=LoRA_alpha_2)
等で単純に読み込みの数の追加はしてはいけるかと思います。
これだと数が多くなると煩雑になりますが…
3個以上は試せていません。
物によっては掛け合わせるとalpha値を調節しないと推奨値でも崩れるかもしれません。
コメントありがとうございます!複数のLoraを適用出来るとは!!
非常に有益すぎる情報です!!明日早速試して、記事内に反映させていただきます!!
追記です。
崩れる物は、EulerDiscreteScheduler以外も試してください。