Textual Inversionとは?

Last-modified: 2023-03-11 (土) 21:35:56

rentryから以降中未整理

TI(Textual Inversion)について(※すごい適当に書いてます。)

TI(Textual Inversion)とは、短縮詠唱みたいなものです。
自分の任意の画像を読み込ませると、その画像内に存在する特徴をモデルが知っている範囲でまとめて学習して一つのファイルにしてくれるものです。
なので、元々のモデルが知らないことは学習できません。
画風の再現などに優れているらしいです。

TIファイルは拡張子が2種類あります。  「.pt」「.bin」
AUTOMATIC1111(ローカル版)においては「embeddings」フォルダにしまうだけです。※使う場合にはファイル名をpromptに入れると呼び出せます。

TI学習させる方法は
・Colab
・ローカルで環境を構築する
・AUTOMATIC1111(ローカル)
などの方法で学習ができます。

学習に関しての正解は現在研究中のため、良い学習ができた人は共有していただけると研究が捗ります。

基本的にTIファイルは学習時に使用されたモデルでの機能を想定しています。**

別モデルで動かした場合でもよい結果が得られる場合もありますが、基本的にはうまくいかないと思ってください**

 過去のとしあきTIPS紹介
 >質問なんだけど Tiの Initialization textって
 >例えば オリキャラの名前を書いておいたらそのままでも女性扱いしてくれるのかな
 >なんかテクスチャみたいな感じで表示されやすくなってるんだけど
 >girlとか服装とかタグ入れて置いたらいろいろ良かったりするのかなと
 >画像のはオリキャラの学習中の画像
 自分なりに資料とか読んでの解釈なんで間違ってたら詳しい人訂正入れて欲しいんだけど
 モデルデータには学習した画像の特徴値がタグとセットで格納されてて
 例えばdanbooruでセーラー服、緑髪、ロリとタグのついた画像を学習させたらその画像の特徴を3つのタグとその強さをベクトルとして登録してる
 ちょうど服装、髪色、年齢の軸のグラフに点を打つ感じ
 実際はタグの種類はたくさんあるんで3次元には収まんないんだけど

 で、TIはモデルデータと合わせて画像とタグを指定するけど、それはこれから学習させる絵はそのモデルのなかで指定したタグの点に入るものですよと教えてる
 だから学習時のモデルデータの指定が重要だし、そのモデルデータに存在しないタグを入れるとどこにも引っかからない弱い点になるんで使用は推奨されてない
 そんな認識です

**TIファイルが拾えるところ**

Stable Diffusion Concepts Library(個人が学習させたものが多く公開されています。エロ系はほぼ無いです。あっても消えるはず)
 https://huggingface.co/sd-concepts-library
list of Textual Inversion embeddings for SD
 https://rentry.org/embeddings
anon's embeddings - エロ・アニメ絵師.
 https://mega.nz/folder/7k0R2arB#5_u6PYfdn-ZS7sRdoecD2A
viper1 - エロ・ケモ・ホロライブ
 https://gitgud.io/viper1/stable-diffusion-embeddings
cattoroboto ホロライブ
 https://gitlab.com/cattoroboto/waifu-diffusion-embeds
16777216c 絵師
 https://gitlab.com/16777216c/stable-diffusion-embeddings

**GPUが無い場合のTIファイルを作りかた**

1.Colabノートブックを入手する
匿名としあきがうまく翻訳などしてくれた↓のファイルを入手します。(再配布可と言ってました。)
https://firestorage.jp/download/be0d2a125303a4f1a7a778258c62d86d5b8e3605
https://dec.2chan.net/up2/src/fu1522064.xxx
↑上記リンクはどちらも同じです。 たぶんあぷ小のが早く期限切れる。(2022/10/10書きこみ)

2.Colabノートブックをアップロードする
 https://colab.research.google.com/ へ行きます。
 「アップロード」を選択します。
 『「ファイルを選択」選択されていません』のところへダウンロードしたファイルをドラッグ&ドロップします。
 しばらく待つとファイルが開かれます。

