generated at
追加学習ってなんぞや
追加学習について、Dreamboothとかファインチューニングとかいわれてるけど結局どんなことしてるん?と気になったwogikaze
モデルを売る(これは大丈夫だよね?)というマネタイズが主流になる可能性もあるし絵の幅が出ると思うので知りたい

学ぶ前の終着点(と思うもの)
いくつか好きな絵柄に特化させたモデルを持つ
いい絵(基準わからんけど)を出せる汎用的なモデルを持つ

Dreambooth調べてたらすんごい詳しいのがあった
>追加学習というのは大まかに説明すると、誰かほかの人が学習させた学習済みモデルに対して自分好みに変更したり、学習させたりするという手法
転移学習 (Transfer Learning)
蒸留 (Distilation)
ファインチューニング (fine tuning)
その他の学習法
Dreemboothはここ

一般的なディープラーニングの知識
まじで説明がない、wogikaze
2010年の説明では意味が広くて曖昧な言葉と言われている基素

一般的なディープラーニングの知識
すでにあるモデルを使って学習する?
こちらも情報がなく困る
他のモデルで生成した画像を使ってファインチューニングするのもこちらに入る?
漸進的蒸留
https://xrg.hatenablog.com/entry/2022/11/29/182524Stable diffusion 2.0で使われた漸進的蒸留をなんとなく理解したような気がする可能性があるかもしれない。
モデル圧縮のひとつ
スマホやIot機器でAIを動かしたくても、モデルはサイズが巨大過ぎて扱えない
e.g. GPT-3は45TBある
ので、様々な方法で圧縮する
Pruning(枝刈り)
Quantize(量子化)
Distillation(蒸留)

ファインチューニング
>ファインチューニングでは学習済みモデルのネットワーク全体 (もしくは大部分) の重み全体を学習させます。https://note.com/te_ftef/n/n48926bfae747
>追加学習したいデータを大量に持っていてるときにファインチューニングを使うと過学習を起こしにくくい
でtextual inversionとhypernetwork、DreamBoothみたいな調節してるやつがファインチューニング
DiffusersベースでStable Diffusionをfine tuningするhttps://note.com/kohya_ss/n/nbf7ce8d80f29

https://www.reddit.com/r/StableDiffusion/comments/10cgxrx/wellresearched_comparison_of_training_techniques/Well-Researched Comparison of Training Techniques (Lora, Inversion, Dreambooth, Hypernetworks)


https://webbigdata.jp/ai/post-15118DreamBooth:Stable Diffusionに自分の好きなキャラクターを描いてもらう事は可能
>・DreamBoothは少数の画像から新しい概念をタグとして学ばせる事が可能
>・textual inversionと同等だが全体を最適化するためにより強力でメモリ喰い
>・DreamBoothの省メモリ実装は推論だけなら6GB程度のメモリで動作可能
>学習させたい画像をIdentifierとして emdedding 空間に埋め込み、それを元にText Transformer , Unet をファインチューニングし、画像を出力させます。言語として表しにくい画像やその画像の絵柄を元にした画像が出てきます。Textual Inversion と比べてこちらのほうが忠実に再現できますが、時間とリソースが要求されます。https://note.com/te_ftef/n/n48926bfae747
タグに結びつける感じかなwogikaze
textual inversionも同じことやってるの?
https://webbigdata.jp/ai/post-15059Stable Diffusionに天空の城ラピュタの飛行石の紋章を描いて貰う
>textual inversionは画像からstable diffusionに新しい概念を学ばせる手法
なるほど、同じだ
StableDiffusionと書いているがWaifuDiffusionでもできるのかhttps://webbigdata.jp/ai/post-15374
モデルが公開されていたらできるってことかな
ACertainThingあたりもできるのかなwogikaze
いやこれがそもそもDreamboothされたモデルだ、ならできそう
使う:https://note.com/lisa_s/n/n5fb5468e8998AIで特定キャラを描く(DreamBoothで追加学習)
(ソース確認してみると)少数概念を覚えるために特化したファインチューン手法の一つとして提案・実装された。基本的には少ない概念を覚えるのには向いており(当時としては)小コストで使える技術だった。morisoba65536
ただ、モデル全体を弄ってしまう都合上軽いと言っても大掛かり。更に軽量化の為に通常のファインチューンより尖り過ぎており汎用的な学習には向かず、より低資源で学習可能なLoraが登場することでほぼ役割を終えてしまった…LoraはアダプターとしてhyperNetwork代わりとしても、汎用的なチューンとしても、DreamBooth的な特化学習も全部できてしまうので…

