追加学習ってなんぞや
追加学習について、Dreamboothとかファインチューニングとかいわれてるけど結局どんなことしてるん?と気になったwogikaze.icon
モデルを売る(これは大丈夫だよね?)というマネタイズが主流になる可能性もあるし絵の幅が出ると思うので知りたい
学ぶ前の終着点(と思うもの)
いくつか好きな絵柄に特化させたモデルを持つ
いい絵(基準わからんけど)を出せる汎用的なモデルを持つ
AI を自分好みに調整できる、追加学習まとめ (その1 : 概要)|teftef|note
Dreambooth調べてたらすんごい詳しいのがあった
追加学習というのは大まかに説明すると、誰かほかの人が学習させた学習済みモデルに対して自分好みに変更したり、学習させたりするという手法
転移学習 (Transfer Learning)
蒸留 (Distilation)
ファインチューニング (fine tuning)
その他の学習法
Dreemboothはここ
転移学習
転移学習 - MATLAB & Simulink
一般的なディープラーニングの知識
使う:Stable Diffusion 転移学習 - Qiita
まじで説明がない、wogikaze.icon
2010年の説明では意味が広くて曖昧な言葉と言われている基素.icon
https://www.jstage.jst.go.jp/article/jjsai/25/4/25_572/_article/-char/ja/
蒸留
Deep Learningにおける知識の蒸留 | Code Craft House
一般的なディープラーニングの知識
すでにあるモデルを使って学習する?
こちらも情報がなく困る
他のモデルで生成した画像を使ってファインチューニングするのもこちらに入る?
漸進的蒸留
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
使う:Diffusion Model(拡散モデル)の追加学習をColabでやる方法|きざみみ(kizamimi)|note
https://www.reddit.com/r/StableDiffusion/comments/10cgxrx/wellresearched_comparison_of_training_techniques/Well-Researched Comparison of Training Techniques (Lora, Inversion, Dreambooth, Hypernetworks)
https://gyazo.com/34786ae93d38ddb691e0b949ec748b41
Dreambooth
https://webbigdata.jp/ai/post-15118DreamBooth:Stable Diffusionに自分の好きなキャラクターを描いてもらう事は可能
・DreamBoothは少数の画像から新しい概念をタグとして学ばせる事が可能
・textual inversionと同等だが全体を最適化するためにより強力でメモリ喰い
・DreamBoothの省メモリ実装は推論だけなら6GB程度のメモリで動作可能
学習させたい画像をIdentifierとして emdedding 空間に埋め込み、それを元にText Transformer , U-net をファインチューニングし、画像を出力させます。言語として表しにくい画像やその画像の絵柄を元にした画像が出てきます。Textual Inversion と比べてこちらのほうが忠実に再現できますが、時間とリソースが要求されます。https://note.com/te_ftef/n/n48926bfae747
タグに結びつける感じかなwogikaze.icon
textual inversionも同じことやってるの?
https://webbigdata.jp/ai/post-15059Stable Diffusionに天空の城ラピュタの飛行石の紋章を描いて貰う
textual inversionは画像からstable diffusionに新しい概念を学ばせる手法
なるほど、同じだ
StableDiffusionと書いているがWaifuDiffusionでもできるのかhttps://webbigdata.jp/ai/post-15374
モデルが公開されていたらできるってことかな
ACertainThingあたりもできるのかなwogikaze.icon
いやこれがそもそもDreamboothされたモデルだ、ならできそう
使う:https://note.com/lisa_s/n/n5fb5468e8998AIで特定キャラを描く(DreamBoothで追加学習)
(ソース確認してみると)少数概念を覚えるために特化したファインチューン手法の一つとして提案・実装された。基本的には少ない概念を覚えるのには向いており(当時としては)小コストで使える技術だった。morisoba65536.icon
ただ、モデル全体を弄ってしまう都合上軽いと言っても大掛かり。更に軽量化の為に通常のファインチューンより尖り過ぎており汎用的な学習には向かず、より低資源で学習可能なLoraが登場することでほぼ役割を終えてしまった…LoraはアダプターとしてhyperNetwork代わりとしても、汎用的なチューンとしても、DreamBooth的な特化学習も全部できてしまうので…
Textual inversionとHypernetwork,DreamBoothの違いがよくわからない
関連:DreamBoothとファインチューニングの違いは?
Textual Inversion versus Dreambooth : StableDiffusion
Comparison of DreamBooth and Textual Inversion : StableDiffusion
画風を学習させる場合、Textual Inversion より Hypernetwork の方がよい。なぜなら学習時間が短いからだ。Use deepbooru for caption を使えばタグ付けも自動化できる。http://dskjal.com/deeplearning/sd-fine-tune.html#ti-hn-tag
table:http://dskjal.com/deeplearning/sd-fine-tune.html#ti-hn-tag
Textual Inversion Hypernetwork
覚えさせたいタグ Initialization Text に入れる タグファイルに書く
覚えさせたくないタグ タグファイルに書く タグファイルに書く
使用法 embedding 名をプロンプトに入れる キャラ/オブジェクトに関係のあるタグをプロンプトに入れる
Textual Inversion も Hypernetwork も Aesthetic Gradients もデフォルトの状態で出せないような絵は出力できない。
Textual Inversion
画像生成AIのStable Diffusionに数枚の画像を学習させ、AIモデル全体を再学習させて調整(ファインチューニング)を行う手法
学習させたい画像の "スタイル" を「擬似単語」として emdedding 空間に埋め込み、それを元に画像を出力させます。言語として表しにくい画像やその画像の絵柄を元にした画像が出てきます。https://note.com/te_ftef/n/n48926bfae747
https://gyazo.com/e8ced1f7439d3238b7bd76985e361874https://note.com/septendec/n/nb8c8fa1e89a2
無限ループものかw?wogikaze.icon
ここも後に引用されるのであった…nomadoor.icon
embeddingsは、.ptファイル名と同じワードをプロンプトに入れることで影響させる。
指定したワードで背景も変えられる
星の数のように公開されてて笑うhttps://cyberes.github.io/stable-diffusion-textual-inversion-models/
シンプルに書くと(かなりコンピューター側に寄った)プロンプトの塊をファイルにまとめてモデルに渡すのがTextual Inversionの仕組み。例えば「ピンク髪、Tシャツ、斜めアングル状態(斜め具合の角度、見たいな言語化しにくい所も学習できる)」と言ったプロンプトの塊を渡してる感じmorisoba65536.icon
例えば某ぼっちちゃんを(ぼっちちゃん未学習で)知らないモデルに学習させると「ピンク髪ロング、ピンクジャージ、顔色が悪い、etc...」といった形で覚えれるが、ゼリーみたいなヘアゴムは概念的に持ってないので学習されない…見たいな
Hypernetwork
画風ファイルを追加することで、元のモデルにはない画風や概念・キャラの特徴などを追加することができる。
latent diffusion Model の追加学習の一つです。学習済みモデルのパラメーターを変化させずに学習させます。
ファイルのつくり方https://note.com/te_ftef/n/n7483e886d654
Stable Diffusion web UIでできるらしい
hypernetworksは、Settingから変更することで全体に影響させる。
こっちもかなりの数公開されているhttps://bookyakuno.com/aiart-hypernetwork/#%E9%85%8D%E5%B8%83%E3%82%B5%E3%82%A4%E3%83%88
全身絵を学習するときはHypernetwork-MonkeyPatch-Extension
使う:https://note.com/te_ftef/n/n7483e886d654Stable Diffusion : ハイパーネットワーク学習ガイド
Imagic
lora
画像生成モデル向けの有名な実装:kohya-ss/sd-scripts
本来はモデル自体を変更するためのファインチューンの一種…として作られたのだが、「追加学習した結果を(元ファイルに手を加えずに)外に保存する」「モデルに適用するコストは低い(ので生成する直前にマージできる)」と言った特徴からモデルの拡張機能見たいな使われ方もしている。
と言うよりそっちが主な使われ方になってる。
元論文を見直すと当初からアダプターとしての使用も想定はされていたようだ。
ものすごく乱暴に書くと「ファインチューニング(DreamBooth)を【ファイルに直接書き込まず差分パッチとして学習】し【学習する層を絞ることで学習量自体も減らす】」もの位の認識。
一種の差分パッチなので実際に2つのモデルからLoraを作るスクリプトなんかも存在している。
学習時の次元数とかはどのくらいの精度で差分を作るか、といった感じ。単一の概念を覚えさせるだけなら低次元で良いが適用時にハンコみたいに強く効いてしまうなどの副作用も起きやすくなる…ようなイメージか(必ずそうなるわけでもないので断言はしきれない)
ハッキリしてる利害は高次元ほどファイルサイズはデカくなる、それも基本的には倍々に。そのため配布のキャラLoraとかは比較的低次元なものが多い傾向にある。
差分パッチだけど適用のコストが低いため、画像生成のタイミングでモデルに対し適用できることもありキャラ単独学習からそれなりに大規模な追加学習まで幅広く使われてはいる。
とにかく派生技術が多く詳しく調べようとすると割とカオス
有名な(先にも書いた)kohya-ss氏のスクリプトも実は結構派生型のLoraで元論文から結構手が加わってるらしい。性能が良かったためか画像生成においては事実上のデファクトになっている。
DreamArtist
https://github.com/7eu7d7/DreamArtist-sd-webui-extension
Custom Diffusion
https://github.com/adobe-research/custom-diffusion
LEAP
https://github.com/peterwilli/sd-leap-booster
データセットを集める
AI を自分好みに調整できる、追加学習まとめ (番外編 : データセットの集め方について)|teftef|note
マージする
【Stable Diffusion】マージモデルと各モデルの生成結果を比較してみた|septendec|note
階層マージ
Stable DiffusionのモデルをU-Netの深さに応じて比率を変えてマージする|Kohya S.|note
結局やってみなくちゃわからない、ということで
追加学習をやってみよう
AI絵作り研究会より
TI: 入力されたプロンプトを一定の方向に曲げる、みたいなイメージ。新しいものを覚えられているようで言葉の方向性を捻じ曲げてるだけだから覚えていない
DB: AIの中の言語を処理する部分と画像を処理する部分に同時に新しい要素を覚えさせる、新しいものを覚えられるがckptファイルごとになるので色んなとこで重い
LoRA: DBから学習させた要素だけ別ファイルになってる感じ、かるいしDBと同じ動作ができる
韓国 HN,DBが強い
中国 TIが強い
日本 層別が強い
Aesthetic Gradients、DreamArtist「」
Aesthetic Gradients:
生成物の雰囲気をモデルが知ってる範囲で新しい特定概念に寄せる (画風向け / コスパ重視)
メリット: 計算量少ない
デメリット: 情報少ない (Textual Inversionのがやる人多い)https://gigazine.net/news/20221101-automatic1111-stable-diffusion-webui-aesthetic-gradients/ https://note.com/yamkaz/n/n395a9bc3f161#:~:text=%E4%BB%95%E7%B5%84%E3%81%BF%E3%81%AF%E3%81%93%E3%81%A1%E3%82%89%E3%80%82-,AUTOMATIC1111%E3%81%ABAesthetic%20gradients%E6%A9%9F%E8%83%BD%E3%81%8C%E6%90%AD%E8%BC%89,-Aesthetic%20gradients%E3%81%A8
Textual Inversion:
生成物をモデルが知ってる範囲で新しい特定概念に寄せる ( キャラまたは画風向け )
メリット: プロンプトに入れるので 組み合わせしやすい + 新しい単語を覚えさせられる (VRAM 8GB)
デメリット: 全く知らないものは無理https://github.com/AUTOMATIC1111/stable-diffusion-webui/wiki/Textual-Inversionhttps://wikiwiki.jp/sd_toshiaki/Textual%20Inversion%E3%81%A8%E3%81%AF%EF%BC%9Fhttps://rentry.org/sd-e621-textual-inversionhttps://tadaoyamaoka.hatenablog.com/entry/2022/09/21/210417
Hypernetwork:
モデルそのものを変えずに 新しい特定概念に寄せる ( 画風向け / コスパ重視)
メリット: プロンプトに入れず反映される(キーワードに含まれる) (VRAM 8GB)
デメリット: 例のリークと関連が疑われるので避けられがちhttps://rentry.org/hypernetwork4dumdumshttps://new-file.hatenablog.com/entry/custom-hypernetworkhttps://wikiwiki.jp/sd_toshiaki/Hyper%20Networkhttps://rentry.org/sd-e621-textual-inversion
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 ( キャラ向け )
モデルそのものを変えて 新しい概念に寄せる
メリット: 再現度・成功率・安定感が高い
デメリット: 計算量重い(VRAM12GBが推奨されてる?) + 表現の幅が減ることがある + モデルなのでデカいhttps://www.reddit.com/r/StableDiffusion/comments/xjlv19/comparison_of_dreambooth_and_textual_inversion/https://tadaoyamaoka.hatenablog.com/entry/2022/09/28/221649https://wikiwiki.jp/sd_toshiaki/Dream%20Booth%E3%81%A8%E3%81%AF%EF%BC%9F