LoRA学習における学習準備~実施までの紹介です。
学習についてくわしく教えて!
- このwikiの紹介は、ページ長の制約上、説明を端折っています。
- このページの説明で行き詰まったときは、公式のReadmeを読んでみましょう。
このWikiより詳しい。
Readmeの保存先は、
(1)sd-scriptsでWeb検索
(2)codeタブ内の下記データを参照。
sd-scriptsのcodeタブ
├ docs
│ └ (各種.mdデータ)
└ README-ja.md
準備前に知っておきたいこと。
フォルダ名やファイル名に使用する文字
フォルダ名、ファイル名は半角英数字とハイフン(-)、アンダーバー(_)の使用を推奨する。
特殊記号、全角文字(マルチバイト文字)を使用すると正常に動作しない場合がある。
半角スペースも教師画像を配置するフォルダのidentifierとclassの区切り文字以外では極力使用しないほうが良い。
学習方式
こちらに記載の通り、3種類の学習方式がある。
「DreamBooth、キャプション方式」を使えば、とりあえずOKと覚えておこう。
それ以外は慣れてから。
DreamBooth、キャプション方式(正則化画像使用可)
■公式解説
主流はこれです。
タグファイル(.txt)と、好みで正規化画像を準備して学習します。
fine tuning 方式
■公式解説
タグファイル(.txt)とキャプションファイル(.caption等)の両方を用意し、スクリプトでmeta jsonに合成して学習に使う方式。
メリットは、正規化画像が必要ではない。複数のキャラがいる画像の場合も、誰が誰だったのか、特定しやすい。
デメリットといえば、今の時点の自動captionソフトの精度がそれほど高くない。少々面倒。
DreamBooth、class+identifier方式
■公式解説
3文字のランダムトークン"shs"などを指定しなければならない方式。
タグ不要だが、画像枚数はかなり必要。画像の雰囲気で学習してもらうことになるので、画像枚数が少ないと精度は劣るかもしれない。
かなり不便だったので現在は淘汰されつつあります。
LoRAと他の学習方式の比較
| 学習方式 | sd-scriptsで使用するスクリプト | 相違点 | |
| 学習形式 | 方式 | モデルを学習対象に含むか | |
| LoRA | DreamBooth、キャプション方式 | train_network.py SDXL学習時はsdxl_train_network.py | No |
| fine tuning 方式 | No | ||
| DreamBooth、class+identifier方式 | No | ||
| fine tuning | fine tuning | fine_tune.py | Yes |
| DreamBooth | DreamBooth、キャプション方式 | train_db.py | Yes |
| DreamBooth、class+identifier方式 | Yes | ||
引用:https://github.com/kohya-ss/sd-scripts/blob/main/docs/train_README-ja.md#学習データの準備について
正則化画像の役割
正則化画像の役割は、
①タグ同士が混ざるのを出来るだけ防ぐ
②「教師画像の画風を再現したくない」「奇形を防ぐ」
①について
- 学習の際、キャラ名,1girl,standing等とタグをつけると思います。正則化画像なしで学習すると、互いの要素が混じり合います。
- そこで、AIに「1girl,standingとはこういうもんだぜ!」と教えるのが正則化画像です。
そうするとAIは「じゃあキャラ名はこの要素だけ入れりゃ良いね」と判断します。
②について
- 正則化画像は、学習時にウェイト算出を行う際に、ウェイトが教師画像に適合し過ぎるのを防ぎます。具体的には、下記のように教師画像による可変ウエイトとは別に、正則化画像のウェイトの割合を確保・固定する。すなわち「1girl」とはこういうものだと固定しておき、教師画像の余計な情報を吸収するのを防ぎます。
関数f(可変ウェイト+正則化画像による固定ウェイト)=教師画像
可変ウェイトが、解きたい答え、いわゆるx。
- 学習結果は「正則化画像+教師画像」という融合した結果になります。
たとえば、
「『1girl』とはこういうものだよ、勘違いして学習しないでよね。」
ということができる。
用語関係
ステップ:
教師画像で1回計算すると1ステップ
「教師画像のキャプション(タグ)を学習元モデルに流してみて、出てくる画像を教師画像と比較し、教師画像に近づくようにLoRAをわずかに変更する」のが1ステップ
学習率:
1ステップごとにどのくらい変化させるかを表す
大きな値を指定すると速く学習が進むが、変化しすぎてLoRAが壊れたり、最適な状態にまで至れない場合がある
小さい値を指定すると学習速度は遅くなり、また最適な状態にやはり至れない場合がある
・U-Net LR(unet_lr):全体的な画風などに影響
・text_encoder_lr:タグと画像を紐付ける部分の学習率。プロンプトの合致性に影響
・learning_late:U-Net LR、Text Encoder LRの指定がなければ、同一の学習率で上記2つが学習される。
補足 1. 5e-4という様な表記をされている事がある。意味は1. 5 × 10^-4[マイナス4乗] = 0.00015と同じ意味
バッチサイズ:
1ステップで何件の教師画像をまとめて計算するかを指定する値
大きくすれば学習速度は速くなりますが、GPUメモリを消費します、また一般的には精度も高くなるといわれています。(なんで高くなるんだろう?)
総ステップ数:
バッチサイズ×ステップ数 が学習に使われる総件数
LoRA学習における目安Step数は5000~8000くらい
補足 「バッチサイズ1で1600ステップ」と「バッチサイズ4で400ステップ」は同じ結果にはならない
同じ学習率の場合、一般的には後者のほうが学習不足になる。学習率を大きくするかステップ数を増やす必要がある
エポック(epoch):
教師画像が一周学習されると1エポック
次元数:
アルファ:
オプティマイザ:
モジュールの種類:
モデルの種類:
参考にさせて頂いたサイト:
https://github.com/kohya-ss/sd-scripts/blob/main/docs/train_README-ja.md
https://note.com/konapieces/n/n20d052a8e558
教師画像の準備
以下を準備する。
必須
任意
教師画像の準備
教師画像の入手
なんらかの方法で教師画像を入手する。
数十枚は必要。
Q. 画像を持っていない。とりあえず動作確認だけしたい。
A.こちらが使える。
参考になるリンク/データセット関連
Q.数十枚も集められない。
A.最終手段として、Stable Diffusionを使って画像を水増ししよう。こちらを参照。
画像の加工
こちらのページを参照して処理する。
妥協して良いです。
ポイント
- 推奨
- 不要要素の除去
- リサイズ
- リサイズ、切り抜きはsd-scriptsが行ってくれるが、自分でバケットのサイズに合わせてリサイズを行うと学習時間は短縮できる
- 高解像度(短編1100px超*2の場合、品質が下がらない程度に下げて良い)
- 低解像度(短編400px未満程度)で画質が著しく劣る場合は、アップスケールすると良いかも
- 学習画像毎にサイズが異なっていてもOK。統一は不要。
- 学習に不要な要素(背景等)を削除する。
- 画像背景の透過は不要。
- PNGのアルファチャンネルは無視される。
キャプション(タグ)の作成
- タグ.txt作成
- キャプション.captionの作成 ※fine tuning方式使用時限定
- これの作り方を説明しないと…
学習データを配置する
- 教師画像フォルダの最小構成は下記の通り。
train_dir └ サブセットフォルダ ├ Charaの画像 ├ 画像と同名のタグ.txt └ 画像と同名のキャプション.caption ※fine tuning方式のみ
- 正則化画像を使う場合は、さらに別のフォルダを追加する。
reg_dir └ 1_1girl ※リピート数_クラストークン ├ 1girlの画像 └ 画像と同名のタグ.txt
- 最大構成はこんな感じ。
※このようにフォルダ分けすることで、同じデータセットでDreamBooth,fine tuning, LoRAどれでも学習することができます。
マルゼン式
再現させたい要素(コンセプト)が持つ特徴のタグを1つのトリガーワードに集約させることで、生成時のプロンプトを短くさせることを目的としたやり方です。
慣れてから実践すればOK。
キャラクター(マルゼンスキー)を再現させたい場合の例です。
train_dir
└ 1_maruzen (リピート数_クラストークン)
├ マルゼンスキーの画像
├ 画像と同名のタグ.txt
└ 画像と同名のキャプション.caption ※fine tuning方式のみ
| フォルダ名 | 1_maruzen |
|---|---|
| txt先頭に追加するタグ | maruzen |
| イメージ図 青い部分に相当するタグを全削除する | ![]() |
| キャプション例 | maruzen, 1girl, solo, [服装の説明], [メガネ等のアクセサリの説明]... |
| 学習できる要素 | 顔とか髪やしっぽ耳とか。 |
| 以後、生成使うとき | プロンプトにmaruzenって入れるとマルゼンスキーが生成される |
つまり、maruzen = blue eyes, brown hair, hair between eyes, horse ears, horse girl, horse tail, medium breasts, very long hairとなります。
- 基本的に教師画像上にある要素は学習します。
- 複数の要素(コンセプト)を再現したい場合はマルゼン式マルチコンセプトLoRAを参照。
メタデータの作成(任意) ※fine tuning方式限定
- メタデータの作成とは、早い話がアドレス帳です。
下記のように、captionとtagsの紐づけを行っています。"C:\(パス名)\00057603.jpg": { "caption": "1girl with black hair in room", "tags": "1girl, solo, long hair, looking at viewer, smile" },
- 教師画像の種類が増えたとき、大規模かつ任意のフォルダ構成で学習したいときに、
特にその恩恵を感じるでしょう。
- 前述のfine tuning方式で学習する場合の話です。
DreamBooth方式(多くの人はこちら)を使う場合は、作成不要です。
タグとキャプションを準備しておく
前項に従って、準備します。
- ちなみに、fine tuningではDBのようなクラスは使用できないため、タグの加工は試行錯誤になります。
- 適当な場所にオリジナルのタグファイル、DB向け加工タグファイル、fine tuning向け加工タグファイルとバックアップを取って置くと楽です。
create_json.batを作成(準備)
メタデータ作成用のbatファイルを準備します。
create_json.batの作り方は下記の通り。
- 空のテキストファイルを作成し以下をコピペして保存。
文字コードは Shift_jis でお願いします。
- 各設定を自分の環境に合わせて書き換え。
- ファイル名を適当(create_json.batなど)に変更
作成例:fine tuning用jsonファイル作成バッチ
rem ----fine tuning用jsonファイル作成バッチ-------------------------------- rem 学習対象のフォルダ内に置いて使用する rem jsonにまとめるキャプション、タグファイルはwebuiのDataSet-Tag-Editor拡張機能 rem などを使用してあらかじめ作成してください setlocal enabledelayedexpansion rem ----ここから自分の環境に合わせて書き換える---------------------------------- rem sd-scriptsの場所 set sd_path="X:\stable-diffusion\sd-scripts" rem 学習画像フォルダ set image_path="X:\data\traning" rem ----書き換えここまで-------------------------------------------------------- set json_path=%~dp0 rem 実行 cd /d %sd_path% call venv\Scripts\activate.bat & call :main & pause & exit :main rem 古いjsonの削除 if exist "%json_path%\marge.json" ( del "%json_path%\marge.json" ) if exist "%json_path%\marge.json" ( del "%json_path%\marge_clean.json" ) rem キャプションの処理 for /d %%d in (%image_path:"=%\*) do ( rem 各学習フォルダの.captionをjsonに追加 if exist %%d\*.caption ( python finetune\merge_captions_to_metadata.py --full_path "%%d" "%json_path%\marge.json" ) ) rem タグの処理 for /d %%d in (%image_path:"=%\*) do ( rem 各学習フォルダの.txtをjsonに追加 if exist %%d\*.txt ( python finetune\merge_dd_tags_to_metadata.py --full_path "%%d" "%json_path%\marge.json" ) ) rem json内タグのクリーンアップ python finetune\clean_captions_and_tags.py "%json_path%\marge.json" "%json_path%\marge_clean.json" exit /b
面倒くさい人向けに、こちらでcreate_json.batを用意しました。
こちらをフォルダに保存して使用してください。
サイトからbatをダウンロードした場合、Windowsの保護機能が働いて実行を一端足止めされるかもしれません。
できればウィルスチェックしましょう。
(万が一、今後悪い人がこのwikiの添付ファイルを改造してウイルス化する可能性もあるので要注意)
create_json.batをテキストエディタで開きます。

