Latent Consistency Models について
こんにちはこんばんは、teftef です。今回は爆速画像生成ができる Latent Consistency Models についてです。WebUI 拡張やお試しも載せておきます。
拡散モデルの拡散過程は確率常微分方程式 (Probability Flow ODE) を解いて得ることができ、少ないステップによってその解軌道に沿ったサンプリングができるように学習します。これによって、Consisitency Models は Diffusion Model のサンプリングを少ないステップ数 (1~5) で行うことができます。今回はこの Consisitency Models の LDMs バージョンともいえる Latent Consistency Models について、ひじょーーーーーにざっくり書いていきます。
試してみたい方はこちら↓
原理について詳しく知りたい方は、こちらの記事がとても分かり易いです。(すごく参考になった、一読しておくことがおすすめ) というか、この Consistency Models と比較して書くので、読んでおいたほうがいいです。
私もまだ初学者であり、説明が間違っていたり勘違いがある可能性が 0 ではないということをご了承ください。ぜひコメントなどをいただけたら幸いです。また、この記事を作成するにあたり、GPT-4 による校正、修正が含まれています。
※この記事は有料となっていますが、最後まで内容が読めます。
今回、扱うのははこちら ↓
Consistency Models
詳しいことは記事を読んでください。使う部分だけを書いていきます。
Consistency Models の学習方法は既存の拡散モデルから蒸留(Consistency Distillation) する方法とゼロから学習(Consistency Training)する方法の2つあり、今回は拡散モデルから蒸留(Consistency Distillation) する方法についてしか言及しません。(ゼロから学習はよくわからん)
学習方法 - Consistency Distillation
既存の拡散モデルから蒸留 (Distillation) します。
$${f}$$ : モデル (θ はパラメーター)
$${\bm{ f_\theta }}$$ : 学習する Consistency Models
$${d}$$ : distance ,距離を計算する
時刻 $${\bm{t_{n+1}}}$$ の x の状態を学習したい Consistency Models $${\bm{ f_\theta }}$$ に入力したときの出力 ($${\bm{d}}$$ の第一引数)
時刻 $${\bm{t_n}}$$ の x の状態 (ODE solver によってデノイズされた状態) を教師モデルとなる拡散モデルに入力した出力 ($${\bm{d}}$$ の第二引数)
の距離を最小化するように学習します。つまり、時刻 $${\bm{t_n}}$$ の x の状態と時刻 $${\bm{t_{n+1}}}$$ の x の状態それぞれをモデルに入力したときの出力の差異を最小化するように学習します。そうすると Consistency Models $${\bm{ f_\theta }}$$は教師モデルである拡散モデルに近似されていきます。
問題点
しかしこの Consistency Models の学習工程 (Consistency Distillation) では、二段階の蒸留プロセスが必要となり (+モデルの収束に時間がかかる)、また、Consistency Models は大規模なモデルであり、時間と計算リソースが多く必要になってきます。
そして、Consistency Models は言語による条件付けがされておらず、 Text から画像生成をすることができません。
Latent Consistency Models
そこで、今回は潜在空間 (latent space) において Consistency Models を使用した、モデルを設計し、少ないステップ数で推論 (画像生成) できることを目標にします。
Stable Diffusion (SD)のようなモデルを使い、画像の潜在空間を利用することで、画像生成の品質を向上させ計算量を大幅に削減する。
Text 条件付けを学習させ、 CFG スケールを用いて制御できるようにする
One-Stage Guided Consistency Distillation を用いて蒸留プロセスを一段階に減らし、さらに SKIPPING-STEP を用いて学習の収束を早める
Latent Consistency Models のファインチューニング
(割愛)
を行います。
計算量の削減
Stable Diffusion (SD) のようなモデルは、画像の潜在空間を利用することで、画像生成の品質を向上させ、計算量を大幅に削減しています。
Text 条件付け
テキストの条件付けを組み込むことで、Cosistency Models の損失関数は以下のようにあらわすことができます。確率常微分方程式 (Probability Flow ODE)においてテキスト条件 $${c}$$ を追加し、この条件に従って潜在変数 $${z_t}$$ 予測します。
CFG スケール
画像の品質と忠実度を制御するために Classifier-free guidance (CFG) が必要となり、それを蒸留する際に統合する必要があります。
One-Stage Guided Consistency Distillation
Consistency Models の学習は収束が遅いため、二段階の蒸留法が提案されています。しかし、二段階のガイダンス付き蒸留は累積誤差を引き起こすため蒸留プロセスを一段階に減らした手法を取ります。 (あんまり理解してないので割愛、とりあえず、PF-ODE を CFG と Text 条件付けがあるものに拡張子し、一段階のガイダンス付き蒸留を使っている)
SKIPPING-STEP
Consistency Models では隣接するステップを用いて、それぞれを教師と生徒モデルに入力した際の Loss を取ることで学習を行っていました。しかしこれでは、学習の収束が遅く、多くの時間と計算資源を消費してしまうことになります。そこで、隣接する時間ステップ間の一貫性を保つのではなく、現在の時間ステップと $${k}$$ ステップ離れた時間ステップ間の一貫性を保つことを目指します。今回は、 $${k = 20}$$ と設定することで学習の収束を速め、良好なな結果が得られていることがわかりました。
アルゴリズムの比較
Consistency Models の学習コードと Latent Consistency Models の学習コードを比較してみます。
性能
生成された画像の性能を見てみます。
4ステップの推論でもうまく画像が生成されていることがわかります。
推論時間
こちらで推論を試してみました。
25 枚の画像をステップ数 8 で推論します。
1枚生成するのに 2.6 秒ほど、25 枚で 67 秒でした。速い!
(正確に言うと、今回は 1 枚 の生成時間を知りたいため、 for 文で 25 回推論を回していますが、本当は生成枚数をしていできるので、もう少し早くなります。)
拡張機能
⇩ Automatic 1111 Stable Diffusion WebUI
⇩ Comfy UI
余談 (DALLE-3 について)
この章は推測が混じります。完全に正しい情報ではないです。個人的な感想程度なので真に受けないでください。というかここ以降だけ読んで批判しないでください。←この文章を読んでください
先日の DALLE-3 の技術報告書内でこのようにかかれています。(日本語訳)
恐らくこれらの文章から推測するに、DALLE-3はもしかしたら Latent Consisrtency Models (と似ているものを使っている)ではないかなと思います。勝手な憶測です。(このくらい書かないと切り取る人いるので)
参考文献
最後に
Consistency Models の 1 手法である Latent Consistency Models についてひじょーーーーーにざっくり書きました。 Consistency Models については、なんかさんの記事がものすごくわかり良いのでぜひ、ご一読ください。
最後に少し宣伝です。主のteftefが運営を行っているdiscordサーバーを載せます。このサーバーではMidjourneyやStble Diffusionのプロンプトを共有したり、研究したりしています。ぜひ参加して、お絵描きAIを探ってみてはいかがでしょう。(4,200 字,teftef)
↓↓もしよろしければこの記事と開発の支援お願いいたします!
※注意 : 支援してくださる方へ
※注意 :ここから先は何も内容がありません。しかし、この記事をお読みいただき、良かったと感じていただけたのであれば、この記事と開発の支援お願いいたします!
ここから先は
¥ 500
Amazonギフトカード5,000円分が当たる
この記事が参加している募集
この記事が気に入ったらチップで応援してみませんか?