Textual inversionとHypernetwork,DreamBoothの違いがよくわからない
>画風を学習させる場合、Textual Inversion より Hypernetwork の方がよい。なぜなら学習時間が短いからだ。Use deepbooru for caption を使えばタグ付けも自動化できる。http://dskjal.com/deeplearning/sd-fine-tune.html#ti-hn-tag
http://dskjal.com/deeplearning/sd-fine-tune.html#ti-hn-tag
Textual InversionHypernetwork
覚えさせたいタグInitialization Text に入れるタグファイルに書く
覚えさせたくないタグタグファイルに書くタグファイルに書く
使用法embedding 名をプロンプトに入れるキャラ/オブジェクトに関係のあるタグをプロンプトに入れる
>Textual Inversion も Hypernetwork も Aesthetic Gradients もデフォルトの状態で出せないような絵は出力できない。

>画像生成AIのStable Diffusionに数枚の画像を学習させ、AIモデル全体を再学習させて調整(ファインチューニング)を行う手法
>学習させたい画像の "スタイル" を「擬似単語」として emdedding 空間に埋め込み、それを元に画像を出力させます。言語として表しにくい画像やその画像の絵柄を元にした画像が出てきます。https://note.com/te_ftef/n/n48926bfae747
無限ループものかw?wogikaze
ここも後に引用されるのであった…nomadoor
>embeddingsは、.ptファイル名と同じワードをプロンプトに入れることで影響させる。
指定したワードで背景も変えられる
シンプルに書くと(かなりコンピューター側に寄った)プロンプトの塊をファイルにまとめてモデルに渡すのがTextual Inversionの仕組み。例えば「ピンク髪、Tシャツ、斜めアングル状態(斜め具合の角度、見たいな言語化しにくい所も学習できる)」と言ったプロンプトの塊を渡してる感じmorisoba65536
例えば某ぼっちちゃんを(ぼっちちゃん未学習で)知らないモデルに学習させると「ピンク髪ロング、ピンクジャージ、顔色が悪い、etc...」といった形で覚えれるが、ゼリーみたいなヘアゴムは概念的に持ってないので学習されない…見たいな

>画風ファイルを追加することで、元のモデルにはない画風や概念・キャラの特徴などを追加することができる。
>latent diffusion Model の追加学習の一つです。学習済みモデルのパラメーターを変化させずに学習させます。
ファイルのつくり方https://note.com/te_ftef/n/n7483e886d654
Stable Diffusion web UIでできるらしい
>hypernetworksは、Settingから変更することで全体に影響させる。
全身絵を学習するときはHypernetwork-MonkeyPatch-Extension
使う:https://note.com/te_ftef/n/n7483e886d654Stable Diffusion : ハイパーネットワーク学習ガイド




画像生成モデル向けの有名な実装:kohya-ss/sd-scripts
本来はモデル自体を変更するためのファインチューンの一種…として作られたのだが、「追加学習した結果を(元ファイルに手を加えずに)外に保存する」「モデルに適用するコストは低い(ので生成する直前にマージできる)」と言った特徴からモデルの拡張機能見たいな使われ方もしている。
と言うよりそっちが主な使われ方になってる。
ものすごく乱暴に書くと「ファインチューニング(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ほどの成果にはならない + 出たところなので情報少ないhttps://github.com/AiMiDi/stable-diffusion-webui-advance-prompt-tuninghttps://github.com/7eu7d7/DreamArtist-sd-webui-extension
>
>Dream booth ( キャラ向け )
>モデルそのものを変えて 新しい概念に寄せる
>メリット: 再現度・成功率・安定感が高い
>