画像ではサイトからコピペしたままの表記になっていますがお手元のファイルでは
| rem sd-scriptsの場所 |
| set sd_path=".\sd-scripts" |
| rem 学習画像フォルダ |
| set image_path="%~dp0\lora_train_data\train_dir" |
になっているのではないでしょうか。もし違ったなら上の記述に直しておいてください。
正しい位置にファイルが置かれているならばパスは通っているはずです。
create_json.batを実行する。
- create_json.batをsd-scriptsフォルダのある階層に保存*4。
- create_json.batをダブルクリック。
その結果、バッチファイルの場所に"marge.json"と"marge_crean.json"が作成される。- "marge.json"はキャプションとタグをまとめただけのもの。
- "marge_crean.json"はsd-scriptsに含まれるタグのクリーニング処理を通して表記ゆれなどを修正したもの。
- 学習実行時には、"marge_crean.json"の方を使います。
training_command.bat*5に--in_json=”(jsonファイルのフルパス)”を記載するとfine tuning方式で学習が開始します。
補足
教師画像フォルダへのディレクトリのパスに半角・全角スペースが含まれているとエラーが発生します。
no metadata / メタデータファイルがありません
このメッセージが表示される場合はインストールの場所を半角・全角スペースの含まれないパスに移動してください。
create_json.batを配置する。
メタデータmarge_crean.jsonを、適宜移動しましょう。
別にどこでも構いません。
- 配置例
train_dir ├ サブセットフォルダ その1 └marge_crean.json
データセットの作成(任意) ※fine tuning方式限定
ここから先は利便性追及の領域です。
- 利用する目的は、
目安としてフォルダが5個以上になって、
それぞれに「女性キャラA」「女性キャラB」「女性キャラC」「jump(オリジナルな特殊ポーズ)」のタグを一括で追加したいときに、
いちいちフォルダ内の画像すべてにタグ付けし直すのは、かなりしんどいです。
一方、データセットで管理すれば一括指定ができます。 - 他にも様々な指定が可能です。
- 詳細は下記リンク参照。
誘導→ データセット
参考:fine tuning方式(LoRA)でも教師画像フォルダごとにリピート数を設定したい
学習を行う
予備知識
学習の実行方法
LoRAの学習を実行するには、
sd-scriptsが導入されたPCで、sd-scriptsの「train_network.py」を実行&変数指定します。
手順簡素化のため、実行と変数指定を担うbatファイルを作成すると良い。
※図はLoRA学習方法の一例です。
batファイルに必要な情報
結論:とにかく公式Readmeの解説を読もう!
…ってくらい、公式Readmeの方がわかりやすいです*6。
解説動画を探すのもGood!
このページでは、公式に解説が無い情報をまとめました。
batファイルには、必須な情報と、個人の目的に合わせて記載するものがあります。
◆絶対に必要なもの
- 各種ディレクトリ(モデル保存場所、LoRA出力先、教師画像の保存場所)
- 学習のアルゴリズム指定(LoRA,LoCon,LoHa等)
- 画像の情報(バケット解像度)
- 学習のステップ数(epoch数やsteps数)
◆任意のオプション
さらに学習速度や精度の改善を目的としたもので、個別の環境に依存する。
- 例:--xformers --gradient_checkpointing
オプション名は今後変更になる可能性が高いので、解説は割愛します。
最新情報をチェックしてください。
batファイルの心得
最適なbatファイルの内容は、各学習目標やPC環境によって千差万別です。
batファイルを実行しながらパラメータを最適化してください。
おおまかな指標
- 期待する学習結果の精度
- VRAM使用量
- 目標学習時間
- 結果出力(サンプル出力や、途中stepでの学習データ出力の要否)
batファイル作成方法
batファイル作成の方法はいろいろあります。
手のつけやすい方法を選びましょう。
1.当wikiのbat作成例をコピペ&修正
batファイルを直接編集することで、細かな調整が可能で、応用が効きます。
エラーに対処しやすい。
batファイル作成例からコピペ
リンク先のbatファイルをベースに、お好みで作り込んでね。
設定のための基本的な情報は、
2.bat作成ツールを使う or batを作らず専用GUIで学習開始する
次項で紹介するツールは、sd-scriptsの更新に対してツール更新が遅く、
協調が取れていない場合があるので、おすすめはしない。
時期とタイミングによってはとても役立つ(役立った)。
以下、使えそうな順に紹介します。
Kohya_lora_param_gui by RedRayz氏
GitHubの配布ページ
https://github.com/RedRayz/Kohya_lora_param_gui
日本語ベースのGUIです。
インストーラも含んでいて、とても親切で丁寧な作りが特徴です。
リンク先の情報に従って導入すれば大丈夫だと思います。
対応している機能
- インストーラ。sd-scripts及び関連ライブラリ(LyCORIS,Prodigy)
- LECO学習
- 層別dim,層別rank
- SDXL学習 他。
Windows向け学習実行フロントエンド 最終更新:2023/05/22
batファイルの作成支援ツールです。
従来のバッチファイル編集による学習パラメータ入力をGUIで行えるようにしたフロントエンドです。
webuiの拡張機能にあるGUI版とは異なり、独立したアプリでpythonの標準ライブラリで作成したため
VRAMやメモリの消費は最小限に抑えられていると思います。
まだ開発途中のためTOML形式での学習パラメータ作成には対応していませんが、下記のWindows向け学習実行バッチファイルでできることは一通り可能で、フロントエンドからの直接学習実行だけでなく入力データからバッチファイルを出力することも可能なため、SD-Scriptsに機能が追加された場合でも本フロントエンドのアップデートを待たずに新機能を試すことも可能です。
ダウンロード
LoRA_UI_0522.zip
2023/05/22
- finetuneモードでjson指定が正しく反映されなかったのを修正
2023/05/21
- 学習でstep指定が抜けていたので追加
- スクロールの不具合修正
- トークンサイズ75を指定するとエラーが出ていたのを修正
2023/05/04
- Multi resolution noise (pyramid noise)対応
2023/04/14
- --cache_latents_to_disk対応
- 基本設定にDyLoRA関係のプリセット追加
- ボタンからファイル、フォルダ指定した際にコマンドラインが更新されないバグ修正
2023/04/13
- ウィンドウの縮小とスクロールに対応
2023/04/08
- --weighted_captions対応
2023/04/06
- 最初のリリース
1.インストール
ダウンロードしたLoRA_UI.zipを好きなフォルダに解凍します
2.実行
解凍したファイル内のLoRA_UI.batを実行(ダブルクリック)します
python3.10.xがインストールされていれば仮想環境の作成などは不要です
3.初回設定
はじめて起動すると「設定」タブが表示されるので、自分の環境のSD-Scriptsが存在するフォルダを指定し、もしSD-Scriptsの仮想環境が"venv"以外であれば「仮想環境フォルダ名」も入力して「保存」ボタンを押して設定を保存します
以降は設定の必要なく使用できます
derrian-distro氏製のinstallersで導入した場合
独自の実行用batファイルとjson設定データで学習を実行する。
1.json設定データの準備
run_popup.batを実行すると、パラメータを入力するウィンドウが現れる。
自分の環境に合わせて入力して、json形式の設定データを出力する。
- Do you want to load a json config file?
学習モデル・教師画像・出力先の設定を保存されたものから流用するか。続きから学習したり、同じ設定を使い回す場合に。 - Select your base model
学習モデルの選択。
- Select your image folder
教師画像フォルダの選択。下記の「学習データの配置」を参考にしよう。ここで指定するのは「学習データ配置例」でいうところのtrainingに当たるフォルダであることに注意。
- Select your output folder
出力先フォルダの選択。ここに学習が終わったファイルが作られる。
- Do you want to save a json of your configuration?
設定をjsonファイルに保存するか。ここで保存しておくと、一番最初の「Do you want to load a json config file?」で設定を呼び出せる様になる。これ以降に入力する設定値もいくらか保存されるので要確認。
- num_works:How many workers do you want?
データローダーのワーカー数。メインメモリに依存する。32GB位あれば6~8程度に設定できる。それより少なかったり、あるいは実行中にプログラムが落ちてしまったらここを減らして様子を見てみよう。
- Do you want to use ragulasation images?
正則化画像を使用するかどうか。Dreambooth方式で学習する際に指定する。
- Select your regulatization folder
正則化画像フォルダの選択。下記の「学習データ配置例」でいうところの「reg」に当たるフォルダを選択しよう。
- Do you want to continue from an earlier version?
過去の学習ファイルから継続して学習させる場合は、続いて学習ファイルを指定する。注意点として、前回の学習ファイルの名前と、今回続きから学習して終わったときのファイル名が同じだと保存エラーが発生する。そのため、続きから学習するときは前回のファイルの方の名前を変えておくとよい。
- How large is your batch size going to be?
→バッチサイズの選択、VRAMに依存する。
- How many epochs do you want?
→学習するエポック数を指定。
- What is the dim size you want to youse?
→学習する次元数を選択。8~128程度から学習対象の複雑さによって最適なものを選択しよう。
- What Alpha do you want?
→アルファ値の選択。基本はdim sizeと同じ。アンダーフローを防止する。
- How large of a resolution do you want to train at?
→学習の解像度を選択。基本は512。それ以上はVRAM負担が一気に上る
- What learning rate do you want to use?
→学習率を選択。デフォルトは1e-4(0.0001)。
- Do you want to set the txt?encoder_lr?
→Text Encoderの学習率。参考値は5e-5
- Do you want to set the Unet_lr?
U-netの学習率を設定。参考値は1e-3
- Which scheduler do you want?
学習率のスケジューラーを設定。可変学習率設定で使う?
- How many times do you want cosine to restart?
学習率の変動をどのくらいの頻度で行うか?
- Do you want to save intermediate epochs?
一定エポックごとに途中セーブするか
- How often do you want to save epochs?
途中のファイルも保存する場合、何エポックごとに保存するか指定
- Do you want to keep some tokens at the front of your captions?
キャプションシャッフルする場合、先頭からいくつまでのキャプションはシャッフルせず保存するか
- Do you want to have a warmup ratio?
学習率を最初小さくして徐々に上げる設定(ウォームアップ)にするか
- What is the ratio of steps to use as warmup?
ウォームアップする場合、小さくするステップの割合を指定
- Do you want to change the name of output epochs?
途中セーブのファイル名をオリジナルと別の名前にする?
2.run_popup.batを再び実行し、jsonデータを読み込むと学習が開始する。
lora_train_command_line.pyを編集する場合
コマンドライン版を使う場合
lora_train_command_line.pyに必要なパラメータを入力し、run_command_line.batを実行する。どこを入力すればいいかわかる人向け
batファイルができたら、学習開始。
教師画像を準備して、batファイルを任意の場所に置きます。*7
batファイルダブルクリックで、学習が始まります。
1発目は、設定ミスなどでエラーが出ると思います。
エラー表示で原因が分かる仕様になっているので、
色々試してみましょう。
誘導→何か知らんが止まる
学習が終わったLoRAの使用方法
生成されたLoRAファイルをStable diffusionで使用するには、
学習ファイルの使用方法のLoRAの項目を参照されたし
学習のおおまかな流れ(おさらい)
ここまでの説明は難しかったかもしれないので、全体の行程を簡単におさらいします。
超初心者向け 5ステップで覚えるLoRA制作 (2023/3/31)
としあきbat(超初心者向けLoRA導入セット)を使ってLoRA制作を覚えよう。
本項はfine tuning方式の説明ですが、DreamBooth方式でも応用できます。
ステップ2~4はタグ付けの説明なので「そんな面倒なことやらないね!」という方は読み飛ばして下さい。
ステップ1:まずは画像を集めようじゃないか
まずは、画像フォルダを準備(初期化)しよう
今、フォルダの中は

