3-2 LoRAトレーニング(高度)

高度なLoRAトレーニングでAIアートをマスターしましょう!このガイドでは、原理やプロセスから、素晴らしくコントロール可能な結果を得るためのパラメータの最適化まで、すべてをカバーします。

LoRAの原理

LoRAの用途

LoRAは、チェックポイントの重みを変更せずに画像全体を微調整するために使用されます。この場合、LoRAを調整するだけで特定の画像を生成でき、チェックポイント全体を変更する必要はありません。AIがこれまでに遭遇したことのない画像に対して、LoRAは微調整に使用され、AIアートに一定の「コントロール性」を与えます。

現在、トレーニングされたモデルはすべて公式にトレーニングされたモデル(SD1.5、SDXL)に基づいて「改良」されたものです。もちろん、他の人が作成したモデルに対しても改良を加えることができます。

LoRAトレーニング:AIは最初にプロンプトに基づいて画像を生成し、その後、トレーニングセットのデータセットとこれらの画像を比較します。生成された違いに基づいて埋め込みベクトルを継続的に微調整することで、生成された結果が徐々にデータセットに近づきます。最終的に、微調整されたモデルはデータセットと完全に同等の結果を生成でき、AIが生成する画像とデータセットの間に関連性を形成し、それらがますます似てくるようになります。

*チェックポイントと比較して、LoRAはファイルサイズが小さく、時間とリソースを節約できます。さらに、チェックポイントの上に重みを調整することで、異なる効果を実現できます。

LoRAトレーニングプロセス

5つのステップ:データセットの準備 - 画像の前処理 - パラメータの設定 - LoRAトレーニングプロセスの監視 - トレーニングの完了

*SeaArtで顔のLoRAをトレーニングする例を使用します。

データセットの準備

データセットをアップロードする際には、「多様なサンプル」の原則を維持することが重要です。これには、異なる角度、ポーズ、照明条件などの画像を含め、高解像度の画像を確保することが含まれます。このステップは主に、AIが画像を理解するのに役立ちます。

画像の前処理

1. 画像のクロッピング 2. タグ付け标记 3. トリガーワード触发词.

1. 画像のクロッピング

AIが画像を通じてオブジェクトをよりよく識別できるようにするためには、一般的に一貫した画像サイズを維持するのが最適です。出力に応じて、512×512(1:1)、512×768(2:3)、または768×512(3:2)から選択できます。

クロップモード:センタークロップ / フォーカスクロップ / ノークロップ

センタークロップ:画像の中央領域をクロップします。

フォーカスクロップ:画像の主題を自動的に識別します。

*センタークロップと比較して、フォーカスクロップはデータセットの主題を保存する可能性が高いため、一般的にフォーカスクロップを使用することをお勧めします。

  1. タグ付けアルゴリズム

データセット内の画像にテキスト形式で説明を提供し、AIがテキストから学習できるようにします。

タギングアルゴリズム:BLIP/Deepbooru

  • BLIP: 自然言語タガー。例:「黒髪の女の子」

  • Deepbooru: フレーズ言語ラベル。例:「女の子、黒髪」

  • タグ付け閾値:値が小さいほど詳細な説明が可能です。0.6が推奨されます。

タギングプロセス:AIが自動的にこれらの特徴を学習できるように、固定特徴(例:身体的特徴など)を削除します。同様に、将来調整したい特徴(衣服、アクセサリー、行動、背景など)を追加することもできます。

*例えば、生成されるすべての画像に黒髪と黒い目を持たせたい場合は、これら二つのタグを削除できます。

  1. トリガーワード

Loraの活性化を引き起こすワードで、キャラクターの特徴を一つの言葉に効果的に統合します。 パラメータ設定

パラメータ設定

ベースモデル:Loraのスタイルに密接に合致する高品質で安定したベースモデルを選択することを推奨します。これにより、AIが特徴をマッチングしやすく、違いを記録しやすくなります。

推奨されるベースモデル:

