この記事では、sd-scriptsを使ったLoRAの作り方を、わかりやすく、簡潔に紹介します。
この記事は2023/10/19に、新しい情報に更新しています。
LoRA作成について(必要なものなど)
今回、LoRA作成はローカルで行なっていこうと思います。
高性能なグラフィックボードが必要になります。
参考までに、私が使っているWindowsノートPCには、GeForce RTX 4070 Laptop GPUを内蔵していますが、正常にLoRAを作ることができました。
方式について
学習の方式には以下の3つがあるとのことです。
- DreamBooth、class+identifier方式
- DreamBooth、キャプション方式
- fine tuning方式
公式のREADMEによると、1の方式は学習データの要素のすべてを特徴と捉えてしまうので、プロンプトでキャラクターの服を変更できなかったりするそうです。
でも、3の方式はなんだかむずかしそうでした。
そんなわけで、今回は2の方式、「DreamBooth、キャプション方式」を使っていこうと思います。
セキュリティの設定(PowerShell実行ポリシーの変更)
sd-scriptsを使うには、PowerShell実行ポリシーを変更する必要があるようです。
PowerShellを管理者として開いたあと、以下のコマンドを実行します。
> Set-ExecutionPolicy Unrestricted
実行ポリシーの変更
実行ポリシーは、信頼されていないスクリプトからの保護に役立ちます。実行ポリシーを変更すると、about_Execution_Policies
のヘルプ トピック (https://go.microsoft.com/fwlink/?LinkID=135170)
で説明されているセキュリティ上の危険にさらされる可能性があります。実行ポリシーを変更しますか?
[Y] はい(Y) [A] すべて続行(A) [N] いいえ(N) [L] すべて無視(L) [S] 中断(S) [?] ヘルプ (既定値は "N"): Y
管理者として開いたPowerShellは閉じてしまって構いません。
学習させたい画像を準備
学習させたい画像を用意します。
今回は、当サイトのオリジナルキャラクター「りこちゃん」の画像を学習させてみることにしました。
学習させた画像は以下の12枚です。
今回は画像1枚の縦横が512pxの正方形にしました。
LoRA作成用のディレクトリ(フォルダ)
任意の場所に任意の名前のフォルダを作成します。
今回はデスクトップに「MyLoRA
」というフォルダを作りました。
その中に「img
」フォルダを作り、用意しておいた学習させたい画像を入れます。
さらに、作ったLoRAのファイルを保存するための「output
」フォルダも作成しておきましょう。
また今回、画像へのタグ付けのため、「WD14Tagger」という「Stable Diffusion web UI」の拡張機能を使います。
そのため、MyLoRA
フォルダの中に「Stable Diffusion web UI」をインストールしておきましょう。
MyLoRA/
|-- img/
| |-- 01.jpg
| |-- 02.jpg
| |-- 03.jpg
| |-- 04.jpg
| |-- 05.jpg
| |-- 06.jpg
| |-- 07.jpg
| |-- 08.jpg
| |-- 09.jpg
| |-- 10.jpg
| |-- 11.jpg
| `-- 12.jpg
`-- stable-diffusion-webui/
`-- ...省略...
「Stable Diffusion web UI」をインストールすると、起動した状態になるはずです。
(このあとの作業でPCが重くなるかもしれないので、停止しておいたほうがいいかもしれません)
また、「Stable Diffusion web UI」のくわしいインストール方法は、こちらを参考にしてください。
モデルについて
今回のLoRAの作成では、モデルに「MeinaMix(https://civitai.com/models/7240/meinamix)」を使おうと思います。
そのため、さきほどインストールしたStable Diffusion web UIでMeinaMixが使えるように、以下の場所にモデルファイルを配置しておいてください。
MyLoRA/
|-- img/
| `-- ...省略...
`-- stable-diffusion-webui/
|-- models/
| `-- Stable-diffusion/
| `-- meinamix_meinaV10.safetensors
`-- ...省略...
sd-scriptsのインストール
つづいて、sd-scriptsをインストールしていきます。
今回、sd-scripts
はMyLoRA
フォルダにインストールします。
MyLoRA/
|-- img/
| `-- ...省略...
|-- stable-diffusion-webui/
| |-- models/
| | `-- Stable-diffusion/
| | `-- meinamix_meinaV10.safetensors
| `-- ...省略...
`-- sd-scripts/
`-- ...省略...
MyLoRA
ディレクトリで、次のコマンドを1行ずつ順番に実行します。(PowerShellは、管理者として開かなくて問題ないです)
git clone https://github.com/kohya-ss/sd-scripts.git
cd sd-scripts
python -m venv venv
.\venv\Scripts\activate
pip install torch==2.0.1+cu118 torchvision==0.15.2+cu118 --index-url https://download.pytorch.org/whl/cu118
pip install --upgrade -r requirements.txt
pip install xformers==0.0.20
python -m pip install bitsandbytes==0.41.1 --prefer-binary --extra-index-url=https://jllllll.github.io/bitsandbytes-windows-webui
accelerate config
すると質問が始まりますので答えます。
このとき、矢印キーを押してしまうと止まってしまうので、0からの数値で選択します。
もし止まってしまったら、もう一度「accelerate config
」を実行しましょう。
入力は以下を参考にしてください。
In which compute environment are you running?
Please select a choice using the arrow or number keys, and selecting with enter
* This machine
AWS (Amazon SageMaker)
----------------------------------------------------------------------------
Which type of machine are you using?
Please select a choice using the arrow or number keys, and selecting with enter
* No distributed training
multi-CPU
multi-GPU
TPU
MPS
Do you want to run your training on CPU only (even if a GPU is available)? [yes/NO]:NO
Do you wish to optimize your script with torch dynamo?[yes/NO]:NO
Do you want to use DeepSpeed? [yes/NO]: NO
What GPU(s) (by id) should be used for training on this machine as a comma-seperated list? [all]:all
Do you wish to use FP16 or BF16 (mixed precision)?
Please select a choice using the arrow or number keys, and selecting with enter
no
* fp16
bf16
accelerate configuration saved at C:\Users\R/.cache\huggingface\accelerate\default_config.yaml
これで、sd-scripts
のインストールは完了です。
設定ファイルの作成
つづいて、設定ファイルを作ります。
例えば、以下のように作って、「config.toml
」という名前でMyLoRA
フォルダに保存します。
image_dir
の部分は、ご自身の環境で画像素材を保存しているパスを入力してください。
[general]
enable_bucket = true
[[datasets]]
resolution = 512
batch_size = 1
[[datasets.subsets]]
image_dir = 'C:\Users\R\Desktop\MyLoRA\img'
caption_extension = '.txt'
num_repeats = 10
MyLoRA
フォルダ全体はこのようになります。
MyLoRA/
|-- img/
| `-- ...省略...
|-- stable-diffusion-webui/
| |-- models/
| | `-- Stable-diffusion/
| | `-- meinamix_meinaV10.safetensors
| `-- ...省略...
|-- sd-scripts/
| `-- ...省略...
`-- config.toml
WD14Taggerで自動タグ付け
用意した画像に、それぞれタグ付けしていきます。
stable-diffusion-webui-wd14-tagger(以下WD14Tagger)を使うと、自動的にタグ付けしてくれるので便利です。
以前は「toriato/stable-diffusion-webui-wd14-tagge」を使っていましたが、新しいwebUIではうまく動作しなくなってしまったので、フォーク版の「picobyte/stable-diffusion-webui-wd14-tagger」を使います。
GitHub[picobyte/stable-diffusion-webui-wd14-tagger]:https://github.com/picobyte/stable-diffusion-webui-wd14-tagger
では、Stable Diffusion web UIにWD14Taggerをインストールしましょう。
Stable Diffusion web UIの画面から「Extensions」、「Install from URL」を選択し、URL for extension’s git repositoryの部分に「https://github.com/picobyte/stable-diffusion-webui-wd14-tagger」と入力します。
そして「Install」をクリックすることで、インストールすることができます。
「Installed」を選択して、「Apply and restart UI」をクリックします。
Reloading…と表示されますので、しばらく待ちます。
すると「Tagger」という項目が増えているはずです。
「Tagger」→「Batch from directory」と選択し、Input directoryとOutput directoryに、画像素材が置かれたディレクトリ(フォルダ)を指定します。ここでは「C:\Users\R\Desktop\MyLoRA\img」と入力しました。
さらに画面をしたにスクロールさせると、Additional tags (split by comma)という項目がありますので、自作したLoRAを使いたいときにプロンプトに入力するワードを指定します。
今回は「rico」としました。
入力したら、「Interrogate」をクリックします。
しばらく待ち、処理が終了したあと、画像素材を配置したフォルダを開きます。
すると次のように、画像ファイルと同じ名前のテキストファイルがそれぞれ作成されています。
(エラーが出てしまった場合は、もういちどやり直してみてください)
試しに01.txtを開くと、次のようになっています。
rico, 1girl, solo, smile, open mouth, solid oval eyes, blonde hair, side ponytail, skirt, :d, chibi, simple background, shirt, pink shirt, bow, white background, ribbon, short hair
あとは、このワードの中から、作りたいキャラクターの特徴を表したものを消します。
例えば、「blonde hair(金髪)」、「side ponytail(サイドのポニーテール)」、といったものです。
これらを消すと、次のようになります。
rico, 1girl, solo, smile, open mouth, skirt, :d, simple background, shirt, pink shirt, bow, white background, ribbon
キャラクターの特徴を消す作業が終わったら、次は実際にLoRAを作っていきます。
バッチファイルの作成と実行
本当ならば、ここでPowerShellにコマンドを打ち込んで実行するのですが、とても長いコマンドですので、バッチファイルを作成しておくと便利です。
今回は、command.batというファイルを作成します。
ファイルまでのパスなど、必要な部分を直してからお使いください。
(^を行末に置くことで改行することができ、見やすくなりますし、編集もしやすくなります)
command.bat
accelerate launch^
--num_cpu_threads_per_process 1 train_network.py^
--pretrained_model_name_or_path="C:\Users\R\Desktop\MyLoRA\stable-diffusion-webui\models\Stable-diffusion\meinamix_meinaV10.safetensors"^
--dataset_config="C:\Users\R\Desktop\MyLoRA\config.toml"^
--output_dir="C:\Users\R\Desktop\MyLoRA\stable-diffusion-webui\models\Lora"^
--output_name=rico^
--keep_tokens=1^
--max_train_epochs=20^
--optimizer_type=AdamW8bit^
--learning_rate=1e-4^
--network_dim=128^
--network_alpha=64^
--bucket_no_upscale^
--lr_scheduler=cosine_with_restarts^
--lr_scheduler_num_cycles=4^
--lr_warmup_steps=500^
--shuffle_caption^
--caption_dropout_rate=0.05^
--save_model_as=safetensors^
--clip_skip=2^
--color_aug^
--xformers^
--mixed_precision=fp16^
--network_module=networks.lora^
--persistent_data_loader_workers^
command.batファイルは、MyLoRA/sd-scriptsフォルダに入れておきましょう。
batファイルを作ることができたら、それを実行してみます。
(venv) PS C:xxx\xxxx\MyLoRA\sd-scripts> .\command.bat
実行すると「A matching Triton is not available, some optimizations will not be enabled. Error caught was: No module named ‘triton’」というエラーが表示されるかもしれませんが、これは気にしなくてもいいようです。
これで、LoRAを作ることができます。
「stable-diffusion-webui」→「models」→「Lora」フォルダに、ファイル(今回であればrico.safetensors)が生成されているかご確認ください。
LoRAを使って画像生成
作ったLoRAを使って、実際に画像生成してみました。
(以下の画像生成は、この記事を新しく更新する前の状態で生成したものです)
テニスをやってみたり……
人魚になってみたり……
重みを調節することで、絵のタッチを変えたりすることもできます。
重みやプロンプトなどの設定で、もっと大幅にタッチを変えてみることもできました。
こんなふうにLoRAを使って学習させることで、自分のイラストが思いもよらないものになって生成されます。
まとめ
今回は、イラストを学習させて、LoRAを作成する方法を紹介しました。
使うモデルなどによっても、学習させたイラストが、まったく違うタッチのイラストになったりします。
いろんなモデルや設定を試して、最強のLoRAを作成していきましょう。