の様なはずです。lora_train_dataをクリック(またはダブルクリック)してフォルダを開きます。

さらにtrain_dirをクリック(またはダブルクリック)しましょう。

…よく考えたらここまで画像を使って説明する必要って何でしょう…という疑問が浮かびますが気にしてはいけません。
10_hoshiをクリック(またはダブルクリック)します。

サンプルの画像とテキストファイルの含まれるフォルダ階層へと到着しました。
早速ですがこれらのファイルを消します。

なぜ消した…!?
…そうか…俺が指示したのか…。
まずは、画像を集めよう
ファイルが消滅し真っ白になったフォルダで何をするか。
そうです。あなた自身が画像を集めるのです。
再現したいと思っているキャラの画像で満たすのです!
最初から大成功を狙う必要はありません。何ごとも失敗を繰り返した回数だけ上手になるものです。
画像の枚数は10枚ということにしましょう。目標が高すぎるといつまで経っても完成しません。
好きなキャラの画像、10枚。厳選してもいいですしパッと決めてしまってもいいでしょう。
- ポイント
なるべく学習したい対象の特徴を捉えた画像であること。
準備が出来たらステップ2に進みます。
「かったるいぜ!」と言う方は一気にステップ5へ飛んでください。
なんせ次ステップ以降の解説は学習用画像の意味をメタデータを使ってAIに説明するっていう…
…ちょっと難しくて手間のかかる行程ですので。
フォルダ名を決めよう
せっかく画像が集まって気持ちも暖まってるのですから、フォルダ名も変えてしまいましょう。

