File size: 5,990 Bytes
3ed4614 412d36f 3ed4614 a89fb07 3ed4614 e66f41d 3ed4614 412d36f 3ed4614 e66f41d 3ed4614 7629de6 e66f41d 3ed4614 08163b5 7629de6 3ed4614 e66f41d 280c46b 3ed4614 e66f41d 3ed4614 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
# 背景LoRA
既存ののモデルのプロンプトで生成できない場所や風景を学習で生成できるようになったらいいなという実験です。
# karaokeroom.safetensors
[<img width="480" src="https://i.imgur.com/hclI0vj.jpg">](https://i.imgur.com/hclI0vj.jpg)
[<img width="480" src="https://i.imgur.com/8H3c7eE.jpg">](https://i.imgur.com/8H3c7eE.jpg)
カラオケ屋さんの部屋の雰囲気を学習したLoRAです。
Loraを読み込ませて、プロンプトに **karaokeroom** と記述してください。
プロンプトに、1girl, karaoke, microphone, 等とあわせて記述していただくとカラオケを歌ってる感じの絵ができます。
※当LoRAを適用すると人物の描画や画風に影響が生じるようです。LoRAを適用するWeightを調整することで画風への影響を抑えられます。
影響が気になった場合は \<lora:karaokeroom:1\>ではなく\<lora:karaokeroom:0.6\>といった感じで調整して使ってみてください。
※karaokeroom, 1girl, karaoke, 等のプロンプトを書いても、部屋の風景のみで人物がうまく描画されないことがあります。
ガチャ要素があるのと、モデルによってはうまく働かない場合があるようです。その場合は根気よく何枚か生成してみるか、違うモデルを使ってみてください。
## この実験をやってみた動機
たとえばプロンプトに shibuya,city, と書くと渋谷っぽい風景の絵を描いてくれます。これはモデルが「渋谷」という概念を知ってるという事だと思います。
しかし、 Nishinomiya と書いても西宮っぽい風景の絵を描いてはくれません。これはモデルが「西宮」という概念を知らないという事だと思います。
最近、LoRAという手法でスペックが低いパソコン(GPU)でも追加学習が出来る方法が普及してきました。既存のモデルでは描けないキャラクターや衣装等を学習させている方がたくさんいらっしゃいます。
そこで自分は、風景の写真を何枚か学習させれば、その「場所」の概念を学習してくれるのではないかと考えました。
カラオケ店の部屋の写真を20枚程用意して、WD14-taggerでタグ付けを行いました。出来たtxtファイルの全ての先頭の位置に karaokeroom, という単語を追加しました。
学習前提のモデルは karaokeroom という概念を知らないので、この学習によって karaokeroom という新しい概念を獲得してくれると想定しました。
実際に学習を実行して出来上がった当LoRAを読み込ませると上記の karaokeroom というプロンプトでカラオケ店の部屋っぽい絵が生成できます。
場所の概念を学習させる実験は成功ではないでしょうか?
LoRAでうまく場所の概念を学習できる方法が確立できれば日本の様々な風景を学習させることで身近な場所のイラストが生成できるようになると思います。これはその第一歩です。
## 問題点、今後の課題
カラオケ店の風景は再現できるようになりました。が、当LoRAを適用してカラオケを歌う女の子の絵を生成すると、人物の描画や画風に影響が生じる場合があります。
これはおそらく場所の概念だけではなく、素材写真の画風等も学習してしまったものだと思います。
現状はLoraを適用するWeightを下げることで影響を軽減できますが、学習方法やLoRAの適用の仕方で影響を軽減することが出来ないか?と考えています。
・U-net層でWeight調整することで影響を押さえられる?
実は僕も全然よく分かってないのですが(!)階層マージ(Marge Block Weighted)で多くの方が様々なモデルマージに挑戦した結果、絵を生成するU-netの各レイヤー層を調節することで描画に様々な調整ができる(?)ことがわかってきました。
例えば「INの上層はリアル調、INの下層がanime調を担当しているのではないか?」、「M_00は全体にキャラクターや服装・背景等に大きな影響が出る」、「OUT上層は、主題以外の表現 (例えば背景)に影響を及ぼしている」、「OUT04,OUT05,OUT06あたりはめっちゃ顔に影響ある」等色々な説があります。
上の方で書いたkaraokeroom:0.6といった指定はU-net全体まるごとで影響を下げる設定になると思うのですが(多分)もし背景に大きく関与しているU-net層が分かればそれ以外のU-net層への関与を抑えることで既存モデルの人物描写と追加学習背景LoRAがうまく共存できるのでは?と考えられます。
実際にU-net層別にWeightを調節できるScripts(sd-webui-lora-block-weight:https://github.com/hako-mikan/sd-webui-lora-block-weight )を使って色々な数値を調整したXY Plot画像等を作成してみたりして調べていますが、現状では「何もわからないことがわかった」という感じではっきりしたことは分かっていません。
・学習用素材の写真をうまく調整する
・学習時のキャプション(タグ)の付け方などで、画風を学ばないようにできないか?
・正則化画像を用意することで何かうまく学習の調整ができるのでは?
等、いろいろな案が考えられると思いますが…まだまだ試行錯誤の段階で情報が足りず良い解決方法は得られていません。
なかなか難しそうですが、うまく場所の概念だけ覚えさせる方法が出来たらいいですよね。
|