掲示板などを読んでみると、単純にStable Diffusionにアニメ絵を学習させただけではなさそうだった。
アニメ画像を学習させた.ckpt(GB単位)と、付属データらしい.vae.pt(数百MB)と、更にhypernetworkという新しい単語が出てきて、.ptファイルというのもあるらしい。
.ptは既存のTextual inversionでも使われている拡張子なのだが同じだろうか。
hypernetworkを読み込ませないと、崩れたアニメ絵が出てくるようだ。
NovelAI側のヘルプを見ると、プロンプトの最初に『masterpiece, best quality,』をつけるとクオリティが上がるらしく、拡張する時に追加しているキーワードなのかもしれない。
で、結局NovelAIはどうやって実現しているのか。
拡散モデルを研究している人も知りたいというツイートをみたので論文にない独自方法なのか?
vae.ptというファイル名からの推測だとVAE学習させてるのかな?
どうやらhypernetworksという技術を追加で使っているらしい。
AUTOMATIC 1111にhypernetworksに関する実装が追加されている。現在gitのブランチでhypernetworksトレーニングのコードの実装開始されている。
掲示板などを見ていくと、promptの最初に{masterpiece}を最初につけないと、いわゆるNovelAIっぽいアニメ絵にならないらしい。
{masterpiece}をつけない場合、キャラ名は認識しているっぽいが、WaifuDiffusionっぽい崩れた画像が出てくるようだ。(アニメ画像を学習した.ckptだけで動作し、.vae.ptは動いてない?hypernetworksが効いてない?)
キャラ名については、同一名で作品が違うという場合があるので、おそらく学習時に別の単語に置き換えていると想像する。(NovelAIでキャラ名を入れた際に候補が出るが、変換しているはず)
他にpromptのトークン数をNovelAIは拡張している。
StableDiffusionの75トークンは、512x512の画像との対応付けから来ているというのが、付け焼き刃の知識での理解なのだが、どう対応付けしているのか。
最初に{masterpiece}があった場合、フラグをONにして、CLIPに渡すときは{masterpiece}を除外ってのは想像できるが、それでもトークンが余る。
Waifu Diffusion V1.3がリリースされ、学習する枚数を増やしたが、掲示板などに貼り付けてあるものを見る限り、まだ手は改善されてない。
最終リリース前(epoch5,6?)のものとの比較した画像も流れているが、見ても違いはわからない。
Stable DiffusionがDiffusion modelで精度が高い先端モデルとされているが、単純に学習枚数だけ増やしても手は描けない、ということではないだろうか。
https://blog.novelai.net/novelai-improvements-on-stable-diffusion-e10d38db82ac