概要
LECOとは
https://github.com/p1atdev/LECO
Low-rank adaptation for Erasing COncepts from diffusion models.
LoRAメソッドの一つ。事前学習モデルのプロンプトを強めたり、弱めたりできる。
具体的な仕組みとしては、事前学習モデルの持つ任意のワードにピンポイントで働きかけて
そのニュアンスや方向性、他のワードとの関係性のみを変化させる。要はプロンプトの解釈に限定した補習。
既存の学習方式との違い
LoRAとの違い
- より特定のプロンプトに特化した強弱調整ができる。
導入方法
配布元の説明を参照。
https://github.com/p1atdev/LECO
スペック要件
- 学習
- 公式推奨VRAM8GB以上
- 学習データの使用
従来のLoRAを動かす環境があればOKです。
導入手順
学習方法
学習用の設定ファイルのうち、prompts.yamlの各項目についてわかる範囲でまとめ。加筆・修正求む。
prompts.yaml
| 項目 | 備考 |
|---|---|
| - target: "文字列" | LECOの対象となる要素を指定する。 |
| positive: "文字列" | targetから遠ざけたい要素を指定する。空白の場合、targetの文字列が代入される。 カンマを挟んだ複数ワードの列挙だけでなく、長文で記述しても有効。 これをプロンプトとして仮の教師画像が生成される。(多分) |
| unconditional: "文字列" | positiveに引っ張られたくない(元の相関性を維持したい)要素を指定する。 いわゆる「プロンプトに引きずられる」を軽減ないし防止するための項目で、 役割としては正則化画像に相当する。 |
| neutral: "文字列" | targetに対する原点となる要素を指定する。 LECOはtargetをpositiveから遠ざけてneutralに近づけようとするが、 通常はこれが空白となっているため、無に近づける=結果的に概念が消去される という仕組み。 |
| action: "erase" | erase、enhanceのどちらかを指定する。 eraseの場合は消去、enhanceの場合は付与になる。 |
| guidance_scale: 1.0 | 要素に対するLECOの作用倍率。 要素ごとの元々の利き具合が乗算されるため、適性値はまちまち。 |
| resolution: 512 | 内部生成される仮の教師画像の解像度。 |
| dynamic_resolution: false | 通常はfalse。上で指定したresolutionの値をランダム化する機能。 trueの場合、resolutionの値を100%とした一定範囲内で変動する。(多分) |
| batch_size: 2 | 仮の教師画像の同時処理数。 |
なお、ここでの近づける、遠ざけるという表現はすべてeraseを前提とした表現であり、
enhanceで学習させる場合は方向性が逆転します。
学習データの使い方
LoRAと同じように使う事で拡散モデルから概念を消去する。要するにその概念が出にくくなる。
消去効果なので、マイナスで使うと反対にその学習された内容が出やすくなる。
大半のLECOは消去(erase)を目的として作成されているものの、
稀に概念の変化や付与(enhance)を目的として作成されているものも存在する。
どちらもプラスとマイナス両対応で正常動作してしまうため、説明書きがあったら事前に読むことをオススメします。
参考文献
コメント・指摘・助言
- 素材不要なのでめっちゃお手軽で楽しい -- 2023-07-23 (日) 15:18:56
- 調整の余地がパラメータだけなのである意味LoRa以上にブラックボックスだけどお手軽で楽しいね…元々ある概念だからか重ね掛けしても崩壊しにくいのもいい -- 2023-08-02 (水) 22:44:05
- 設定はそうゆう意味だったか。理解が曖昧だったから助かる -- 2024-01-11 (木) 17:35:25
- 特に身体系の単語を含むタグを強調するとそのパーツのドアップになりやすい。例えばarms behind headを強調しようとするなら、arms,headをunconditionalに入れるといい。またdanbooruタグを入れる場合はより軽減効果が高い…が、大抵近辺のタグをしらみ潰しにすることに。 -- 2024-02-04 (日) 03:05:18
(Tips)