sd-webui-train-toolsでLoraを作成する

# はじめに
Loraを作成する方法の一つにsd-webui-train-toolsがあります。
本記事ではこちらを使用してLoraする方法を簡単に紹介します。

sd-webui-train-toolsはGitHubで公開されており、READMEに基本的な使用方法が記載されています。
中国語ですが、気になった方は確認してみてください。
→https://github.com/liasece/sd-webui-train-tools

# sd-webui-train-toolsのインストール
筆者は以下サイトを参考にインストールを行いました。
本記事ではインストールの説明は割愛させていただきます。
https://romptn.com/article/18453

# Lora作成
Loraで追加学習可能なものは多岐にわたりますが、本記事では「キャラクター」と「風景」のLoraを取り扱います。
著作権的にネット上に存在するソースの使用は避け、自身で作成・収集した画像をもとに作成していきます。

## キャラクター編
### 学習元の画像の準備
mimmiというキャラクターを作成しました。
この子のLoraを作ります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3527067/42cd9cb2-c6c0-b079-6a62-71a4b9606e84.png)

30枚のイラストを作成準備しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3527067/8c547cd3-a348-40a9-2ed3-7ae4620a27a9.png)

### Lora作成
Train Toolsタブからsd-webui-train-toolsを開き「Create Project」ボタンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3527067/69e96de0-634d-3b9c-b357-6b406df0a69b.png)

プロジェクト名を入力して「OK」ボタンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3527067/9b9bc454-e5e4-fc1a-2d08-b329dd76f00a.png)

同じように「Create Version」ボタンからバージョンを設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3527067/8094d66f-d402-1508-dd49-d8224bbe95c6.png)

以下の画面表示となるため「Upload Dataset」部分に画像をドラッグアンドドロップします。

:::note warn
画像の1枚ずつのアップロードができず複数画像を一度にアップロードする必要があるため注意してください。（細かいですが初回に少しつまずいたため共有でした。）
:::
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3527067/e18ee184-a683-8559-0dae-5a4c9819a745.png)

アップロードが終わると以下のように表示されます。
続いて「Update Dataset」ボタンをクリックします。パラメータはデフォルトを使用しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3527067/24094bd9-6443-d128-cc84-c972be15cbaf.png)

画像が取り込まれると以下のように表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3527067/be77e97f-41b5-4d32-638b-e706b9c34a80.png)

続いて画面下部でパラメータを設定して「Begin Train」ボタンをクリックします。
パラメータについては学習元画像の枚数などにより適切な値が異なるため、調整が必要になります。今回は画像のように設定しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3527067/4494fa99-a178-f5a7-599b-45564432e9aa.png)

Lora作成には時間がかかるため、できるまで時間をつぶします。
作成が終わると`stable-diffusion-webui\extensions\sd-webui-train-tools`配下にLoraが作成されていることが確認できます。

### 作成したLoraで画像生成
Loraをstable-diffusion-webuiの所定のディレクトリに配置後、PromptでLoraを適用して実行したところ、以下のエラーが出ました。
``
NansException: A tensor with all NaNs was produced in Unet. This could be either because there's not enough precision to represent the picture, or because your video card does not support half type. Try setting the "Upcast cross attention layer to float32" option in Settings > Stable Diffusion or using the --no-half commandline argument to fix this. Use --disable-nan-check commandline argument to disable this check.
``

以下サイトの通りに`--no-half`オプションをつけたところ解決しました。
→https://www.ipentec.com/document/software-stable-diffusion-error-nans-exception-a-tenor-with-all-nans-was-produced-in-unet

以下画面から再度「Generate」します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3527067/5c48c3f4-74cf-2225-bf6e-23b28c245494.png)

作成できました！
自分書いた絵よりも下手になっている気がしますが、生成してくれただけよしとします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3527067/a5de2500-5958-56a6-c937-fa18a5ac206c.png)

## 風景編
### 学習元の画像の準備
関内近くのコリアンタウンの画像でLoRAを作成してみます。
以下のような写真を15枚準備しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3527067/7944213c-76b5-1537-eab8-619ca4bf76fd.png)

### Lora作成
前述のLoraと同じ手順になります。

### 作成したLoraで画像生成
コリアンタウンLoraを適用後に「Genarete」しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3527067/5da50bc1-da49-e9fc-e90d-fc85007adba0.png)

少し粗さはありますが、想定通りの画像が作成できました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3527067/a8eebbed-2bf9-18de-9783-d7107e8202a5.png)

### おまけの検証
プロンプトに色々指定してみましたが反映されず、コリアンタウンのみの画像が生成されます。Prompt + Loraで画像生成するには、さらに調整が必要かもしれません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3527067/2c815a79-bd2c-2910-1d48-669e8b304b89.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3527067/13329489-9b81-e0e8-a5bb-c7cff1a3ebdf.png)

# おわりに
sd-webui-train-toolsでのLora作成はいかがだったでしょうか。
本記事が少しでも何かの参考になれば幸いです。

今後は「Promptと合わせて画像生成する方法」と「他の方法でのLora作成」も試していく予定です。良ければまたチェックしてみてください。