追加学習ってなんぞや
モデルを売る(これは大丈夫だよね?)というマネタイズが主流になる可能性もあるし絵の幅が出ると思うので知りたい
学ぶ前の終着点(と思うもの)
いくつか好きな絵柄に特化させたモデルを持つ
いい絵(基準わからんけど)を出せる汎用的なモデルを持つ
Dreambooth調べてたらすんごい詳しいのがあった
追加学習というのは大まかに説明すると、誰かほかの人が学習させた学習済みモデルに対して自分好みに変更したり、学習させたりするという手法
転移学習 (Transfer Learning)
蒸留 (Distilation)
ファインチューニング (fine tuning)
その他の学習法
Dreemboothはここ
一般的なディープラーニングの知識
まじで説明がない、wogikaze.icon
2010年の説明では意味が広くて曖昧な言葉と言われている基素.icon
一般的なディープラーニングの知識
すでにあるモデルを使って学習する?
こちらも情報がなく困る
他のモデルで生成した画像を使ってファインチューニングするのもこちらに入る?
漸進的蒸留
スマホやIot機器でAIを動かしたくても、モデルはサイズが巨大過ぎて扱えない
e.g. GPT-3は45TBある
ので、様々な方法で圧縮する
ファインチューニング
追加学習したいデータを大量に持っていてるときにファインチューニングを使うと過学習を起こしにくくい
でtextual inversionとhypernetwork、DreamBoothみたいな調節してるやつがファインチューニング
https://gyazo.com/34786ae93d38ddb691e0b949ec748b41
・DreamBoothは少数の画像から新しい概念をタグとして学ばせる事が可能
・textual inversionと同等だが全体を最適化するためにより強力でメモリ喰い
・DreamBoothの省メモリ実装は推論だけなら6GB程度のメモリで動作可能
タグに結びつける感じかなwogikaze.icon
textual inversionも同じことやってるの?
textual inversionは画像からstable diffusionに新しい概念を学ばせる手法
なるほど、同じだ
モデルが公開されていたらできるってことかな
いやこれがそもそもDreamboothされたモデルだ、ならできそう
(ソース確認してみると)少数概念を覚えるために特化したファインチューン手法の一つとして提案・実装された。基本的には少ない概念を覚えるのには向いており(当時としては)小コストで使える技術だった。morisoba65536.icon
ただ、モデル全体を弄ってしまう都合上軽いと言っても大掛かり。更に軽量化の為に通常のファインチューンより尖り過ぎており汎用的な学習には向かず、より低資源で学習可能なLoraが登場することでほぼ役割を終えてしまった…LoraはアダプターとしてhyperNetwork代わりとしても、汎用的なチューンとしても、DreamBooth的な特化学習も全部できてしまうので…
Textual inversionとHypernetwork,DreamBoothの違いがよくわからない
Textual Inversion Hypernetwork
覚えさせたいタグ Initialization Text に入れる タグファイルに書く
覚えさせたくないタグ タグファイルに書く タグファイルに書く
使用法 embedding 名をプロンプトに入れる キャラ/オブジェクトに関係のあるタグをプロンプトに入れる
Textual Inversion も Hypernetwork も Aesthetic Gradients もデフォルトの状態で出せないような絵は出力できない。
画像生成AIのStable Diffusionに数枚の画像を学習させ、AIモデル全体を再学習させて調整(ファインチューニング)を行う手法
無限ループものかw?wogikaze.icon
ここも後に引用されるのであった…nomadoor.icon
指定したワードで背景も変えられる
シンプルに書くと(かなりコンピューター側に寄った)プロンプトの塊をファイルにまとめてモデルに渡すのがTextual Inversionの仕組み。例えば「ピンク髪、Tシャツ、斜めアングル状態(斜め具合の角度、見たいな言語化しにくい所も学習できる)」と言ったプロンプトの塊を渡してる感じmorisoba65536.icon
例えば某ぼっちちゃんを(ぼっちちゃん未学習で)知らないモデルに学習させると「ピンク髪ロング、ピンクジャージ、顔色が悪い、etc...」といった形で覚えれるが、ゼリーみたいなヘアゴムは概念的に持ってないので学習されない…見たいな
画風ファイルを追加することで、元のモデルにはない画風や概念・キャラの特徴などを追加することができる。
本来はモデル自体を変更するためのファインチューンの一種…として作られたのだが、「追加学習した結果を(元ファイルに手を加えずに)外に保存する」「モデルに適用するコストは低い(ので生成する直前にマージできる)」と言った特徴からモデルの拡張機能見たいな使われ方もしている。
と言うよりそっちが主な使われ方になってる。
ものすごく乱暴に書くと「ファインチューニング(DreamBooth)を【ファイルに直接書き込まず差分パッチとして学習】し【学習する層を絞ることで学習量自体も減らす】」もの位の認識。
一種の差分パッチなので実際に2つのモデルからLoraを作るスクリプトなんかも存在している。
学習時の次元数とかはどのくらいの精度で差分を作るか、といった感じ。単一の概念を覚えさせるだけなら低次元で良いが適用時にハンコみたいに強く効いてしまうなどの副作用も起きやすくなる…ようなイメージか(必ずそうなるわけでもないので断言はしきれない)
ハッキリしてる利害は高次元ほどファイルサイズはデカくなる、それも基本的には倍々に。そのため配布のキャラLoraとかは比較的低次元なものが多い傾向にある。
差分パッチだけど適用のコストが低いため、画像生成のタイミングでモデルに対し適用できることもありキャラ単独学習からそれなりに大規模な追加学習まで幅広く使われてはいる。
とにかく派生技術が多く詳しく調べようとすると割とカオス
有名な(先にも書いた)kohya-ss氏のスクリプトも実は結構派生型のLoraで元論文から結構手が加わってるらしい。性能が良かったためか画像生成においては事実上のデファクトになっている。 データセットを集める
マージする
結局やってみなくちゃわからない、ということで
TI: 入力されたプロンプトを一定の方向に曲げる、みたいなイメージ。新しいものを覚えられているようで言葉の方向性を捻じ曲げてるだけだから覚えていない
DB: AIの中の言語を処理する部分と画像を処理する部分に同時に新しい要素を覚えさせる、新しいものを覚えられるがckptファイルごとになるので色んなとこで重い
LoRA: DBから学習させた要素だけ別ファイルになってる感じ、かるいしDBと同じ動作ができる
韓国 HN,DBが強い
中国 TIが強い
日本 層別が強い
Aesthetic Gradients:
生成物の雰囲気をモデルが知ってる範囲で新しい特定概念に寄せる (画風向け / コスパ重視)
メリット: 計算量少ない
Textual Inversion:
生成物をモデルが知ってる範囲で新しい特定概念に寄せる ( キャラまたは画風向け )
メリット: プロンプトに入れるので 組み合わせしやすい + 新しい単語を覚えさせられる (VRAM 8GB)
Hypernetwork:
モデルそのものを変えずに 新しい特定概念に寄せる ( 画風向け / コスパ重視)
メリット: プロンプトに入れず反映される(キーワードに含まれる) (VRAM 8GB)
Dream Artist または Advance Prompt Tuning ( キャラ向け )
モデルそのものを変えて 新しい概念に寄せる (画像1枚版)
メリット: 学習させる画像枚数が少ない
Dream booth ( キャラ向け )
モデルそのものを変えて 新しい概念に寄せる
メリット: 再現度・成功率・安定感が高い