コードの使用が難しい場合は、WebUI バージョンの LoRA モジュールをトレーニング操作に直接使用できます。キャラクター、シーン、スタイル、服装のいずれをトレーニングする場合でも、これは一般的なモデルのセットですが、異なるデータセットを使用すると得られる結果は異なります。
記事ディレクトリ
lora-script WebUI のインストール
ソース ファイルをダウンロードするために使用しますgit clone --recurse-submodules https://github.com/Akegarasu/lora-scripts
。これは SD の拡張ディレクトリで実行できます。コードはhttps://github.com/kohya-ss/sd-scriptsに基づいて派生しています。
インストール プロセス中にこの問題が発生した場合は、インストールをFailed to clone 'sd-scripts' a second time, aborting
手動で実行する必要がありますgit clone --recurse-submodules https://github.com/kohya-ss/sd-scripts.git
。
ネットワークが良好でない場合は、何度か試してください。スクリプトのクローンが作成されると、次のようになります。
実行lora-scripts
中にinstall.ps1
、開発環境をインストールして構成します。右クリックしてpower shell
「実行」を選択します。
デフォルトでインストールするには、最後まで Y を選択します。これにより、仮想環境が作成され、cuda が設定されます。インストールが成功したことが表示される
と、ウィンドウは自動的に閉じます。Install completed
現在のディレクトリでgit clone --recurse-submodules https://github.com/kohya-ss/sd-scripts.git
インストールを実行しますsd-scripts
。または、以前にダウンロードしたものsd-scripts
をドラッグするだけです。
実行してrun_gui.ps1
開いて、WebUI インターフェイスに入ります。install-cn.ps1
ウィンドウがフラッシュバックした場合は、今のインストールが完了していないことが証明されているため、サードパーティ依存パッケージの完了を再実行する必要があります。
インストールが完了したことが表示されます。実行するとrun_gui.ps1
ブラウザにURLがポップアップ表示され、http://127.0.0.1:28000/lora/basic.html
ページが表示されます。
LoRA トレーニングプロセス
ここでは『真・三國無双8』の呉国の立ち絵を練習素材として使用します。
SD分割素材
SD を開いて画像前処理モジュールをクリックし、画像防止フォルダーのディレクトリに入ります。このパスには中国語が含まれないように注意してください。下図に従って解像度を64の倍数、512~1024の範囲で設定してください。
2 つのキーワードのうち 1 つを必ず選択してください。
前処理をクリックすると、対応するフォーカス画像とカット画像、およびキーワード プロンプトが data2 フォルダーの下に生成されます。
初心者モデルとエキスパートモデル
エキスパート モードでもノービス モードでも、基本的な設定は同じです。ここではノービス モードを使用します。エキスパート モードを使用する場合は、以下の基本パラメータの説明に従って自分で設定を行うことができます。
トレーニングモデル
ベース モデル パス。トレーニングするモデル パスを選択します。デフォルトは相対パスであるため、トレーニングされたモデルを対応するsd-models
フォルダーに投入する必要があります。
データセットの設定
トレーニング データ セットのパスは、lora-scripts
フォルダーの下にtrain
フォルダーを作成する必要があります。次に、前処理したフォルダーの名前を変更しDynastyWarriors_8_wu
、私のように新しいフォルダーの下に数字とアンダースコアを追加する必要があります。フォルダ内に漢字、スペース、その他の文字を含めないでください。
デフォルトでは、正規化された画像データは使用されず、解像度は分割されたばかりの 512x512 に設定できます。
設定を保存する
モデル保存名。これはモデルを保存するファイル名です。管理を容易にするためにフォルダー名コマンドを使用できます。モデル保存フォルダーのデフォルトはoutput
、現在のフォルダーの下のフォルダーです。デフォルトで保存するモデルを設定します。つまり、トレーニングごとにモデルを保存する回数を設定します。モデルに対する要件が高い場合は、1 を選択することをお勧めします。をクリックし、パラメーターに従ってトレーニングされたモデルを選択します。
トレーニング関連パラメータ
最大トレーニング エポックは、トレーニングする回数を示し、上記の保存設定の対応するエポックで、一般的には 20 ~ 30 を選択できます。
バッチサイズはマシンのビデオメモリに応じて設定されますが、私の RTX4090 と同様に、通常は 5 を選択しますが、自分の状況に応じて選択できます。
学習率とオプティマイザーの設定
理解できない場合は、デフォルトのままで構いませんが、後ほどパラメータの説明があるので、戻って調整することもできます。
以下は参考までに私の構成です。
トレーニングのプレビュー設定
ここでオン/オフを選択できますが、セルフトレーニングで使用する場合は、各ステップでサンプル画像を生成するだけで、パラメータはデフォルトです。毎回プレビューされる画像はtoml
フォルダーの下に表示されます。マシンのパフォーマンスが良くない場合は、開かずに最終結果だけを見てください。
ネットワーク設定
ここではトレーニングを継続する機能がサポートされています。以前のネットワーク構造モデルのアドレスを自分で設定する必要があります。初めてのトレーニングなので、持っていません。デフォルトで他の dim と alpha を選択できます。
キャプションオプション
画像をスクランブルしてトークン、つまりキーワードを保持するかどうかはモデルを選択することをお勧めしますが、各画像のキーワードを固定して統一する必要がある場合は、必要な値を選択することをお勧めします。
パラメータを設定したら、クリックしてトレーニングを直接開始します。あとはゆっくり待つだけです。最初の起動時に、いくつかの構成情報が自動的にダウンロードされます。
トレーニング プロセスはエポックの実行を開始します。
設定に従って、各トレーニング ステージでモデル ファイルがoutput
次のトレーニング ステージに自動的に保存されます。
プレビュー画像output
はsample
以下のフォルダにありますが、画像をプレビューしてみると、『真・三國無双』シリーズのキャラクターの衣装の進化に似ていて、訓練着が洗練されていくのがわかります。
モデルの選択と使用方法
デフォルトで最後のモデルを選択することも、エキスパート モードを開いてログを印刷することもでき、損失値が表示されます。モデルの堅牢性に応じて、損失値が低いほど優先されます。
トレーニング済みの LoRA モデルを SD ディレクトリ内のモデルの lora フォルダーに入れると、それが表示されます。
設定の保存と読み取り
毎回設定する手間を省くために、設定を保存して名前を設定することができ、将来の読み取りや呼び出しに便利です。
基本的なパラメータの説明
安定拡散モデルのトレーニングのプロセスにおいて重要な要素は、モデルとデータセットの正しい選択と構成です。このブログでは、最善の意思決定を行う方法を概説し、いくつかの重要な概念について説明します。エキスパートモードでも初心者モードでもパラメータは基本的に同じですが、パラメータの詳細ページはこちらです。わかりやすい言葉で言ってください。
モデルとデータセット
ベースモデルを選択してください
ベース モデル (または「ベース モデル」) を選択するときは、これらのモデルでトレーニングされた LoRA (Latent Optimizer Re-Alignment) がより一般的になるため、できる限り「祖先レベル」モデルを選択することをお勧めします。祖先レベルのモデルには、sd1.5、2.0、および Novelai のオリジナルのリーク モデル (非融合モデル) が含まれます。anythingシリーズやオレンジミックスシリーズなど、様々な要素を取り入れたフュージョンモデル。これらのモデルでトレーニングすると、画像の生成では良好な結果が得られる可能性がありますが、多くの場合、モデルの一般化可能性が失われ、トレーニングされたモデルの他のコンテキストでのパフォーマンスが低下します。したがって、ニーズに応じて選択することが非常に重要です。
トレーニングの解像度
トレーニング プロセス中に、トレーニング解像度、つまり画像の幅と高さを設定できます。これは正方形でなくても構いませんが、64 の倍数である必要があります。一般に、512x512 より大きく 1024x1024 未満の値が推奨されます。アスペクト比はトレーニングセットの特性に応じて決定する必要があります。一般に、正方形の解像度はさまざまな画像解像度と互換性があります。
ただし、トレーニング セットが主にポートレート画像で構成されている場合は、512x768 などの解像度を使用します。逆に、トレーニング セットに水平方向の画像が多い場合は、768x512 の解像度を使用します。
ARBバケット
ARB バケット化は、アスペクト比が固定されていない画像を使用したトレーニングを可能にするトレーニング手法です。つまり、画像を手動でトリミングする必要はありません。ただし、トレーニング時間がある程度増加し、その解像度はトレーニング解像度よりも大きくする必要があるため、より多くのビデオ メモリを使用します。ビデオ メモリが 12G 未満の場合、ARB バケットを開くことはお勧めできません。LoRA のトレーニングには初心者モードを使用してください。
学習率とオプティマイザー
深層学習では、効果的な学習率の設定とオプティマイザーの選択が重要です。
学習率の設定
UNet と TE の学習率は通常異なります。これは、学習の難しさが異なるためです。通常の設定では、UNet の学習率が TE の学習率よりも高くなります。これは、UNet のトレーニングが不十分な場合、生成される画像の精度が十分でない可能性があり、トレーニングが過剰な場合、顔が歪んだり、大きなカラー パッチが発生したりする可能性があるためです。逆に、TE のトレーニングが不足していると、プロンプトに対する画像の従順性が低くなり、トレーニングが多すぎると冗長なコンテンツが生成される可能性があります。
学習ステップ数を正確に計算するための計算式は次のとおりです。
学習ステップ数 = (ピクチャ数 * 繰り返し数 * エポック) / バッチ サイズ 学習ステップ = (ピクチャ数 * 繰り返し数 * エポック) / バッチ サイズ学習ステップ=(写真の枚数∗繰り返し回数∗e p oc h ) /バッチサイズ
一般に、より効果的な初期値は、UNet の場合は 1e-4、TE の場合は 5e-5 です。
UNet の学習率を 1e-4 として例に挙げると、キャラクターのトレーニングには少なくとも 1,000 ステップ、絵画スタイルのトレーニングには少なくとも 2,500 ステップ、コンセプトのトレーニングには少なくとも 3,000 ステップが必要です。これは最小ステップ数であり、それ以上の画像がある場合は、さらに多くのステップが必要になります。
学習率とステップ数を決定する最良の方法は、最初にトレーニングを行ってからテストを行う、反復実験を行うことです。
学習率調整戦略 (lr_scheduler)
学習率調整戦略には、コサイン アニーリングが推奨されます。ウォームアップが有効な場合、ウォームアップ ステップは全ステップの 5% ~ 10% を占める必要があります。再起動を伴うコサイン アニーリング (再起動を伴うコサイン アニーリング) を使用することを選択した場合、再起動の回数は 4 回を超えてはなりません。
バッチサイズ (バッチサイズ)
バッチ サイズが大きいほど、勾配はより安定し、より大きな学習率を使用して収束を高速化できます。ただし、より多くのマシン リソースを消費し、より多くのビデオ メモリを消費します。一般的な設定は、batch size=2
UNet 学習率の 2 倍です。
オプティマイザーの選択
最も一般的に使用される 3 つのオプティマイザーは次のとおりです。
- AdamW8bit : これは、int8 最適化 (通常はデフォルトのオプション) を有効にする AdamW オプティマイザーです。
- Lion : Google Brain によって公開された新しいオプティマイザは、あらゆる面で AdamW を上回っており、使用するビデオ メモリは少なくなりますが、勾配更新を安定させるためにより大きなバッチ サイズが必要です。
- D-Adaptation : Facebook によって公開された適応学習率オプティマイザー。調整が簡単で、学習率を手動で制御する必要はありませんが、大量のビデオ メモリ (通常は 8G 以上) を消費します。これを使用する場合、学習率を 1 に設定し、学習率調整戦略では定数を使用します。
--optimizer_args decouple=True
UNet と TE を分離するには学習率を追加する必要があります。
ネットワーク設定とネットワーク構造
ネットワーク構造は、あらゆるモデルを構築するための基礎となります。LoRA、LyCORIS、LoCon、LoHa、LoKr、IA3 は、実際のトレーニング セット ピクチャの数と使用されるネットワーク構造に応じて、適切なネットワーク サイズを選択します。
ネットワーク構造
異なるネットワーク構造は、異なる行列の低ランク分解方法に対応します。以下にいくつかの構造の説明を示します。
- LoRAは、モデル内の主に線形層と1x1畳み込み層を制御するネットワーク構造です。これは基本的な構造であり、その後の多くのネットワーク構造は LoRA に基づいて改良されています。
- LyCORIS は、LoCon、LoHa、LoKr、IA3 などのいくつかの異なるアルゴリズムを組み込んだ LoRA の改良版です。
- LoCon: このアルゴリズムは、畳み込み層 (Conv) に対する制御を追加します。
- LoHa および LoKr: これら 2 つの方法では、それぞれアダマール積とクロネッカー積を使用します。
理論的には、LyCORIS は LoRA よりも強力な微調整効果がありますが、過剰適合も容易です。
ネットワークサイズ
ネットワーク サイズの選択は、トレーニング セット ピクチャの実際の数と使用されるネットワーク構造に基づいて行う必要があります。これらの推奨値はすべての異なるデータセットに対して最適であるわけではなく、実際の状況に応じて最適な解決策を得るには実験が必要です。さらに、畳み込み層 (Conv) については、8 を超えないことが最善です。
ネットワークアルファ
ネットワーク アルファ (network_alpha) は、トレーニング中にネットワークの重みをスケールするために使用されるパラメーターです。アルファが小さいほど学習は遅くなり、その関係は負の線形相関であると考えることができます。通常は dim/2 または dim/4 に設定されます。1 を選択した場合は、学習率を上げるか、D-Adapation オプティマイザーを使用する必要があります。
エキスパートの詳細設定
安定拡散の応用を詳しく調べると、いくつかの高度な設定に遭遇することになり、初心者にとっては混乱を引き起こす可能性があります。
キャプションのドロップアウト
キャプション ドロップアウト パラメーターに関するドキュメントやオンライン情報は比較的少ないです。作成者のドキュメントでも、これらのパラメーターについては詳細に説明されていません。ただし、キャプション ドロップアウトによってモデルのパフォーマンスが向上する場合があります。
- caption_dropout_rate : これは、すべてのラベルが削除される確率です。これは、画像がキャプションまたはクラス トークンを使用できないことを意味します。
- caption_dropout_every_n_epochs : このパラメータは、N エポックごとにすべてのラベルが破棄される頻度を設定します。
- caption_tag_dropout_rate : これは、カンマ区切りのタグによってランダムにタグがドロップされる確率です。DB+タグ トレーニング方法を使用してペイント スタイルをトレーニングする場合は、タグのオーバーフィッティングを効果的に防止できるため、このパラメーターを使用することをお勧めします。通常、0.2 ~ 0.5 の値を選択します。キャラクターのトレーニングの場合、通常はこのオプションをオンにする必要はありません。
トークン
トークンは、token_warmup_min と token_warmup_step を含む 2 つの関連パラメーターで構成されます。
- token_warmup_min : これは学習するトークンの最小数です。
- token_warmup_step : これは、トークンの最大数に達するまでのステップ数です。
トークンのウォームアップは、キャプション ドロップアウトの別の形式として理解できます。ただし、トークンがランダムにシャッフルされていない場合、モデルは最初の N 個のトークンのみを学習します。
ノイズ相関
ノイズ関連のパラメーターには、ノイズ オフセット (noise_offset) とマルチ解像度/ピラミッド ノイズ (multires_noise_iterations、multires_noise_discount) の 2 つがあります。
- ノイズ オフセット (noise_offset) : トレーニング プロセス中にグローバル ノイズを追加すると、画像の明るさの範囲が改善され、モデルがより暗い画像またはより白い画像を生成できるようになります。このオプションを有効にする必要がある場合、推奨設定値は 0.1 であり、ネットワーク コンバージェンスの遅延を補うために学習ステップの数を増やす必要があります。
- マルチ解像度/ピラミッド ノイズ: 関連パラメーターには、multires_noise_iterations および multires_noise_discount が含まれます。反復の場合は 6 ~ 8 に設定することをお勧めします。これより高くてもあまり改善されません。割引の場合は、0.3 ~ 0.8 の範囲に設定することをお勧めします。値が小さいほど、より多くのステップが必要になります。
その他のパラメータ
- CLIP_SKIP は、最後の N 層の CLIP モデルによって出力されたパラメーターを使用します。これは、使用するモデルと一致している必要があります。NAI ベースの 2 次モデルを使用している場合は 2 を使用する必要があり、SD1.5 のような実際のモデルを使用している場合は 1 を使用する必要があります。
- Min-SNR-γ は、拡散モデルの収束を高速化するために使用されます。サンプルバッチごとに学習の難易度が異なるため、勾配の方向に一貫性がなく、収束プロセスが遅くなります。この問題を解決するには、このパラメータを 5 に設定すると最も効果的です。このアプローチは、オプティマイザーが D-Adaptation を使用する場合には適用されません。
- データ拡張は、モデルの過学習を防ぐためにトレーニング中にリアルタイムで画像を変換する方法です。使用できるデータ拡張方法には、color_aug、flip_aug、face_crop_aug_range、random_crop などがあります。キーワードと画面に差異が生じるため、使用はお勧めしません。
- max_grad_normは通常は役に立ちません。このパラメーターは、モデル更新勾配のサイズを制限するために使用され、それによって数値の安定性が向上します。グラデーションのノルムがこの値を超える場合、このサイズに拡大縮小されます。
- パラメータgradient_accumulation_steps は、勾配累積のステップ数であり、小さなビデオ メモリに対する大きなバッチ サイズの影響をシミュレートするために使用されます。ビデオ メモリが 4 を超えるバッチ サイズ (24G ビデオ メモリを備えた 3090 または 4090 など) を使用するのに十分な場合、このパラメータを有効にする必要はありません。
- log_with、wandb_api_key はロガーのタイプを選択するために使用され、tensorboard または wandb を選択できます。
- Prior_loss_weightは通常は役に立たず、デフォルトで選択されている 1 が適切です。DB トレーニングの前部分の重みを制御するために使用され、画像の正則化強度を制御するために使用できます。
- debug_dataset は、設定が正しいことを確認するために使用されます。
- vae_batch_sizeに 2 ~ 4 を使用すると、潜在キャッシュのプロセスをわずかに高速化できます。VAE エンコーダ自体のパラメータは比較的小さいため、Linux マシンでも 8GB のビデオ メモリを搭載したグラフィックス カードを 4 に設定できます。Windows システムの場合、システムが大量のビデオ メモリを占有するため、ビデオ メモリが 10GB 未満の場合は、このパラメータを有効にしないでください。