リアリスティック:SD1.5, ChilloutMix, MajicMIX Realistic, Realistic Vison

アニメ:AnyLoRA, Anything | 万象熔炉, ReV Animated

アドバンスト設定

トレーニングパラメータ:

Repeat (単一画像の繰り返し回数): 単一画像が学習される回数。繰り返し回数が多いほど学習効果が高まりますが、過度な繰り返しは画像の硬直化を招く可能性があります。提案:アニメ:8回;リアリスティック:15回。

Epoch (サイクル): 1サイクルはデータセット数×リピートに等しい。トレーニングセット上でモデルがトレーニングされたステップ数を表します。例えば、トレーニングセットに20枚の画像があり、リピートが10に設定されている場合、モデルは20×10=200ステップを学習します。エポックが10に設定されている場合、Loraトレーニングは合計2000ステップになります。提案:アニメ:20回;リアリスティック:10回。

Batch size: AIが同時に学習する画像の数を指します。例えば、2に設定されている場合、AIは一度に2枚の画像を学習しますが、これにより全体的なトレーニング時間が短縮されます。しかし、複数の画像を同時に学習することで、各画像の精度が相対的に低下する可能性があります。

Mixed precision: fp16 is recommended.

サンプル画像の設定:

Resolution: 最終モデル効果のプレビュー画像のサイズを決定します。

  • SD1.5: 512*512

    SD1.5: 512*512

Seed: ランダムに生成される画像を制御します。同じシードをプロンプトと一緒に使用すると、同じまたは類似の画像が生成される可能性があります。

Sampler \ Prompts \ Negative Prompts: 主に最終モデルのプレビュー画像の効果を示します。

保存設定:

最終的なLorasの数を決定します。2に設定され、エポックが10の場合、最終的に5つのLorasが保存されます。

Save precision: fp16を推奨。

学習率&オプティマイザー:

Learning Rate: AIがデータセットを学習する強度を示します。学習率が高いほどAIはより多くを学習できますが、出力画像が異なる可能性もあります。データセットが増えるとき、学習率を下げることを試すことが望ましいです。デフォルト値から始めて、トレーニング結果に基づいて調整することを推奨します。低い学習率から徐々に上げることが推奨され、0.0001で始めることが推奨されます。

unet lr: unet lrが設定されると、学習率は効果を発揮しません。0.0001での設定を推奨します。

text encoder lr: タグへの感度を決定します。通常、テキストエンコーダー lrはunet lrの1/2または1/10に設定されます。

Lr scheduler: 主に学習率の減衰を管理します。異なるスケジューラーは最終結果に最小限の影響を与えます。通常はデフォルトの「コサイン」スケジューラーが使用されますが、「Cosine with Restart」というアップグレードバージョンも利用可能です。複数のリスタートを経てデータセットを完全に学習し、トレーニング中に「局所最適解」の干渉を避けます。「Cosine with Restart」を使用する場合、リスタート回数を3-5に設定します。

Optimizer: トレーニング中の学習プロセスをAIがどのように把握するかを決定し、学習結果に直接影響します。AdamW8bitの使用が推奨されます。

Lion: 新しく導入されたオプティマイザーで、通常はAdamWよりも約10倍小さい学習率です。

Prodigy: すべての学習率が1に設定されている場合、Prodigyは学習率を自動的に調整して最適な結果を得ることができ、初心者に適しています。

ネットワーク:

AI入力データに適したLoraモデルベースを構築するために使用されます。

Network Rank Dim: Loraのサイズに直接影響します。ランクが大きいほど、トレーニング中に細かく調整する必要があるデータが増えます。128=140MB+; 64=70MB+; 32=40MB+。

推奨:

リアリスティック:64/128

アニメ:8/16/32

値を高く設定しすぎると、AIが深く学習しすぎて、関連性のない詳細を多く捉え、"過学習"に似た状態になります。

