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の入力で表現できる)要素しか引き出せない。
具体的には下記のような用途が想定される。
常にPromptに入れる要素をモデルにマージして入力を省く
Promptに入れると意図しない影響がある要素(色など)の入力を省く
Promptが内包している好ましくない要素を消去する
絶対に見たくない要素をモデルから抹消する
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をloliでenhance)
- target: "1girl"
positive: "1girl, loli"
unconditional: ""
neutral: ""
action: "enhance"
guidance_scale: 1.0
resolution: 512
batch_size: 2
LoRAの強度によって年齢(顔のバランスや頭身)を変化できる。
LECOのここがすごい
冒頭にも書いたが、「教師データを必要としない」という点が非常に大きい。
画像の作成や加工、キャプショニングといった工程や、教師データが持つ不要な影響を排除する苦労とは無縁である。
また、パラメータさえ同じなら(学習対象モデルによる差異はあるものの)同じようなLoRAを作成できるので、作成したファイル自体を渡さずとも、Promptを共有するような感覚で学習成果を共有可能な点も良い。
キャラLoRAとの併用に関する可能性(妄想)
キャラクターLoRAには一つのジレンマがある。
学習させたい要素をキャプショニングから消す:Promptに何も入力せずともキャラクターが再現できるが、要素が残したキャプションで吸収しきれずに再現性が下がる
学習させたい要素をキャプショニングに残す:再現性が上がるがPromptにすべてのキャプションを入力しなければならない
下段はPrompt欄のトークン数を圧迫するという問題もさることながら、目の色などをPromptに入れると服の色などにも伝染してしまうという問題がある。
ではキャラクターに必要なキャプションを1girlにenhanceしたLoRAを組み合わせたら?というのが今の検証対象です。
【追記】妄想じゃなかった
横軸:1girlにキャプションenhance LECO
縦軸:キャプション並べたキャラLoRA
以上、おしまい