このトピックでは、Kohyaを使用して低ランク適応 (LoRA) モデルをトレーニングする方法について説明します。
背景情報
安定拡散 (SD) は、テキスト記述に基づいて画像を生成する深層学習モデルである。 SD WebUIは、SD用のwebベースの視覚化インターフェイスであり、プラグインとモデルのインポートによる広範なカスタマイズオプションを使用して、テキストから画像への操作と画像から画像への操作を容易にします。
SD WebUI画像生成には、それぞれ独自の特性と適切なドメインを持つさまざまなモデルが必要です。 ビジネス要件を満たすために、さまざまなトレーニングデータセットとトレーニングポリシーを使用してモデルをトレーニングする必要があります。 LoRAは、大きなモデルを微調整して特定の役割やスタイルの画像を生成するために使用される軽量のトレーニング手法です。 シンプルな設定を実行することで、適度なサイズのLoRAモデルを効率的にトレーニングできます。
Kohyaは、LoRAモデルをトレーニングするための人気のあるオープンソースサービスです。 そのGUIパッケージは、専用のトレーニング環境とユーザーインターフェイスを提供し、他のソフトウェアとの干渉を最小限に抑えます。 特定のプラグインを使用して、SD Web UIでモデルをトレーニングすることもできます。 ただし、SDでプラグインとKohyaのGUIを同時に使用すると、競合やエラーが発生する可能性があります。
モデルの微調整方法の詳細については、「ArtLabのモデル」をご参照ください。
LoRAモデルの紹介
LoRAは、データセットトレーニングを通じて基礎モデルに基づく定型化モデルのトレーニングを可能にし、高度にカスタマイズされた画像生成効果をもたらします。
ファイルの仕様は次のとおりです。
ファイルサイズ: トレーニングされたパラメーターと基本モデルの複雑さに応じて、数MBから数百MBの範囲です。
ファイル形式: 標準のファイル名拡張子は .safetensorsです。
ファイルアプリケーション: 指定されたチェックポイント基本モデルで使用する必要があります。
ファイルバージョン: Stable Diffusion v1.5とStable Diffusion XLを区別します。モデルはこれらのバージョン間で互換性がないためです。
LoRA微調整モデル
基本的な成分として、Stable Diffusion v1.5、v2.1、またはStable Diffusion XLベース1.0などの基本モデルを検討してください。 LoRAモデルは独特の調味料として機能し、これらの成分に独特の風味と革新を与えます。 これはイノベーションの触媒として機能し、基礎モデルの創造的な制限を克服し、より柔軟で効率的でパーソナライズされたコンテンツ作成を可能にします。
たとえば、安定拡散v1.5モデルには次のような制限があります。
不正確なコンテンツの詳細生成: 複雑な詳細や複雑なコンテンツを正確に再現するのに苦労し、詳細やリアリズムに欠ける画像につながる可能性があります。
生成されたコンテンツの論理構造が不十分: 生成された画像内のオブジェクトのレイアウト、比率、および照明ロジックは、現実世界の原則と一致しない場合があります。
一貫性のないコンテンツスタイル: 複雑でランダムな生成プロセスにより、特定のスタイルを維持したり、スタイル転送を一貫して実行したりすることは困難です。
モデルエコシステムコミュニティは、すべて基本モデルに基づいて、多くの優れた微調整モデルを作成しました。 これらの微調整されたモデルは、より豊かなディテール、より顕著なスタイル機能、およびより制御可能なコンテンツを備えた画像を生成します。 下の画像は、安定拡散v1.5モデルと微調整モデルの画像生成効果を比較しており、画質の大幅な向上を示しています。
さまざまなタイプのLoRAモデル
LyCORIS (旧LoHa/LoCon)
LoRAの拡張バージョンであるLyCORISは、ニューラルネットワークの26層を細かく調整でき、LoRAの17層の微調整機能に比べて大幅なパフォーマンス向上を実現します。 LyCORISは、より高い表現力、より多くのパラメーター、およびより高い情報容量を誇っています。 その中心的な利点はLoHaとLoConにあり、LoConはSDモデルの各レベルの調整に焦点を当てており、LoHaは元の基準でデータ情報を2倍にしています。
使用法はLoRAと同じで、テキストエンコーディング、Unet、およびDyLoRaの重みを調整することで高度な使用法を実現できます。
LoCon
従来のLoRAはクロスアテンション層のみを調整しましたが、LoConも同じ方法を使用してResNet行列を調整しました。 LoConはLyCORISに統合されており、以前のLoCon拡張機能は不要です。 詳細については、「LoCon-LoRA For Convolution Network」をご参照ください。
ロハ
LoHa (LoRA with Hadamard Product) は、行列の内積をHadamard productに置き換え、理論的には同じ条件下でより多くの情報に対応します。 詳細については、「FedPara Low-Rank Hadamard Product For Communication-Efficient Federated Learning」をご参照ください。
DyLoRA
LoRAの最適ランクは、必ずしも最高ではない。 これは、特定のモデル、データセット特性、および手元のタスクに基づいて決定する必要があります。 DyLoRAは、指定された次元でのさまざまなランク構成の柔軟な探索と学習を可能にし、最適なランクを見つける複雑さを簡素化し、モデルチューニングの効率と精度を向上させます。
データセットの準備
LoRAタイプの決定
データセットを準備する前に、トレーニングするLoRAモデルのタイプを決定する必要があります。たとえば、特定のロールまたはスタイルを示すイメージを生成するようにモデルをトレーニングするかどうかなどです。
たとえば、LoRAモデルをトレーニングして、Alibaba Cloud Evolving Design Languageに基づいてAlibaba Cloudサービス用の3Dスタイルのロゴイメージを生成できます。
画像の準備
イメージ要件
数量: 通常、少なくとも10の画像が必要です。 15枚以上の画像を用意することをお勧めします。
品質: 画像は適度な解像度でクリアでなければなりません。
スタイル: 画像は統一されたスタイルでなければなりません。
コンテンツ: トレーニングする対象は、画像上で強調表示する必要があります。 画像は、複雑な背景や無関係なコンテンツ、特にテキストを含んではいけません。
サイズ: 画像の解像度は512から768まで64ピクセルの倍数でなければなりません。 GPUのビデオメモリが限られている場合は、画像をトリミングして512 × 512ピクセルの解像度を実現できます。 GPUに十分なビデオメモリがある場合は、画像をトリミングして768 × 768ピクセルの解像度を実現できます。
イメージの前処理
解像度の調整: 画像を中程度の解像度に設定して、画像がはっきりしていることを確認できます。 画像の解像度は、モデルトレーニングの結果に影響します。 準備した画像が解像度が低いためにぼやけている場合は、SD Web UIの [エクストラ] ページで画像の解像度を上げることができます。 または、別の画像処理ツールを使用して画像の解像度を上げることもできます。
サイズ調整: BIRMEなどのWebサイトにアクセスして、一度に複数の画像をトリミングし、サイズ変更された画像をダウンロードできます。 SD Web UIを使用して、画像を自動または手動でトリミングすることもできます。
準備された画像の例
画像をローカルフォルダに保存します。
データセットの作成とファイルのアップロード
データセットを作成し、画像ファイルをデータセットにアップロードする
画像ファイルをデータセットにアップロードする前に、ファイルの属性と名前が要件を満たしているかどうかを確認してください。 SD Web UIを使用してデータセット内の画像ファイルを管理したり、画像ファイルにキャプションを追加したりする場合は、画像ファイルまたは画像ファイルが保存されているフォルダーを直接アップロードできます。 この場合、ファイル名またはフォルダ名に特別な要件は適用されません。
データセット内の画像ファイルにキャプションを追加した後、Kohyaを使用してLoRAモデルをトレーニングする必要がある場合は、ファイル名またはフォルダー名が次の要件を満たしている必要があります。
名前の形式: Number_Custom name
説明: 名前はカスタマイズ可能です。
数: イメージがモデルトレーニングに使用される回数。 ほとんどの場合、数は以上100でなければなりません。 通常、すべての画像がモデルトレーニングに使用される合計回数は、1,500以上でなければなりません。 したがって、フォルダに10枚の画像が格納されている場合、各画像は少なくとも150回モデルトレーニングに使用されます。 この場合、フォルダ名の番号を150できます。 フォルダに20枚の画像が格納されている場合、各画像は少なくとも75回モデルトレーニングに使用されます。これは100回未満です。 この場合、フォルダ名の番号を100できます。
カスタム名: この例では、100_ACD3DICONが使用されます。 ビジネス要件に基づいてカスタム名を指定できます。
PAI ArtLabにログインし、Kohya (Exclusive Edition) を選択します。
データセットを作成する
[データセット] ページで、[データセットの作成] をクリックし、acd3diconなどのデータセット名を入力します。
データセットファイルのアップロード
データセットをクリックします。 loacal画像フォルダをドラッグしてアップロードします。
フォルダ内のアップロードされた画像を確認します。
画像キャプションの準備
画像キャプションは、各画像に対応するテキスト記述である。 キャプションファイルは、画像と同じ名前のTXTファイルでなければなりません。
画像キャプションの要件
この例の要素は、通常、明確な構造、標準的な視点、および特定の照明を備えています。 キャプションについては、「sphere」や「cube」など、上、中、下のレイヤーの単純な幾何学的形状に注目してください。
カテゴリ
キーワード
サービス
制品またはサービス
データベース、クラウドセキュリティ、コンピューティングプラットフォーム、コンテナ、クラウドネイティブ
クラウドコンピューティング要素
データ処理、ストレージ、コンピューティング、クラウドコンピューティング、エラスティックコンピューティング、分散ストレージ、クラウドデータベース、仮想化、コンテナ化、クラウドセキュリティ、クラウドアーキテクチャ、クラウドサービス、サーバー、負荷分散、自動管理、スケーラビリティ、ディザスタリカバリ、高可用性、クラウド監視、クラウド課金
デザイン (テクスチャ)
環境と構成
ファインダー、アイソメトリック、HDRI環境、白い背景、ネガティブスペース
テクスチャ
光沢のあるテクスチャ、マットテクスチャ、金属テクスチャ、ガラステクスチャ、すりガラステクスチャ
照明
スタジオの照明、柔らかい照明
色
Alibaba Cloudオレンジ、白、黒、グラデーションオレンジ、透明、銀
感情
合理的, 整然とした, エネルギッシュ, 活気のある
品質
UHD、正確な、高い詳細、最高の品質、1080p、16K、8K
デザイン (雰囲気)
...
...
画像にキャプションを追加
各画像にテキストの説明を手動で追加します。 大規模な画像セットの場合は、ビジネス要件を満たすために、バッチテキスト生成用のニューラルネットワークまたはKohyaのBLIP画像タグ付けモデルを手動で改良することを検討してください。
データセットにキャプションを追加する
Kohya (Exclusive Edition) ページで、[ユーティリティ] > [キャプション] > [BLIPキャプション] を選択します。
データセット内のアップロードされた画像フォルダを選択します。
プリセットの単語を入力して、マシンバッチが各画像にキャプションテキストを追加できるようにします。 プリセットの単語を、画像の種類によって異なるデータセットの画像の寸法に合わせます。
[キャプション画像] をクリックして開始します。
以下のログでタグ付けの進行状況と完了プロンプトを監視します。
キャプションの後、データセットは対応するキャプションファイルとともに画像を表示します。
(オプション) 不適切なキャプションを手動で修正します。
LoRAモデルのトレーニング
Kohya (Exclusive Edition) ページで、LoRA > トレーニング > ソースモデルを選択します。
次のパラメーターを設定します。
モデルクイックピック: runwayml/stable-diffusion-v1-5
トレーニング済みモデルを: safetensors
Kohya (Exclusive Edition) ページで、
を選択します。datasetフォルダーを含むデータセットを選択し、トレーニングパラメーターを設定します。
説明キャプションを付けるときは、データセット内の画像フォルダーを選択してください。 モデルのトレーニング時に、datasetフォルダーが存在するデータセットを選択します。
[トレーニングの開始] をクリックします。
パラメーターの詳細については、「頻繁に使用されるトレーニングパラメーター」をご参照ください。
以下のログでトレーニングの進行状況と完了通知を監視します。
よく使用されるトレーニングパラメータ
Parameters
モデルトレーニングの総ステップ=画像数 × 繰り返し数 × セットエポック /バッチサイズ。
例えば、10個の画像に20ステップと10個のループを掛け、2つの並列数で割ったものは、1000ステップに等しい。
Kohya (Exclusive Edition) ページに移動し、LoRA > トレーニング > パラメータを選択してモデルトレーニングパラメータを設定します。 頻繁に使用されるパラメーターを次の表に示します。
Basic
パラメーター
関数
説明
repeat
画像読み取りの頻度
フォルダに名前を付けるときの画像読み取りの頻度。 より多くの繰り返しは、学習効果を高めることができる。 初期トレーニングの推奨設定は次のとおりです。
アニメ: 7〜15回
ポートレート: 20〜30回
オブジェクト: 30〜100回
LoRA type
使用するLoRAのタイプ
デフォルト値 [標準] を使用します。
LoRA network weights
LoRAネットワークの重み
必要に応じて、 前のポイントからトレーニングを続けるには、最後にトレーニングしたLoRAを選択します。
Train batch size
トレーニングバッチのサイズ
GPU機能に基づいて選択します。 12Gビデオメモリの場合、最大値は2であり、8Gビデオメモリの場合、最大値は1である。
Epoch
完全なトレーニングサイクル数
あなたのニーズに基づいて計算します。 通常:
Kohyaの合計トレーニングステップ=トレーニング画像の数x繰り返し回数xエポック /トレーニングバッチサイズ
WebUIのトレーニングステップの合計=トレーニング画像の数xリピート回数
カテゴリ画像の場合、KohyaまたはWebUIのトレーニングステップの合計に2を掛けます。 Kohyaのモデル保存数は半分になります。
Save every N epochs
結果を保存する頻度
2に設定すると、モデルは2エポックごとにトレーニング結果を保存します。
Caption Extension
キャプションのファイル拡張子
必要に応じて、 トレーニング画像セット内のキャプション /プロンプトファイルは txt形式。
Mixed precision
混合精度の使用
GPU機能に基づいて選択します。 有効な値:
いいえ
fp16 (デフォルト)
bf16 (RTX30および新しいGPUはbf16を選択できます)
Save precision
保存されたモデルの精度
GPU機能に基づいて選択します。 有効な値:
いいえ
fp16 (デフォルト)
bf16 (RTX30および新しいGPUはbf16を選択できます)
Number of CPU threads per core
コアあたりのCPUスレッド数
主にビデオメモリ管理では、購入したインスタンスとニーズに応じて調整します。 デフォルト値を使用します。
Seed
乱数シード
イメージ生成の検証に役立ちます。
Cache latents
潜在変数のキャッシング
デフォルトで有効になっているこの機能は、トレーニング後に画像情報を潜在ファイルとしてキャッシュします。
LR Scheduler
ラーニングレートスケジューラ
普遍的に最適な学習レートはありませんが、理想値を近似するためにCosineが一般的に使用されます。
Optimizer
オプティマイザ
デフォルトのオプティマイザはAdamW8bitです。 トレーニングがsd1.5基礎モデルに基づいている場合は、デフォルト値を使用します。
Learning rate
学習率
初期トレーニングでは、0.01〜0.001の学習率を推奨します。デフォルトは0.0001です。
損失関数に基づいて学習率を調整します。損失が高い場合は適度に増加させ、損失が低い場合は徐々に減少させてモデルを改善します。
高い学習率は、訓練をスピードアップするが、モデルが訓練データに過度に適合し、一般化を欠く過剰適合につながる可能性がある。
学習率が低いと、詳細な学習が保証され、オーバーフィッティングのリスクが軽減されますが、トレーニング時間やリスクアンダーフィッティングが長引く可能性があります。
LR Warmup (% of steps)
学習率ウォームアップのためのステップの割合
デフォルト値は 10 です。
Max Resolution
最大イメージ解像度
画像の要件に基づいて調整します。 デフォルト値: 512,512
Network Rank (Dimension)
モデルの複雑さ
一般的な設定は64で、ほとんどのシナリオに適しています。
Network Alpha
ネットワークアルファ
小さい値が推奨される。 ランクとアルファの設定は、LoRAの最終出力サイズに影響します。
Clip skip
テキストエンコーダでスキップされたレイヤー
アニメの場合は2を選択し、現実的なモデルの場合は1を選択します。 アニメモデルトレーニングでは、最初に1つのレイヤーをスキップします。 トレーニング資料もアニメ画像の場合は、追加のレイヤーをスキップして合計2にします。
Sample every n epochs
サンプリングの周波数
サンプルはエポックの指定された数ごとに救われます。
Sample prompts
サンプリングのプロンプト
サンプルプロンプトを定義します。 有効な値:
-- n: 否定的なプロンプト。
-- w: イメージの幅。
-- h: イメージの高さ。
-- d: 画像のシード。
-l: プロンプトの関連性 (cfg比) 。
-- s: 反復ステップの数。
[詳細] タブ
パラメーター
関数
説明
Clip skip
テキストエンコーダでスキップされたレイヤー
アニメの場合は2を選択し、現実的なモデルの場合は1を選択します。 アニメモデルトレーニングでは、最初に1つのレイヤーをスキップします。 トレーニング資料もアニメ画像の場合は、追加のレイヤーをスキップして合計2にします。
[サンプル] タブ
パラメーター
関数
説明
Sample every N epochs
サンプリングの周波数
サンプルはエポックの指定された数ごとに救われます。
Sample prompts
サンプリングのプロンプト
サンプルプロンプトを定義します。 有効なパラメータは次のとおりです。
-- n: 否定的なプロンプト。
-- w: イメージの幅。
-- h: イメージの高さ。
-- d: 画像のシード。
-l: プロンプトの関連性 (cfg比) 。
-- s: 反復ステップの数。
損失値
LoRAを使用したモデルトレーニングの微調整中、損失値はモデルパフォーマンスの重要な尺度として機能します。 理想的には、損失は、訓練が進むにつれて徐々に減少し、ユーザが提供した訓練データへの効果的な学習および適応を意味する。 0.08と0.1との間に維持される損失値は、典型的には、0.08が特に最適である、成功したモデルトレーニングを示します。
LoRA学習は、損失値が高い値から低い値に減少するプロセスとして説明することができる。 例えば、トレーニングサイクル、すなわちエポックが30に設定され、0.09と0.07との間の損失値を達成することが目的である場合、この目標は、第20エポックと第24エポックとの間で満たされる可能性が高い。 このような設定は、トレーニングラウンドの数が不十分なために損失が急速に低下するのを防ぐのに役立ちます。 例えば、損失がわずか2ラウンド後に0.1から0.06に急落した場合、それは所望の損失範囲を迂回し得ます。