フォルダの上で右クリック、そして名前の変更。

loraの呼び出しに使うトリガーワードにもなるので重要な名前となるでしょう。
(リピート数)_トリガーワード形式で書きます。
今度こそステップ2へ。
ステップ3:タグの調整
WD1.4 Taggerによるタグ認識は絶対ではなく、
明らかに誤認識して付けられたと分かるようなタグも沢山でてきます。
なので、追加で編集したほうが、学習の出来栄えはグッと良くなります。
自動タグアプリの結果を観察しよう。
ちょっと説明に使う画像は変わりますが、錦木千束さん(from リコリスリコイル)の画像を使って解説します。
画像をWD1.4 Taggerに読み込ませた画面。
赤枠で囲まれた部分に自動認識されたタグが表示されているのがわかるでしょうか。

分かりやすいようテキストエディタにコピペします。
構成要素が沢山並んでいますね。

要素別に色分け&分類してみましょう。
| 1 | 2 | 3 |
| キャラの特徴要素を示すタグ | キャラの服装らしきタグ | +その他 |
| bangs(前髪)、blonde hair、ショートカット、ボブカット、赤色の瞳。 | さらにタグに紛れて"nishikigi chisato"のタグもあるようなのでそれも色分け。 | |
![]() | ![]() | ![]() |
| 一部の要素が重複していたり「ドレスじゃないよ」と思うかもしれませんがそういうものです。想像力を働かせましょう。 |
タグを修正しよう。
LoRA作成のタグ編集においては
キャラの特徴を表わすタグを抜くことでキャラの特徴を教育することが出来るとされています。
残すのではなく、抜くのです。
間違えて覚えると大変なことになります。
つまり、上の画像から赤色で示したタグを抜けばキャラの顔や髪型、リボンの色形などを学習したloraを作成でき、
その反対に青色で示したタグを抜いてしまえばキャラの着ている服装、リコリス制服の特徴だけを学習したloraを作れるわけです。
覚えさせたい要素はテキストからタグを抜く。
今回は解説のため両方の色のタグを抜いたテキスト。つまり外見と服装の特徴を捉えたloraを出力できるテキストに成形してみましょう。
こんな感じです。