3.学習させる
 基本的にColabに書いてあるとおりにぽちぽちしていくだけで大丈夫なはずです。
 モデルを学習させる際に使うckptファイルはあらかじめGoogleDriveへアップロードしておきましょう。
 Googleドライブとかあんま使わんし、置いてもckptのファイルのパスがわからんわって場合
 ```
 "/content/drive/MyDrive/sd_text_inversion/sd-v1-4.ckpt"
 ```
 はドライブ⇒sd_text_inversionの中にckptファイルを入れている&そのファイルの名前は「sd-v1-4.ckpt」という意味です。
 なので、ドライブまっさらの状態で置いた場合は
 ```
 "/content/drive/MyDrive/sd-v1-4.ckpt"
 ```
 となります。
 waifuで学習させる方が多いと思いますので、「sd-v1-4.ckpt」を「wd-v1-3-float16.ckpt」や「wd-v1-3-float32.ckpt」などに書き換えましょう。

 ※※過去に語られたTIPS※※

 TI学習の話
 >TI進むと左右反転繰り返して学習するせいか非対称の髪の分け目がめっちゃハゲに変わる
 >設定が間違ってる気がするんだけどどこ変えたらいいか分からない…
 yamlで指定してるpersonalized.pyの80行目付近にあるflip_p=1.0で100%反転 0.0で反転しない、
 もしくはpersonalized.py内で「transforms.RandomHorizontalFlip」を検索してp=の値を直接指定

 Ti素材
 ああーやっぱそうだ
 学習用の素材512x512にするとき白埋めでも黒埋めでもアルファ値0にしたら二分割画像とかにならないでちゃんと学ぶんだな…
 割と初歩目のミス…
 逆にパッチワーク的なタイリング的なパターン学習させたいなら必要分以外の箇所をアルファ255で埋めればいいってことだな
 >もしかして白を背景として誤学習しない感じ…?
 左学習して現時点の出力結果が右で今のところ黒背景としては扱われてないけど
 いわゆる白背景の立ち絵に黒塗りしてどうなるかはわからない

 TIファイル名
 >TIの学習用素材ってファイル名もしっかり学習してほしい要素を記した内容にしたほうがいいんです?
 ファイル名がプロンプトの一部になる場合逆効果になるとか聞いた
 かわいい○○を学習させようとすると
 「○○は素では可愛くないんだな!」と勘違いすると
 

ファイル名とpreview promptを同じにしててそこにuncensored入れてるんだけど

一応学習画像はすべて無修正(というかアレ自体描かれてないのもある)けど駄目なの?

概念的にはファイル名=画像になるように学習するからもともとの重み的にuncensoredの文字と無修正画像の概念的な結びつき精度が低い場合とか学習画像がuncensoredとは関係ない画像の場合にファイル名にuncensored入ってるとuncensoredの逆を学習しようとしちゃう…かも
一個前のスレでもほぼ同じこと書いたけど
学習時のpromptで生成した画像と教師画像との差異から誤差をとって学習してる
なので、uncensoredを学習promptに入れた場合uncensoredは学習の対象外になりやすいと推測できる
よって、強制的にuncensored化したいのであれば、そのワードは不要
もしくは逆にcensoredを入れることでより強い強制力をもつ学習となる可能性が高くなる
この辺ごっちゃになりやすいかもしれないけど学習時のpromptは教師画像の要素のうち”学習させたくない要素”であるべきなんだよ

__
20000StepsまでDeppdanbooruで機械的にプロンプトを付けた特定絵師データセットでHNを学習させた結果をStep別とStr別で
Strは単純に元のkvへの寄与を表してるらしいけど下げると発散してるHypernetでも思ったより正気を取り戻してる
本格的に発散した16000あたりからはそれもかなり無意味になってる印象
まんぐり返し的なポーズが多いデータセットで学習したんだけどポーズの影響が強く出てるのが気になってデータセットを見返してみたらDeepdanbooruはキャラの特徴タグは拾いがちだけどポーズ関係のタグはあまり拾ってくれないのでその辺が学習結果が強く出てる原因な気がする
究極的には精度よく特定概念を学習させたいとなると自分で学習プロンプト書くべきかな
HNはほとんど画像に基づいてPromptを書き換えているようなものだから画風にもキャラにもシチュにも効くけど特定の概念を学習するのは骨が折れそう

ここから分かるけどキャラだけHNで覚えさせたいなら変なポーズとってる画像は弾いてなるべく素直なポーズだけで学習した方が学習効率と概念としての出来上がりの粒度は良さそう
___