見出し画像

Today's recommend is LECO

LECOという新しいLoRAの作成方法が出たので色々遊んでみた話。
正確にはLoRAの作成方法という括り方はよろしくないと思うけど、使用感だけで言うと「教師データの用意が必要なく、不要な影響が発生しない代わりに、学習対象モデルが知らない要素は出せないLoRA」といった感じ。
ともかく、新しい技術とVRAM 8GBで使える実装をしてくれたことに感謝いたします。

環境構築

基本的に公式の記事に従って必要なものを落とせばよいのだが、Pythonわからん故につまづいた箇所をメモ書き程度に残しておく。

git clone https://github.com/p1atdev/LECO
cd LECO

ここまで公式通り。

python -m venv venv
.\venv\Scripts\activate

pip install torch torchvision --index-url https://download.pytorch.org/whl/cu118
pip install xformers 
pip install -r requirements.txt

pip install omegaconf

公式はcondaを推奨しているが、venvでやったので上2行を変更。
omegaconfが足りないので最終行に追加。

venvで環境構築した場合はアクティベートしてから実行すること。

.\venv\Scripts\activate
python ./train_lora.py --config_file "./examples/hogehoge.yaml"

パス指定に使うのは「/」であって「\」ではない(重要)
学習対象モデルの指定はフルパス書けばローカルも参照可能、一部のモデルでは謎のエラーを吐くらしい、Toolkit通すと直るとのこと。
学習対象モデルへの依存が強いので、普段使用しているモデルで作った方が良いと思う。[要出典]

公式のexamplesフォルダ内にあるconfig.yamlを使う場合、パスが誤っているので修正すること(他のcat_ears_config.yaml等も同様)

prompts_file: "./prompts.yaml"
↓
prompts_file: "./examples/prompts.yaml"

Triton絡みのエラーが出ても動くので、学習が走らないのはコレのせいではない。

何に使うか

学習データを学習対象モデルに作らせるので、学習対象モデルが知っている(Promptの入力で表現できる)要素しか引き出せない。
具体的には下記のような用途が想定される。

  1. 常にPromptに入れる要素をモデルにマージして入力を省く

  2. Promptに入れると意図しない影響がある要素(色など)の入力を省く

  3. Promptが内包している好ましくない要素を消去する

  4. 絶対に見たくない要素をモデルから抹消する

1と2はenhance、3と4はeraseで実現できる(はず)

実行結果

1girlをエルフにする(1girlをpointy earsでenhance)

- target: "1girl"
  positive: "1girl, pointy ears"
  unconditional: ""
  neutral: ""
  action: "enhance"
  guidance_scale: 1.0
  resolution: 512
  batch_size: 2

エルフ耳に関するPrompt一切無しでエルフ耳になるLoRAが完成。

1girl, upper body, simple background, armored dress

年齢スライダー(1girlをloliでenhance)

- target: "1girl"
  positive: "1girl, loli"
  unconditional: ""
  neutral: ""
  action: "enhance"
  guidance_scale: 1.0
  resolution: 512
  batch_size: 2

LoRAの強度によって年齢(顔のバランスや頭身)を変化できる。

1girl, upper body, simple background, bikini(影響は無いがキャラLoRAを併用している)

LECOのここがすごい

冒頭にも書いたが、「教師データを必要としない」という点が非常に大きい。
画像の作成や加工、キャプショニングといった工程や、教師データが持つ不要な影響を排除する苦労とは無縁である。
また、パラメータさえ同じなら(学習対象モデルによる差異はあるものの)同じようなLoRAを作成できるので、作成したファイル自体を渡さずとも、Promptを共有するような感覚で学習成果を共有可能な点も良い。

キャラLoRAとの併用に関する可能性(妄想)

キャラクターLoRAには一つのジレンマがある。

  • 学習させたい要素をキャプショニングから消す:Promptに何も入力せずともキャラクターが再現できるが、要素が残したキャプションで吸収しきれずに再現性が下がる

  • 学習させたい要素をキャプショニングに残す:再現性が上がるがPromptにすべてのキャプションを入力しなければならない

下段はPrompt欄のトークン数を圧迫するという問題もさることながら、目の色などをPromptに入れると服の色などにも伝染してしまうという問題がある。
ではキャラクターに必要なキャプションを1girlにenhanceしたLoRAを組み合わせたら?というのが今の検証対象です。

【追記】妄想じゃなかった
横軸:1girlにキャプションenhance LECO
縦軸:キャプション並べたキャラLoRA

1girl, upper body, simple background
1girl, upper body, simple background,

以上、おしまい


いいなと思ったら応援しよう!