Network Alpha: Loraが元のモデルの重みに与える影響の度合いとして理解できます。ランクに近いほど、元のモデルの重みに与える影響は小さくなり、0に近いほど、元のモデルの重みに与える影響が顕著になります。アルファは通常、ランクを超えません。現在、アルファは通常ランクの半分に設定されます。1に設定すると、重みに対する影響が最大化されます。

タグ付け設定:

一般的に、タグが前にあるほど、その重みが大きくなります。そのため、通常各タグをシャッフル推奨されます。

LoRAトレーニングの問題

オーバーフィッティング/アンダーフィッティング

オーバーフィッティング:データセットが限定されている場合やAIがデータセットに過度にマッチする場合に発生し、LoRAがデータセットに非常に似た画像を生成することで、モデルの一般化能力が低下します。

右上の画像は、外見や姿勢も含めて左のデータセットに密接に似ています。

オーバーフィッティングの理由:

  1. データセットが不足している。

  2. パラメータ設定が不正確(タグ、学習率、ステップ、オプティマイザーなど)。

オーバーフィッティングを防ぐには:

  1. 学習率を適切に減少させる。

  2. エポックを短縮する。

  3. ランクを減らし、アルファを増やす。

  4. リピートを減少させる。

  5. 正則化トレーニングを利用する。

  6. データセットを増やす。

アンダーフィッティング:トレーニング中にモデルがデータセットの特徴を十分に学習できず、生成された画像がデータセットと良く一致しないことがあります。

LoRAの生成した画像は、データセットの特徴を十分に保持できていないため、似ていないと見られます。

アンダーフィッティングの理由:

  1. モデルの複雑さが低い。

  2. 特徴量が不足している。

アンダーフィッティングを防ぐには:

  1. 学習率を適切に増加させる。

  2. エポックを増やす。

  3. ランクを上げ、アルファを減らす。

  4. リピートを増やす。

  5. 正則化の制約を減らす。

  6. データセットにより多くの高品質な特徴を追加する。

Regular Dataset

画像の過学習を避ける方法の一つは、モデルの一般化能力を向上させるために追加の画像を加えることです。通常のデータセットはあまり広範囲にすべきではなく、そうでないとAIが通常のデータセットから過度に学習し、元の目標との一貫性がなくなる可能性があります。10-20枚の画像を持つことが推奨されます。

たとえば、ほとんどの画像にロングヘアが特徴のポートレートデータセットの場合、通常のデータセットにショートヘアの画像を追加することができます。同様に、データセットが同じ芸術スタイルの画像で構成されている場合、モデルを多様化するために異なるスタイルの画像を通常のデータセットに追加することができます。通常のデータセットにタグを付ける必要はありません。

*素人の言葉で言うと、このようにLoraをトレーニングすることは、データセットと通常のデータセットの組み合わせのようなものです。

Loss

AIが学ぶ内容と現実とのずれは、損失によって導かれ、AIの学習方向を最適化することができます。したがって、損失が低い場合、AIが学ぶ内容と現実とのずれは比較的小さく、この時点でAIは最も正確に学びます。損失が徐々に減少している限り、通常は大きな問題はありません。

リアリスティック画像の損失値は一般的に0.1から0.12の範囲にあり、アニメに関しては適切に下げることができます。

損失値を使用してモデルトレーニングの問題を評価します。

要約

現在、「ファインチューニングモデル」は大まかに3つのタイプに分けられます:Dreamboothによるチェックポイント出力、Lora、テキスチュアルインバージョンによるエンベディング出力です。モデルのサイズ、トレーニング期間、トレーニングデータセットの要件などの要因を考慮すると、Loraは最も「コストパフォーマンス」が良いです。芸術スタイル、キャラクター、様々なポーズの調整に関して、Loraは効果的に機能することができます。

SDXL LoRA設定

推奨されるトレーニングパラメーター:

トレーニングパラメータ

Epochs:

データセットの画像トレーニングサイクルの数。初心者には10を推奨します。データセットが小さいためにトレーニングが不十分な場合は値を上げるか、データセットが巨大な場合は下げることができます。

Repeats:

画像が学習される回数。値が高いほど効果が良く、画像の構成が複雑になります。値を高く設定しすぎると過学習のリスクが増加するため、過学習の可能性を最小限に抑えつつ良いトレーニング結果を得るために10を使用することを提案します。

注意:トレーニング結果が似ていない場合は、エポックとリピートを増やすことができます。

学習率&オプティマイザー:

learning_rate (Overall Learning Rate):

各リピートでの変化の度合い。値が高いほど学習が速くなりますが、モデルのクラッシュや収束不能の原因となる可能性があります。値が低いほど学習が遅くなりますが、最適な状態に達する可能性があります。U-NetおよびText Encoderの個別の学習率を設定した後、この値は効果を失います。

unet_lr (U-Net Learning Rate):

ランダムシードによって生成されたノイズ画像をガイドし、デノイジングの方向を決定し、変更が必要な領域を見つけ、必要なデータを提供します。値が高いほどフィッティングが速くなりますが、詳細を見逃すリスクがあります。一方、値が低いとアンダーフィッティングが発生し、生成された画像と素材との類似性がありません。値はモデルのタイプとデータセットに基づいて適切に設定されます。キャラクタートレーニングには0.0002を推奨します。

text_encoder_lr (Text Encoder Learning Rate):

タグをU-Netが理解できる埋め込み形式に変換します。SDXLのテキストエンコーダーはすでに十分に訓練されているため、通常はさらなるトレーニングは必要ありません。特別なニーズがない限り、デフォルト値で問題ありません。

Optimizer:

深層学習でモデルパラメーターを調整して損失関数を最小限にするアルゴリズムです。ニューラルネットワークトレーニング中、オプティマイザーは損失関数の勾配情報に基づいてモデルの重みを更新し、モデルがトレーニングデータにより適合するようにします。SDXLトレーニングにはデフォルトのオプティマイザーであるAdamWが使用されますが、適応学習率を持つ使いやすいProdigyなど、特定の要件に基づいて他のオプティマイザーも選択できます。

lr_scheduler (Learning Rate Scheduler Settings):

トレーニング中に学習率を動的に調整する戦略またはアルゴリズムを指します。通常の状況ではConstantを選択するのが十分です。

ネットワーク:

network_dim (Network Dimension):

トレーニングされたLoRAのサイズに密接に関連しています。

SDXLの場合、32dimのLoRAは200M、16dimのLoRAは100M、8dimのLoRAは50Mです。キャラクターには8dimを選択するのが十分です。

network_alpha:

通常、dim値の半分または四分の一に設定されます。dimが8に設定されている場合、alphaは4に設定できます。

その他の設定:s:

Resolution:

トレーニング解像度は非正方形でも問題ありませんが、64の倍数である必要があります。SDXLには1024x1024または1024x768を推奨します。

enable_bucket (Bucket):

画像の解像度が統一されていない場合、このパラメータをオンにしてください。トレーニングが始まる前に、トレーニングセットの解像度を自動的に分類し、各解像度または類似の解像度の画像を保存するためのバケットを作成します。これにより、初期段階での解像度の統一にかかる時間を節約できます。画像の解像度がすでに統一されている場合はオンにする必要はありません。

noise_offset and multires_noise_iterations:

どちらのノイズオフセットも、生成された画像が過度に明るいまたは暗すぎる状況を改善します。トレーニングセットに過度に明るいまたは暗い画像がない場合、それらをオフにすることができます。オンにする場合は、multires_noise_iterationsの値として6-10を使用することを提案します。

multires_noise_discount:

上記のmultires_noise_iterationsと一緒にオンにする必要があり、0.3-0.8の値が推奨されます。

clip_skip:

最後から数えてどのテキストエンコーダーレイヤーの出力を使用するかを指定します。通常、デフォルト値で問題ありません。

Last updated