髪型や髪飾り、スカートやジャケットなどのタグは抜き、lycoris uniformとnishikigi chisatoは残しました。
最後にキャラ呼び出しのトリガーワードにするためnishikigi chisatoを先頭に移動させてタグテキストは完成。
細かく抜いたタグの分の要素が濃縮されて nishikigi chisato と lycoris uniform に込められた…
とイメージすると分かりやすいかと思います。

このように画像の数の分だけテキストを編集していくわけです。
また、今回はたまたまキャラの名前がテキストの中にありましたのでそれをトリガーワードとしましたが
当然こういうことは有名な人物に限った話で大概の場合は自分でタグをテキストの中に打ち込むことになります。
そのときは教師画像のはいったフォルダ名とワードを一致させるよう気をつけて下さい。
(2023/04/07:コメント欄にて『タグテキストを使う場合はフォルダ名とトリガーワードを一致させる必要はない』との指摘を頂きました。
ですがフォルダ名とワードを一致させる制作法はネットで見かけるものの、一致させないでもいい、との方法は寡聞にして知りませんでした。
詳しい情報をお知りの方はコメント欄にて教えて下さるとありがたいです。)

トリガーワードをガーッとテキストの先頭に記述しましょう!
- sd-scriptsは優秀な分析でキャラやポーズを認識してくれますが、分かりづらいことや理解がおよばないことがあります。
そういうものは人間側があらかじめ察して「ブランコに座っています(sitting swing)」という具合に
状況的に足りないタグを書き足してあげたほうが学習精度が高まります。- 例:cv_wakamoto,1man,creature,sitting swing…。
- WD1.4 Taggerが明らかに誤認識したようなタグは消した方がいいです。
「でも抜いたら覚えちゃうんじゃないの?」と思うかもですが、AIを誤解させて学習に変な癖がつくほうを避けるべきです。 - 自身の感じる必要性に応じて 1girl など一見重要そうに思えるタグなども外してもいいでしょう。
- 教師画像への忠実さ、汎用性どちらを求めるかで、タグを残すか足すかトライ&エラーすることになります。
臨機応変。信じられるのは結局自分の感のみ。俺たちは自由だ…!!!
画像1枚ずつタグ編集するのは大変なので、編集アプリを使うと良いでしょう。
キャプション・タグ編集#tag_adjust
ステップ4:メタデータを作成する【fine tuning方式限定】
sd-scriptsが認識できるjson形式のメタデータを作成します。
としあき製のcreate_json.batを使って、ステップ3で作ったタグファイルを一括処理してしまいましょう。
このページ内の
fine tuning向けメタデータの作成方法
を元にcreate_json.batを準備して、実行しましょう。
create_json.batを実行してみましょう。

