LECOの学習を高速化する

 こんにちは。READMEで書くには長そうだったのでこっちに書いてみます。Stable Diffusionの概念を消す/強調するLECO(Low-rank adaptation for Erasing COncepts)の学習時間を短縮する方法について解説します。

 LECOはPlat氏によって提案された学習手法で、Stable Diffusionのモデルから概念を除去する手法ESDをLoRAに落とし込んだものです。LECOで作られたLoRAはモデルから特定の概念を消去できるほか、LoRAのウェイトをマイナスにすることで概念を強化することが可能です。この手法の特徴はLoRAの学習において教師画像が必要ないことです。モデル自体に画像を生成させ、それを学習するわけですね。

 今回はこのLECOの学習過程を改良し、学習時間を加速させてみたいと思います。それではLECOについておさらいしましょう。LECOではふたつ(学習時には4つ使っているけれど大事なのはふたつ)のプロンプトから作り出されるノイズ予測の差を比較してふたつのプロンプトの差に相当するLoRAを学習します。このとき、学習しているLoRAを使って生成を行い、その途中でふたつのプロンプトのノイズ予測に分岐をして学習を行います。

 あるステップにおいて、「miku hatune」と「」というふたつのプロンプトで作成した画像を比べて学習を行います。これにより、「miku hatune」によって生成された画像が「」によって作られた画像に近づくよう学習が行われます。結果として、「miku hasune」と入力したときに、「」から生成される画像が生成されるLoRAが生まれます。これは「miku hatsune」の概念を消去することになります。

 さて、デノイズの課程ではU-Netにノイズとプロンプトを入力しそのステップでの予測ノイズを取得しノイズから差し引くことでステップを進めます。

 LECOでは生成の過程と、デノイズの課程でかなりの時間を取られてしまいます。ここを全部取っ払ってしまえばいいのではと思って試してみました。

 今回提案するinstant-LECO(iLECO)では生成の過程及び、negative, neutral promptの計算を省略します。その上で、original prompt及びtarget promptから生成される予測ノイズ同士を比較し学習します。これにより、学習時間を数十倍速くすることが可能になりました。これまで1~2時間かかっていた学習が数分で終わります。

 では実際に動作するのか試してみます。初音ミクさんはどのモデルでも「miku hatsune」と入力するだけでほぼ完全な姿で現れます。ちょっと働き過ぎですね。普通の女の子に戻してみましょう。original promptに「miku hatsune」、target promptに「girl」と入力してiLECOを作成してみます。

 できましたね。プラスの強度にするとミクさんが普通の女の子に変わっています。目の色が変わっていないところが普通の女の子に戻った感があって趣深いですね。一方でマイナスにするとミクさんの要素が強化されて最終形態のようになってますね。

 別シードにしてみましょう。

 別シードでは別なスタイルの女の子に戻りましたね。別な未来を見ている世でいいですね。

 さて、今回は「miku hatsune」→「girl」で試しましたが他はどうでしょうか。

 「ミクさんだと思った? 残念! さやかちゃんでしたLoRA」ができました。まぁこんなにうまくは普通いきません。この画像をだすのに結構時間が掛かりました。というのも、ミクさんは完全な状態で出てきますが、さやかさんになると曖昧に学習されているので、ショートカットで深い青の髪と衣装という情報はあってもそれ以上となると難しいです。iLECOの弱点としてモデルが知らない情報はどうにもならないと言うところがあります。さやかさんだと色調が似ているので他の方に変わってもらいましょう。

「電子の歌姫だと思った? 残念! 銀河の歌姫でしたLoRA」ですね。ランカさんになると言われないと判別できないレベルになってしまいます。こんなの作っても役に立たないのでもう少し役に立ちそうな物を作ってみましょう。

  おわかりいただけただろうか。髪の長さが変わっているのです。これはOriginal Promptに「long」、Target Promptに「short」を入れています。髪の長さを変えることができるわけですね。これはLECOでも作られていたスライダーLoRAと言う奴です。このシードではうまくいきましたが効かないときもあります。これは普通のpromptでも同じですね。

 と言うわけで、LECOの学習を高速化したiLECOの実験でした。学習はWeb-UIで行えます。https://github.com/hako-mikan/sd-webui-traintrain


この記事が気に入ったらサポートをしてみませんか?