Kohya's GUIでLoRAの学習をする
参考
LoRA guide
StableなLoRA学習環境がローカルマシンでもできるKohya’s GUIの設定方法
https://github.com/bmaltais/kohya_ssKohya's GUI
Windowsでインストール
依存関係
✅Python 3.10
✅Git
✅Visual Studio
https://github.com/bmaltais/kohya_ss#installationgit clone
Git Bash Here
$ git clone https://github.com/bmaltais/kohya_ss.git
$ cd kohya_ss
フォルダ内のsetup.batをダブルクリック
いくつか質問されるので選択する(選択肢は数字キー(0, 1, 2...)で選べるよ)
どの環境で使っているか?
This machine
どのタイプのマシンを使っていますか?
No distributed training
CPUのみでトレーニングを実行しますか?
NO
torch dynamoでスクリプトを最適化しますか?
NO
DeepSpeedを使用しますか?
NO
このマシンでのトレーニングに使用するGPU(idによる)をカンマ区切りでご記入ください。
グラボが1個しかなければall
FP16またはBF16を使用しますか?
nomadoor.iconの場合RTX3070はBF16に対応しているのでBF16を選択
(オプション)CUDNN 8.6のダウンロードとインストール
NVIDIA 30X0/40X0を持っていれば使える
https://developer.nvidia.com/rdp/cudnn-archive#a-collapse860-118
からcuDNN v8.6.0をダウンロード
解凍してcudnn_windowsにリネーム
kohya_ssフォルダに置く
ターミナルでkohya_ssフォルダに移動して以下を実行
$ .\venv\Scripts\activate
$ python .\tools\cudann_1.8_install.py
ここあんまり自信ないnomadoor.icon
https://github.com/bmaltais/kohya_ss/issues/1345PyTorch 2.0版ならCuDNNいらないらしい
アップグレード
upgrade.batをダブルクリック
実行する
gui-user.batをダブルクリック
今はgui.batしかないwogikaze.icon
表示されたURLをブラウザで開く
素材の準備
https://www.youtube.com/watch?v=N4_-fB62Hwk
画像を用意する
少なくとも512×512以上、できる限り高画質
Topaz Gigapixel等で解像度を上げる方法もある
縦横比は気にしなくて良い
いらない部分はトリミング
画像の枚数は8の倍数が良い
そうなんだ基素.icon
ステップ数がバッチ数で綺麗に割り切れる数であれば良いのかなnomadoor.icon
ステップ数 = 画像数 × リピート × epochs
👍ステップ数 % バッチ数 = 0
キャプションをつける
Kohya's GUIのUtilitiesにBLIP等を使った自動キャプション生成機能がある
今回はクオリアさんでやるので二次絵に強いWD14-taggerを使う
BLIPの性能がイマイチなので実写でもWD14-taggerを使ってもいいかもしれない
https://gyazo.com/50edff6ee7c5ac71be04c365ee02f75d
Basic Captioningに移動してテキストファイルの先頭にquoria-san,をつける
https://gyazo.com/d62ff389bf271854a507b9b329f7cc78
画像の横にキャプションが書かれたtxtファイルが生成されている
画像と比較しながら、妥当かどうか調べ、必要があれば編集する
→ LoRA学習でのタグ付けTips
とても面倒くさいnomadoor.icon基素.icon
トレーニング設定
Dreambooth LoRA欄に移動
基素.iconがkohyaでやったときにはNAIの手法の方でやったのでこの辺りから違いそう
📁Source model
https://gyazo.com/54dfbef0ff30161e799bb8849abcbcd8
ベースに使うモデルを選択
フォーマットを選択
🟩v2 / 🟩v_parameterization はSD 2.X系を選んだときに必要
https://github.com/kohya-ss/sd-scripts/blob/main/train_db_README-ja.md#stable-diffusion-20%E5%AF%BE%E5%BF%9C---v2----v_parameterizationStable Diffusion 2.0対応 --v2 / --v_parameterization
📁Folders
Image folder
さっき作った学習用素材を指定する
が、ちょっとややこしい
code:ディレクトリ構造
📁適当なフォルダ
└ 📁img
└ 📁100_quoria-san
└ 🖼️📄作った画像とtxtファイル達
🚨imgフォルダのパスを指定する
$ C:/AI/SD 追加学習素材/LoRA/img
100_quoria-sanの100は繰り返しの回数
学習画像が15枚以上なら100
それ以下なら1500/画像の枚数を入れる
これもとのスクリプトでもそうなんですかね?指定した記憶がない…基素.icon
https://github.com/kohya-ss/sd-scripts/blob/main/fine_tune_README_ja.md#%E5%AD%A6%E7%BF%92%E3%81%AE%E5%AE%9F%E8%A1%8Cmax_train_stepsにステップ数を指定するっぽいですねnomadoor.icon
Kohya's GUIでいう100 × 画像枚数 × バッチ数ががmax_train_stepsなのかな
🚨更新
100回回したモデルを一つ作るよりも、10回刻みで回したモデルを10個作る方が都合が良い
今は15_フォルダ名にして下のEpoch数を15に、つまり15×15=225回してますnomadoor.icon
Regularisation folder(正則化画像)
正則化画像は必要ない
LoRAの学習に正則化画像は設定したほうが良い
🤔nomadoor.icon
code:ディレクトリ構成
📁適当なフォルダ
└ 📁classification
└ 📁1_car
└ 🖼️画像
上のimgと同じでclassificationのパスを指定する
Output folder
どこでも良いが、Stable Diffusion web UIのLoRAフォルダーにしておくと楽
$ ~~\stable-diffusion-webui\models\Lora
Logging folder
学習ログを置くフォルダ
これもどこでも良いけれど、imgフォルダの横に置くといいかも?
Model output name
好きなモデル名
📁Training parameters
LoRA type
LoRA / LoCoN / LoHAの指定ができる
Train batch size
処理を並行して行う
2なら、ステップ数が半分になる
増やせば早くトレーニングが終わるが、損失が増え(て失敗す)るため、元画像が膨大でないなら1or2で良い
Epoch
何回学習を回すか?
1回学習ごとにLoRAモデルが作られる
10にすると10個モデルができるため、XYプロットで過学習の判別ができる
15回くらいにしておく
Kohya_ss LoRAは途中で中断して再開という機能がない
代わりにKohya's GUIでLoRAの学習をする#63fbd5e0e2dacc0000e80f5dの値を小さくしてEpoch数を増やせば、n回目のLoRAモデルから再学習できる
Max train epoch
Max train steps
Save every N epochs
Caption Extension
キャプションファイルはテキスト形式で作ったので.txtを入れる
Mixed precision
使える人はbf16
Save precision
bf16が使える人も互換性のためにfp16にしたほうが良い?
Cache latents
Kohya's GUIでLoRAの学習をする#63fbde1ee2dacc0000e80f8bを使うためには✅を外す必要がある
Cache latents to disk
Optimizer
LR scheduler extra arguments
Optimizer extra arguments
LR number of cycles
LR power
Seed(デフォルト 1234)
再現性のために1234のままにしておくのが良い
以下鬼門
よく分からないのでとりあえずコピペnomadoor.icon
Learning rate
0.0001
LR Scheduler
cosine_with_restarts
Text Encoder learning rate
3e-5
Network Rank(Dimension) / Network Alpha
128
Max resolution(デフォルト 512,512)
512,512
576,576がいいらしいhttps://rentry.org/59xed3
Enable buckets(デフォルト ✅)
✅が入っていると、アスペクト比がバラバラでも学習できる
🔻Advanced Configuration
Clip skip
リアル系なら1 アニメ系なら2 が良い?
※SD2.0はデフォルトで後ろから二番目の層を使うため、SD2.0の学習では指定しないでください。https://github.com/kohya-ss/sd-scripts/blob/main/fine_tune_README_ja.md#%E4%BD%BF%E7%94%A8%E3%81%99%E3%82%8Bclip%E5%87%BA%E5%8A%9B%E3%81%AE%E5%A4%89%E6%9B%B4
Gradient checkpointing(デフォルト 🟩)
各レイヤーに1つだけ活性化を保存:学習速度が30%低下する代わりに、使用するメモリは劇的に少なくなるhttps://huggingface.co/addy88/gptj8
Use 8bit adam(デフォルト ✅)
使わないほうが良いらしい
なくなった?nomadoor.icon
Bucket resolution steps(デフォルト 64)
32
さっぱり意味がわからなかったnomadoor.icon
解像度を何の倍数にするか決める。VAEが8分の1にするので最低でも8の倍数にした方が良い。
minとmax指定になってる,さっぱりわからないwogikaze.icon
Random crop instead of center crop(デフォルト 🟩)
✅
学習をする度にクロップする位置をちょっとずつ変える?
といいことがあるらしい???
Noise offset(0-1)
Stable Diffusionで極端な明暗を表現できない理由とその解決の実装
おそらく0.1で良い
Rate of caption dropout(デフォルト 0)
0.1
学習する度に10%の確率でキャプションが弾かれる
といいことがあるらしい???
Max num workers for DataLoader
0
処理が早くなるらしい
一番上に戻ってConfiguration file(設定ファイル)
しっかり保存しておきましょう
https://gyazo.com/a3db14a7fc212e9053b96957b04f721a
.jsonを忘れずにつけてSave💾
トレーニング開始
Train modelボタンを押してトレーニングを開始する
ターミナルの表示を確認してちゃんと開始されたかを確認
学習時間 : バッチサイズ1 3200ステップで45分
すごい短い?基素.icon
バッチサイズ2 10000ステップで6-7時間かかった
CUDNN入れないとダメなのかなぁ
バッチサイズ2で10000ステップは多いですね…nomadoor.icon
バッチサイズ2の4800ステップで2時間半強だったので、それくらいかかるかも
なるほど基素.icon
ステップの間の待ち時間?が結構長いのがやっていて気になりました
GPUがしばかれてない時間が半分ぐらいある
ログを見る
https://gyazo.com/932bc8d587ac37ec614de4cd234836b1
Train modelの下にあるStart tensorboardを押すと、ログファイルをもとにしたグラフを表示できる
https://gyazo.com/21cf1788f00ae4dbfcb42a042106aaa4
使ってみる
→web UIでLoRAモデルを使う
https://gyazo.com/b8764939036d84d3ce60c81bb911cb0fhttps://gyazo.com/57540375a9c991499bd4777d9daf0bd5https://gyazo.com/72b3a0fff9ba26dddebfbfd671d10fd8
左のprompt
code:ACertainModel
qualia-san, 1girl,Highly Detailed,looking at viewer,upper body,from front,bangs,wide view ,chibi, full body, wearing kimono <lora:qualia-san_v1.0:0.7>
すごいnishio.icon
2023/4/16
各所修正nomadoor.icon
Kohya's GUIはLoRA以外もできるのでタイトルを変更