mage does not have caption/メタデータにキャプションがありません
今回キャプションファイルは作っていないのでこのエラーが出ても大丈夫です。
writing metadata: merge_clean.json done!

ファイルがふたつ増えていたならば成功です。おめでとうございます。
出来なかった人もこんなところで粘る必要なんて全然ないんです!ステップ5に行ってしまいましょう!
いよいよ次のステップで念願だった LoRaの生成が出来るぞ!
必要なファイルはすべて揃いました。ついにLoRA生成の時が訪れた!
・・・で、どうやって動かすの?
実行用のbatファイルを作りましょう!
ここではとしあきbatの実行スクリプトであるtraning_command_sample_loha.batを使って解説します。
としあきbatは当wikiでの公開中止中なので、学習実行batの作成例ページをテキストファイルにコピペした上で、下記の編集をしてくださいね。
説明画像1枚目:ディレクトリ設定

sd-scriptsの場所は変更せずそのままでいいです。
学習のベースモデルファイルはモデルについてを参考に、自分の好みに近いものを選びましょう。
学習画像フォルダは、下記の例でいうとChara1を指定してね。
フォルダ階層例
train_dir
└ Chara1 ←今回学習したいキャラ ←指定するのはこのパスだよ。これで下階層の3つのフォルダが学習対象になるよ。
├ 10_maruzen
├ 10_shobu clothes
└ 10_mizugi maruzen
└ Chara2 ←次回学習予定のキャラ(学習の対象外)
メタデータjsonファイルはステップ2~4の作業をした人は次の物を入れて下さい。
| set json_file="%cd%\marge_clean.json" |
「ほら見ろ!やっぱり面倒だったんじゃないか!まるごと飛ばして正解だったぜ!」
「だけど marge_clean.json は出来なかった。出来なかったんだよ。としあき。だから…この話はここでお終いなんだ」という当然極まりない選択をしたひとはごめん。本当にごめんね。set json_file=""のままで大丈夫です…。
説明画像2枚目

学習アルゴリズム:ひとまずbat編集が簡単なLoHaが良いと思う。あるいはLoCon。
fine tuningでのリピート数を指定:図では10を指定していますが、学習後に学習量が足りないと感じたら増やし、学習不足と感じたら減らせばOK。
学習結果の出力先は直接SDの"models\lora"に出力していいです。
学習結果のファイル名は出力するLoRAのファイル名です。トリガーワードとは関係ないので分かりやすい名前でOK。
epochs数と何epochsごとに保存するかの設定に関してはこれといったら正解はありません。
ファイル数 × ループ回数(fine tuningのリピート数だったり教師画像フォルダの先頭に書いた回数だったり) × epochs数 =
が実行されるsd-scripts学習のステップ数となります。
人によっては600stepもあれば十分だ、という声もありますし、いや 1200は必要であるという意見も聞きます。
そもそも場合によりけりであるので正解はありません。
個人的には少し多めにステップ数を見積もって、出力されたファイルをひとつずつ確かめるのが良いかと思います。
LoHaに限って言えば epochs=10~14のステップ数1000~1400 もあれば満足いく品質のLoRaが完成すると…いいな!
その場合、save_every_n_epochs の回数も調整してください。
説明画像3枚目

次元数。
大きくするほど詳細に教師画像を読みとるといわれていますが大きすぎても線が暴れます。Lohaならデフォの8で充分。
その他の設定もデフォで大丈夫でしょう。
なにせ初めてのLoRa制作です。この辺りの設定で試行錯誤するのは次回に回しましょう。
あとは動かすだけ!
すべての素材を集め、すべての設定を終えました。
これで準備は完了です。あとはいま設定を書き換えたbatファイルを実行するだけです。
完了予定時間はPC環境と設定したステップ数にもよりますが30分から1時間程度。RTX40xxなら10分も掛からないかも。
時間の確保が出来たらさっそく開始してしまいましょう!いざクリック!

