Lab @8 : lr-gotcha - concept of getting caught when being naughty
詳細
ファイルをダウンロード
モデル説明
免責事項
このLoRAシリーズは、LoRAトレーニングの学習を共有するための中級的な実験用LoRAを提供します。
これらのLoRAには、プレフィックスとして *BAD* が付与されます。これらは実行後の画像を特定的に提供しません。
ご関心がある場合は、ダウンロードしてその性能を試してみてください、または付録のベンチマークコンテンツを参照してください。
はじめに
このLoRAは、少女が悪戯をして彼氏/夫に見つかるというコンセプトです。
適切なモデルへの切り替え
/model/1277670/janku-v30-noobai-eps-rouwei-nsfw-illustrious-xl
lab_8_11, lab_8_12,
- これらのモデルはこのベースモデルでトレーニングされており、生成される画像のほとんどは崩れていない
チェンジログ
250427
Lab_8_12 を更新(ベースモデルは Janku v3)
固定された正則化画像セットを使用してLoRAを再トレーニング
結果:生成がより安定した
そして、なぜ最初にこんなに乱雑だったのか、今やわかりました!(ご自身でLoRAをトレーニングされる方には、私が犯したミスについての詳細をこのLoRAの発見を参照してください:/model/1493162/lab-10-nude-pantyhose-natural-pantyhose-with-cotton-or-shiny-controlling )
発見
データ前処理:シングルラインのキャプション形式が重要(ドキュメントにも記載されており、結果にも差が明らか)
トリガー・トークン:"inset"タグはターゲット概念を効果的に捉え、正確な選択が重要(つまり、トレーニングを導くためのより良いトリガー・トークンを選ぶことが某种程度重要)
正則化:シンプルで高品質な画像が最適;複雑な画像はAIの理解を妨げる
正則化キャプション:これらは必要(sd-scriptのPythonスクリプトを確認したところ、正則化画像セットのキャプションを処理している。興味深いことに、sd-scriptのドキュメントには正則化にはキャプションは不要とあるが、それはクラストレーニングLoRAを指している可能性がある)。自動タグ付け(しきい値0.4で可能)
データセットの品質:キュレーションされた高品質なセット(28枚)、SD自体を活用して高品質な画像を生成する良い例(データセットと正則化セットには常にHighRes Fix & adetailer Fixを使用)
ベースモデル:janku v3は、アーティファクトが少なく、より安定した出力を生成
一般的なトレーニング情報
NOTE:基本情報はlab_8_1を参照(ほぼ同じ)
Lab 1 - 初期設定
ベースモデル:wai v13
データセット:5枚(24回繰り返し × 8エポック)
トリガー・トークン:lr-gotcha, split frame
キャプション:1行
正則化:なし
備考:初期試行
Lab 2 - データセット拡張とエラー
ベースモデル:wai v13
データセット:8枚(24回繰り返し × 8エポック)、新しいデータセット
トリガー・トークン:lr-gotcha, comic
キャプション:複数行(誤ったフォーマット)
正則化:なし
備考:後にキャプションフォーマットのエラーを発見
Lab 3 - 正則化を導入した基礎
ベースモデル:wai v13
データセット:8枚(24回繰り返し × 8エポック)
トリガー・トークン:lr-gotcha, 1boy in frame
キャプション:1行(修正済み)
正則化:lab_8_3_reg(1girl通常、1girlが見つかる)
備考:最初の成功した正則化実装
Lab 4 - トリガー変更と後退
ベースモデル:wai v13
データセット:8枚(24回繰り返し × 8エポック)
トリガー・トークン:lr-gotcha, one inset boy
キャプション:複数行(後退)
正則化:Lab 3と同じ
備考:誤ったキャプションフォーマットに再び戻った
Lab 5 - キャプションフォーマットの修正
ベースモデル:wai v13
データセット:8枚(24回繰り返し × 8エポック)
トリガー・トークン:lr-gotcha, one inset boy
キャプション:1行(再度修正)
正則化:Lab 3と同じ
備考:適切なキャプションフォーマットを再確立
Lab 6 - キー発見('inset'タグ)
ベースモデル:wai v13
データセット:8枚(24回繰り返し × 8エポック)
トリガー・トークン:lr-gotcha, inset
キャプション:1行
正則化:lab_8_3_reg + 1boy pointing
備考:'inset'タグが効果的であることが判明、品質が向上
Lab 7 - 複雑な正則化実験
ベースモデル:wai v13
データセット:8枚(24回繰り返し × 8エポック)
トリガー・トークン:lr-gotcha, inset
キャプション:1行
正則化:データセットタグからスクリプト生成
備考:複雑な正則化画像は品質の悪化を引き起こした
Lab 8 - 正則化キャプションの削除
ベースモデル:wai v13
データセット:8枚(24回繰り返し × 8エポック)
トリガー・トークン:lr-gotcha, inset
キャプション:1行
正則化:Lab 7と同じだが、キャプションなし
備考:依然として最適でない結果
Lab 9 - 個別タグ付けの試み
ベースモデル:wai v13
データセット:8枚(24回繰り返し × 8エポック)
トリガー・トークン:lr-gotcha, inset
キャプション:1行
正則化:Lab 7と同じ、個別にタグ付け
備考:複雑なプログラムによる正則化生成は不安定
Lab 10 - 質の向上によるブレークスルー
ベースモデル:wai v13
データセット:28枚(8回繰り返し × 8エポック)、キュレーション済み
トリガー・トークン:lr-gotcha, inset
キャプション:1行
正則化:スクリプト生成された単純な画像(6カテゴリ)
備考:高品質データセット+シンプルな正則化画像=成功
Lab 11 - ベースモデルの検証
ベースモデル:janku v3
データセット:28枚(8回繰り返し × 8エポック)、Lab 10と同じ
トリガー・トークン:lr-gotcha, inset
キャプション:1行
正則化:Lab 10と同じ
備考:janku v3はより安定した結果を生成
トレーニングプロセスの概要
開始:基本設定
行動:
wai illustrious v13モデルを使用し、小さなデータセット(5枚)、特定のトリガー・トークン(lr-gotcha, split frame)、適切なシングルラインキャプション、正則化画像なしで初期トレーニングを実施。発見:出発点を提供したが、高品質で制御可能なLoRAに必要な(正則化などの)洗練さが不足していた。
初期段階:データセット拡張と重要な前処理エラー
- 行動:データセットを拡大(8枚)し、トリガー語を変更(
lr-gotcha, comic)。
- 行動:データセットを拡大(8枚)し、トリガー語を変更(
基盤:正則化と正しいデータ処理の導入
- 行動:最初の正則化画像(
lab_8_3_reg)を導入。Lab 2で発見されたキャプションフォーマットの問題を修正し、タグをシングルラインでカンマ区切りにした。トリガー・トークンを変更(lr-gotcha, 1boy in frame)。
- 行動:最初の正則化画像(
実験:新しいトリガー、誤った後退
- 行動:トリガー・トークンを
lr-gotcha, one inset boyに変更。しかし、必要なシングルラインフォーマットではなく誤って複数行キャプションを使用。正則化はLab 3と同じ。
- 行動:トリガー・トークンを
方向修正:正しいキャプションフォーマットの再適用
行動:Lab 4のミスを修正し、キャプションを正しくシングルラインでカンマ区切りにした。トリガー・トークン(
lr-gotcha, one inset boy)と正則化は前ステップと同じ。発見:キャプションフォーマットといった技術的要件を守ることが、効果的なトレーニングに不可欠であることを再確認。
キー発見:'inset'トリガー・トークン
行動:観察または仮説に基づき、トリガー・トークンを
lr-gotcha, insetに変更。正則化セットをわずかに拡張。発見:'inset'タグは望ましいビジュアル概念を効果的に捉えることが判明。この発見は、LoRAが意図したスタイルを生成する能力を高め、正確なトリガー語の重要性を示した。また、正則化セットも適切だったため、品質が大きく向上。
実験:自動化された複雑な正則化画像生成
行動:スクリプトによる新しい正則化戦略を実装。スクリプトは、データセット画像タグ(トリガーを除く)をベースモデルに入力して正則化画像を生成し、元のキャプションを保持。
発見:この方法は視覚的に複雑な正則化画像を生成し、不安定さとLoRAの低品質を引き起こした。
複雑な正則化の精緻化(キャプション削除)
行動:Lab 7の複雑な正則化画像をそのまま使用し、それらの関連テキストキャプションを削除。キャプションがノイズを追加している可能性を仮説。
発見:正則化画像のキャプションは重要である。
複雑な正則化の精緻化(個別タグ付け)
- 行動:Lab 7のスクリプト生成複雑正則化画像を引き続き使用。個々の正則化画像に自動タグ付け(しきい値0.4)を適用。
ブレークスルー:データセット品質と簡素化された正則化のシナジー
行動:大規模なデータセットの見直しを実施—28枚に拡張し、ベースモデルと手動編集(Photoshop)で品質を厳選・生成。同時に正則化アプローチを簡素化し、スクリプトで6カテゴリの高品質で単純な構成画像を生成(後処理:HighRes Fix、adetailer)。
発見:高品質でターゲットを絞ったトレーニングデータと、高品質で関連性がありながらシンプルな正則化画像を組み合わせることが、望ましいLoRA品質を達成する鍵となった。
優れたベースモデル(
janku v3)での検証行動:Lab 10で成功した構成(キュレーション済みデータセット、簡素化された正則化、
insetトリガー)を再現し、janku v3ベースモデルを使用。発見:
janku v3モデルは、以前のベースモデルに比べ出力の安定性が向上し、画像アーティファクトが減少(ただし、理由は今のところ不明)。
初期ステップ -- Lab 8_1(基本的なトレーニングパラメータと目的)
目的と発見
目的
これは最初のトレーニング。SDモデルが一般的なアイデアを学習できるかを迅速に確認することを目的とする。
- 答えはYESだが、期待ほど良くない。
データセットの取得方法:
まず、ベースモデルを使って「1girlが驚いている」および「1boyが指差している」画像を2枚生成。
Photoshopで分割パネル付きの画像を合成(注:このバージョンでは
insetとして処理されておらず、1girlの画像を半分に分割し、1boyを中央に配置)。
発見
混乱したレイアウトにより、LoRAは使用中に論理的でない局所的構成を生成する。
他の局所領域(論理的な場合)は「高品質」であるが、この実験段階でのLoRA全体の価値は非常に低い。
これは、私が作成したデータセットが少なくとも一定の品質を持っていることを確認した。
画像が少ない場合は、ベースモデルがよく理解していないタグを使用するのではなく、ベースモデルがすでに「理解している」タグを使用してLoRAトレーニングを誘導すること。
- 'inset'タグがより適切であることを偶然発見した。
この段階のデータセットでは、画像構造が上部(1girl)、中央(1boy)、下部(1girl)と完全に分離されている(私の推測)。そのためモデルはLoRAトレーニング中に上下部をうまく関連付けられず、分割構成画像を生成する際、上下部はしばしば別々の画像かのように見える。
- これが私が'inset'に注目する理由でもある。'inset'は全体の画像でメイン背景を完全に分離しないため、モデルが「背景」全体をよりよく学習できる。
トレーニングパラメータ
# Model & Data
pretrained_model_name_or_path="... /wai_i13.safetensors"
# image count = 5 pics
train_data_dir="... /lora_lab_8_1_gotcha/dataset"
# reg image count = 0
reg_data_dir=""
# Training
max_train_epochs=8
train_batch_size=1
seed=1861
resolution="832,1280"
max_bucket_reso=1280
min_bucket_reso=256
bucket_reso_steps=64
bucket_no_upscale=true
enable_bucket=true
cache_latents_to_disk=true
persistent_data_loader_workers=true
shuffle_caption=true
caption_extension=".txt"
keep_tokens=2
max_token_length=225
# LoRA Network
network_module="networks.lora"
network_dim=16
network_alpha=8
# Optimizer & LR
learning_rate=0.0001
unet_lr=0.0001
text_encoder_lr=0.00001
optimizer_type="AdamW8bit"
lr_scheduler="cosine_with_restarts"
lr_warmup_steps=0
lr_scheduler_num_cycles=1
# Precision & Device
mixed_precision="bf16"
xformers=true
lowram=true
# Saving & Logging
save_model_as="safetensors"
save_precision="fp16"
save_every_n_epochs=2
log_with="tensorboard"
log_prefix="lora_lab_8_1_gotcha--"
output_name="lora_lab_8_1_gotcha"
# Loss
prior_loss_weight=1





