StableDiffusionを学習させる LoRaの教師画像、正則化

LoRAとは?/StableDiffusionの学習方法

LoRaで追加学習

LoRaとは、「Low-Rank Adaptation」の略語で、既存のモデルに新たな被写体を学習させる、追加学習の手法の一種。

ごく狭い範囲で追加学習させるというもので、高品質な結果が出せることがわかっている。

StableDiffusion系のモデルを使って「特定のキャラクターのイラスト」を生成する場合、通常は呪文に目当てキャラクターの特徴を表すキーワードを含めて、そのキャラクターに近いイラストが出るまで何度も再生成して、アタリが出るまでガチャを引きまくる必要がある。

でも、LoRAを使うと既存のモデルを目当てのキャラクターが出るように調整することができ、目当てのキャラのイラストを決め打ちで生成できるようになるのだ。

Loraを使用すると、イラストの画風の調整や人物の指定、服装や髪型の変更などが可能。

LoRaの学習の準備/Stable Diffusion

LoRaの学習に必要なPCスペック

LoRAを使った学習処理には、最低でも6GB、できれば10GB以上のVRAM(ビデオメモリ)があるグラフィックボードを搭載しているPCが必要だ。

画像生成を行うときと同様にグラフィックボードの性能が非常に重要だよ。性能が足りない場合は買い替えするしかない…。

それかクラウドに課金して動かすか。学習のような長時間GPUをブン回す作業は、GoogleCoraboでは無理だと思う。

環境の構築方法(sd-scriptsを使用)

LoRAを使った学習を行うためには、まず環境を構築する必要がある。 環境の構築は、以下の手順で行う。

  1. 手順1:PythonとGitのインストール
  2. 手順2:PowerShellでコマンドを実行できるようにポリシーを変更する
  3. 手順3:PowerShellでコマンドを打ち込み、環境を構築する

Loraの学習の手順/Stable Diffusion

LoRAを使った学習の手順はこんな感じっぽい。

教師データ(正則化画像)をスクリプトで学習

この方法は、私も調べたけどよくわからんかった。めっちゃハードルが高いと言えるだろう。

LoRAを使った学習処理には、 教師データとなる画像、正則化画像が必要だ。教師データは下記の要件を満たした画像が最低20枚以上必要。

  • 学習させたい被写体が単体で映っている
  • 画像ごとに色々なポーズをとっている
  • 画像ごとに色々な背景が映っている

また、正則化画像はプロンプトに含まれる単語の概念が変わってしまわないようにするための学習用画像だ。

  • 「gui.ps1」を実行して設定を行う
  • 「train.ps1」を実行して学習を行う

高スペックPCを使っても、学習にはめっちゃ時間がかかるっぽい。

拡張機能sd-webui-train-toolsを使う方法

私はコレ最近まで知らなかった。

  • StableDiffusionの拡張機能「sd-webui-train-tools」をインストール。
  • StableDiffusionWeb UIの「TrainTools」タブを使用してLoraの学習と生成。

LoRaで学習させるには、かなり長い時間PCを動かしっぱにする必要がある。

インストールして起動したら、モジュールが足りない旨のエラーが出た。

*** Error loading script: train_tools.py
Traceback (most recent call last):
File "D:\stablediffusion\sd.webui\webui\modules\scripts.py", line 382, in load_scripts
script_module = script_loading.load_module(scriptfile.path)
File "D:\stablediffusion\sd.webui\webui\modules\script_loading.py", line 10, in load_module
module_spec.loader.exec_module(module)
File "<frozen importlib._bootstrap_external>", line 883, in exec_module
File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed
File "D:\stablediffusion\sd.webui\webui\extensions\sd-webui-train-tools\scripts\train_tools.py", line 7, in <module>
from liasece_sd_webui_train_tools.ui import *
File "D:\stablediffusion\sd.webui\webui\extensions\sd-webui-train-tools\liasece_sd_webui_train_tools\ui.py", line 16, in <module>
from liasece_sd_webui_train_tools.train_ui import *
File "D:\stablediffusion\sd.webui\webui\extensions\sd-webui-train-tools\liasece_sd_webui_train_tools\train_ui.py", line 10, in <module>
from liasece_sd_webui_train_tools import train
File "D:\stablediffusion\sd.webui\webui\extensions\sd-webui-train-tools\liasece_sd_webui_train_tools\train.py", line 8, in <module>
from liasece_sd_webui_train_tools.ArgsList import ArgStore
File "D:\stablediffusion\sd.webui\webui\extensions\sd-webui-train-tools\liasece_sd_webui_train_tools\ArgsList.py", line 22, in <module>
import liasece_sd_webui_train_tools.sd_scripts.train_network as train_network
ModuleNotFoundError: No module named 'liasece_sd_webui_train_tools.sd_scripts.train_network'

 

原因調査中。めんどうくさい。

LoRAモデルを使って画像を生成する方法(StableDiffusionwebUIが必要)

学習は大変だけど、使うのは簡単っぽい。StableDiffusion webUIをインストすると、最初からLoRaで画像生成する機能(拡張機能)が入ってる。

LoRaで画像を生成する方法

まず、Stable Diffusion WebUI(Automatic1111)をインストしてあることが前提。

関連)Stable DiffusionのWEBUI Automatic1111の使い方

手順は、フツーに画像生成するのと何も変わらない。LoRaは「モデル」という形で作られる。配布されるときもモデル。サイズはせいぜい数百Mバイト。

  1. StableDiffusionwebUIを起動する。
  2. モデルを選択する。
  3. LoRaモデルの設定を行う。
  4. 画像を生成する。

LoRaの学習方法によって、「何もしなくても発動」「トリガーワードをプロンプトに含めると発動」「<lora:モデル名:強度を表す0.0~1.0の数値>をプロンプトに含めると発動」というのがあるっぽい。

LoRaの学習方法まとめ

LoRaを自分のマシンで学習させるのは、マシンのスペック的にハードルが高いのでまずはメモのみ。

学習済みのLoRaモデルは、civitaiなどで配布されている。

有名人や漫画やアニメの著作権キャラ、特定の作家の画風を真似るものなどが多いが、そのまま生成画像を世に出すと著作権や肖像権などで問題になるかも知れないので注意。個人で楽しむのは自由だが、SNSに投稿するとモメるかも知れないな。

関連)Civitai | Stable Diffusion models, embeddings, hypernetworks and more