エラーが出たらごめん。
としあきのTIPS
LoRA学習データって重くない? or 品質低くない?
学習データが重い理由は、
- dimの値が大きく、情報量が大きい。→ dim値を下げて、学習精度のバランスを見て調整していくと良いです。
品質が低い理由は、
「品質」が何かを指すかにもよるが、おそらく複数のパラメータの設定ミス。
LoRA学習の各ページを参考に、1つずつ設定を煮詰めていくと良い。
過学習対策:トリガーを2つに分ける
LoRAで過学習おきやすいから回避策として
トリガーを2つに分けるのを4chanでやってた
長いトークンほど過学習起きるから8トークンあったら4トークン2つに割るとかね
こんな感じでまとめて学習させちゃったけど問題ないっぽい
burubon, mihono, musiclive, on stage, people, crowed,
トークンは前の方ほど影響大きいからトークン大きすぎるとほとんど全部の要素を一つの単語で覚えようとかするからよろしくないっぽい
分ければ生成するときプロンプトに1個入れるか2個入れるか分けられるし便利かも知れない
効果は検証しないとなんともいえないけど過学習はおきにくい気がする
リピート数とエポック数ってどっちを増やせばいいの?
結論:雰囲気で配分していい。
検証のためLoRAを作って確かめてみました。
ちょうどエポックとリピートの数が逆転したLoRAによる比較となります。
https://mobile.twitter.com/t_zunko/status/1641779055413579776
にて公式アセットを配布している東北ずん子のデータを無加工で使い制作したLoRA
画像枚数61枚,バッチ数1 (総ステップ数:2196)
Learning rate=1e-3
text_encoder_lr=1.5e-4
unet_lr=1.5e-3
dim=8 cov_dim=8 alpha=1 conv_alpha=1 min_snr_gamma=5 optimizer:AdamW8bit
生成に使用したプロンプト:
zunko, 1girl, solo, japanese clothes, muneate, tabi, hairband, very long hair, short kimono, full body, standing, green hair, tasuki, obi, outdoor
どうですか!?
…違いが分かるでしょうか。私には分かりませんでした。
そう言われても相違の区別が付きづらい、ほぼ同品質のLoRAではないでしょうか。
とは言え、ほぼ違いがないのも無理のない話でエポックとリピート数とは
学習データを1周見て回るのが 1エポック。1エポックを1エポックの中で1回繰り返すのかが1リピート。
…という、ちょっとややこしい関係にあるらしいのです。
特にリピート。エポックに掛ける単なる倍する数に過ぎないらしいんですよね。その名の通り。
厳密に比較すれば違いはあるんでしょうけど、実質的にはエポック36✕リピート数1もエポック1✕リピート数36も
同じ品質のものを生成する設定と考えていいのではないでしょうか。
じゃあ、どっちでも良い・・・というわけでもなくて、
複数の画像フォルダがあるときに、1エポック内での学習量に差をつけるために、
「10_AAA」「1_BBB」とリピート数を変更するのが活用例です。
学習に使うベースモデルって何を選べばいいの?
結論:普段使いしてるモデルをベースにするのが一番良い。
検証のためLoRAを作って確かめてみました。
同一の素材、同一の設定を用い、ベースモデルのみを変えた6個のLoRAをベースに使った6種のモデルで出力。
ベースモデルと出力モデルが同じもの(ベストマッチ)にはファイル名の下に赤線を引いて強調しました。
(比較の公平性を保つため画像出力時にVAEを使用していないので一部の画像が退色しています)
https://mobile.twitter.com/t_zunko/status/1641779055413579776
にて公式アセットを配布している東北ずん子のデータを無加工で使い制作したLoRA
生成に使用したプロンプト
zunko, 1girl, solo, japanese clothes, muneate, tabi, hairband, very long hair, short kimono, full body, standing on one leg, green hair, tasuki, obi, outdoor,
↓ ACertainty

↓ HD-17

↓ anything-v4.5

↓ CounterfeitV25

↓ Basil_mix

↓ chilloutmix

私感:
どのモデルをベースにしていても、いずれのLoRAにも完成度に明確な優劣は感じられなかった。
それよりも画像出力に使うモデルによって再現力に違いがあることが気になる。
また、生成と出力のモデルを同じにしたベストマッチ状態がこそがもっともそのLoRAの品質を発揮できているように感じた。
ベースモデルはLoRAの画像品質よりも、取れるポーズの豊富さに関わってくるという一般的な論を考えると
比較にはもっとダイナミックなポーズを取るようなプロンプトを使うべきだったかもしれない。
しかしだねえ…wikiにはあまりエッチな画像は載せちゃいけないのだし…。
人によって求めているものが違う以上、取らせたいポーズ、必要な要素は本人にしか分からないのだし…。
消費VRAMの削減
学習中にVRAM不足になった場合は、以下を参照。
誘導 → 消費VRAMの削減/sd-scripts
LoRAの学習を続きから再開(追加学習)する方法
いったんベースモデルにLoRAをマージする。
この方法が最も確実。
誘導 →ベースモデルへのマージ(LoRA)
LoRAに上書き学習
- 既存のLoRAのデータに対して、学習を継続したい場合、
batファイルに下記を追記します。--network_weights="再開したいファイルのフルパス"
- ただし、設定しても、うまく機能しないという人もいる。
- オプティマイザーの状態(例:prodigyのd値等)は引き継ぎできないため、
完全な再開には期待しないこと。
公式紹介ページ
https://github.com/kohya-ss/sd-scripts/blob/main/docs/train_network_README-ja.md#学習の実行
fine tuning方式(LoRA)でも教師画像フォルダごとにリピート数を設定したい
- データセットを使用すれば可能。
- 使用するためにはJSON形式かTOML形式で書かれた設定ファイルが必要になる。
- 詳細を説明するにはLoRAページの紙幅(行数制限)はあまりに厳しい。詳しくは検索してください。参考ページ。
61行目あたりのfine tuning方式のリピート数設定(set ft_repeats)の下ぐらいに
rem データセットファイル(json,toml形式)
rem(このファイルを指定するとデータセットモード動作になる。使用しない場合は""とすること)
set dataset_file=""
を追加。
130行目あたりにある train_mode を設定するスクリプトを以下のように書き換える。
set train_mode=""
if %dataset_file%=="" (
rem データセットファイルの有無を確認。なければjsonファイルの存在チェック
if %json_file%=="" (
rem DBモード
if %reg_path%=="" (
set train_mode=--train_data_dir=%image_path%
) else (
set train_mode=--train_data_dir=%image_path% --reg_data_dir=%reg_path%
)
) else (
rem fine tuningモード
set train_mode=--train_data_dir=%image_path% --in_json=%json_file% --dataset_repeats=%ft_repeats%
)
) else (
rem データセットモード
set train_mode=--dataset_config=%dataset_file%
)
- tomlファイル作成の参考にどうぞ。sample.toml。
- 雛形に使ってください。template.toml
- キャラクターに複数衣装を学習させるとき衣装ごとに教師画像の枚数がどうしても不均等になってしまう…
なんてときにfine tuning方式でもフォルダごと(データセットごと)にリピート数を設定できるようになるので便利なはず。従来では不可能だったfine tuning方式での正則化も利用出来るようになる(らしい)。
学習の進行状況を目視チェックしたい
こちらを参照→sd-scripts,学習途中でのサンプル出力
下記コマンドを追加した状態で学習開始すると、
LoRA学習途中時点でのサンプルが生成されます。
生成先のフォルダは、LoRAのOutputフォルダと同一です。
batファイルへのコマンド追記例
--sample_every_n_epochs=1 ^
--sample_prompts="C:…/Test_prompt.txt" ^
--sample_sampler=euler_a ^
rem 上記コマンドにより、1epochs終了毎に、Test_prompt.txt記載のプロンプトに基づいて、euler_aサンプラーでサンプル生成が実行されます。
rem --sample_every_n_epochsには、何エポック毎にサンプル生成するかを指定する。
rem --sample_prompts行には、プロンプトを記載したテキストファイルのフルパスを指定すること。
rem --テキストファイルには、"1girl”等、自由に指定できる。
rem サンプラーは、euler_a以外にも選ぶことができる。
rem なお、このコマンドが文末に来る場合は、文末の" ^"は不要。一般的なbatファイル作成ルールに基づく
json設定ファイルで指定する場合の記載例
"sample_prompts": "C:…/Test_prompt.txt",
"sample_sampler": "euler_a",
"sample_every_n_steps": null,
"sample_every_n_epochs": 1,
サンプルのシード値や出力サイズは、上記txtファイル内で指定します。
正則化画像の強度
--prior_loss_weight=0.01
のように、ウェイトの割合を指定します。
0~1.0の範囲で指定します。0は正則化画像の無効化です。
実用上は0.1でもそこそこ効きます。
正則化画像に寄せたい場合は大きく、教師画像に寄せたい場合は下げましょう。
実行時のトラブルシューティング
ページングファイルが足りないとエラーが出て止まる
仮想メモリの容量が足りていない
Windowsの設定->システム->詳細情報->システムの詳細設定->パフォーマンス[設定]->仮想メモリ[変更]
を開いてカスタムサイズで最大値を変更する
合計で70GB~80GB程度あれば学習が完走できるはず
仮想メモリの設定を間違うとOS全体が遅くなったり不安定になったりするので何をしようとしているか理解してから自己責任でやること
何か知らんが止まる
エラーを全部コピペしてChatGPT先輩にぶち込んで「なにがわるいんですか」と聞いて見ると意外と答えてくれる。
「せつめいがむずかしいです」にも答えてくれるのでとりま先輩に投げてしまうのは結構有効
よくあるエラー内容
- batファイル構文の記入ミス
batファイルの中身や、エラー内容をChatGPT先輩に報告し「どこが間違ってる?」と聞いてみよう。 - sd-scriptsのインストールエラー
必要なライブラリが不足していたりする場合、正規のインストール手段を取っていない場合、「〇〇が不足している」「そんなオプションはない」と表示されます。
足りないライブラリをインストール、sd-scriptsを更新する(無理なら再インストール)などしてみましょう。 - PCのスペック不足
Nvidia 16xx系のグラボ人向け
16xx系のグラボを利用している人は要注意
88無念Nameとしあき23/03/26(日)16:45:55 ID:XN9jT7Y6[4]No.1080440201No.1080440201 ngそうだねx7
>NVIDIA GeForce GTX 1660 Ti で
それですね
GTX16xx系は実はAIにはあまり向いてないそうで
自分は持ってないので試せてないけど
実行オプションで--mixed_precision="no"にして
resolutionを400まで下げるといいらしい
GTX16xx向けの上記の設定済みの実行バッチを上げたのでこちらで試してみてください
fu2045787.zip
その他
指摘・助言
- animagineでの画風学習はほんのり雰囲気があるレベルだよね。仕方がないので、少数精鋭(20枚程度?)を用意して、いっぱい学習させて、実使用時に強めるなどの方法で対処。一方で、Ponyはキャラの覚えが悪い気がする。何かしらんけど、勝手に腰の後ろ側にリボンとかカーテンとか付け始める。 -- 2024-05-23 (木) 19:26:37
- 消費VRAM削減の項目へ、情報の充実化を図りたいので、専用ページを作ります。 -- 2024-08-10 (土) 09:34:00
- SD1.5→animagine→Pony→Illustriousと順当に全部楽しんでるけど、後発になればなるほど(少なくともキャラクターに関しては)LoRA作るの簡単だと思う。もちろん細かい感触は何を目指すのか(画風込み/無しとか)でも変わってくるだろうけど… -- 2024-11-15 (金) 00:24:26
- 少ない学習素材でも元キャラクターに似せられる上に手や髪型も崩れないって意味ならその通りだと思う。難しいと感じてる人は根本的なマシンスペックとか学習時間に対してそういったハードルを感じてるのかも。 -- 2024-11-16 (土) 03:53:55
- このページ情報が氾濫してるので、分かりやすく書き直してます。基本的には「学習とは」>「LORA学習の流れ」>「LORA学習方法」という形にまとめたたいと考えてます -- 2025-06-03 (火) 01:01:07
(Tips)
- 質問をするならここを見て!
- 既存コメントの先頭にあるラジオボタンをONにすると、そのコメントの下にぶら下げ返信する形になる(ツリー構造)。
- コメントの文中で↵ボタン(下の画像参照)を押すと「&br;」の文字列が挿入される。これは送信後に改行として機能するので、文章の整形に役立つ。

















