![見出し画像](https://assets.st-note.com/production/uploads/images/161675699/rectangle_large_type_2_61727c1aa43b7ac33424532abdd27a9a.png?width=1200)
v予測(v_prediction)について勉強してみた話@NoobAI-XL-Pred-0.5-Version
NoobAI-XL (NAI-XL) - V-Pred-0.5-Version | Stable Diffusion XL Checkpoint | Civitai
前回記事で取り上げたNoobAIのv_prediction版で、ワークフローを上げましたが、v予測(v_prediction)とはどのようなものか調べて見たので一応記事にしておきます。
基本的にリンクにある解説でおおむね十分な内容にはなっています。
[2202.00512] Progressive Distillation for Fast Sampling of Diffusion Models
<GPTに確認した論文の中でv予測の部分を含む内容>
この論文の中で、v_predictionが拡散モデルの「安定性」と「蒸留プロセスにおける適用可能性」を高めるための一つの方法として取り上げられています。
v 予測を用いることにより、モデルの安定性が向上することが示されています。従来の ϵ\epsilonϵ 予測では、蒸留のプロセスが進むにつれて信号対雑音比(SNR)が低下することにより、不安定になる傾向がありました。これに対して vv予測を用いることで、SNRに依存しない安定した予測が可能となります。
実験結果では、v予測を採用することが他の方法(例えば、x や ϵ\epsilonϵ の予測)と比較して、サンプリングステップ数を削減しても優れた性能を維持できることが示されています。また、蒸留プロセス中においてもモデルの予測が安定しており、少ないステップ数での高品質なサンプリングに寄与しています。
ということの様です。リンクの記事にあるNovelAI Diffusion V3もv予測(v_prediction)を行うように調整されているとのことです。
Improvements to SDXL in NovelAI Diffusion V3
上の論文で、SDXLモデルを改良した内容が記載されています。
SDXLモデルをv予測する効果について
上の論文の内容からv_prediction(v予測)についてまとめて見ました。
ちなみにSDXLは「ε予測」を使用しています。
①従来のSDXLの「ε予測」の仕組み
「ε予測」は、モデルがノイズそのもの(ε)を予測する仕組みです。
この手法では、最初にノイズだけの状態から少しずつノイズを取り除いて、最終的にきれいな画像に近づけます。
しかし、ノイズの割合が非常に多い(SNRが低い)とき、すべてがノイズであるため、何も予測することができず、画像がきちんと生成できないという問題がありました。
②「v予測」に変更するとどのようになるか
「v予測」によって、モデルが「どの程度ノイズを除去すればよいか」を学習しやすくなります。
v予測は、単純なノイズではなく、画像の構造に近い情報も含む「速度」的な指標(v)を予測する仕組みです。この「v」は、ノイズ成分と画像成分を含んだもので、状況に応じてノイズ量が多いときはノイズを多く取り除き、ノイズ量が少ないときは画像の構造を重視して再構成することができます。
この変更により、モデルはノイズの多い状態(例えば生成の最初の段階)でも、単に「全てノイズ」とするのではなく、画像の構造に応じて適切な情報を残しつつ生成を進めることができるようになります。
これにより、従来よりも安定した画像生成が可能になり、特に生成の初期段階や最終段階での品質が向上することが期待されます。
SDXLモデルを従来の「ε予測」から「v予測」にした方法
論文から参照した内容が以下です。
元々のSDXLモデルから以下のような感じで「v予測」に切り替えているようです。
①予測対象の変更
従来の「ε予測」(SDXL)では、モデルが「ノイズ成分(ε)」そのものを予測するように設計されていました。
「v予測」では、画像の構造(x0)とノイズ(ε)を組み合わせた新しい指標(v)を予測対象にします。このvは、画像の生成段階に応じてノイズ成分と画像成分のどちらに重点を置くべきかを柔軟に切り替える役割を果たします。
②モデルの出力を変更
モデルの出力層を変更し、従来のεを予測するように設定された部分を、新たにvを計算するように再構成します。
vは「ノイズ成分と画像成分の間を埋めるような中間的な指標」として働くため、モデルはこのvを基準にして画像を構築します。具体的には、出力層で「ε」と「x0」の両方の情報を組み合わせてvを計算し、生成の途中で柔軟に切り替えられるようにしています。
③学習の再調整
v予測に基づいたモデルにするために、いくつかの学習手法やロス関数を調整しています。従来のε予測用のロス関数から、v予測に適したものに置き換えられます。これにより、モデルは各生成ステップで適切な画像とノイズの割合を学習できるようになります。この段階で、モデル全体を再学習するのではなく、設定変更後の学習を追加することで、新しい仕組みに適応させることが多いです。
ということで、もともとのSDXLの「ε予測」から「v予測」に切り替えるのはそこそこ手間がかかる印象です。
「v予測」で調整したモデルで、通常のSDXLで行う「ε予測」を行うとどうなるか
GPTに聞いてみた内容が以下です。
①画像の生成品質の低下
「v予測」モデルは、生成の過程で「ノイズ成分(ε)」と「画像構造(x0)」のバランスを取りながら予測を行うように訓練されています。したがって、直接「ε予測」を行うと、モデルはノイズのみに焦点を合わせるため、画像生成の品質が低下する可能性があります。特に、画像の細部や輪郭が曖昧になったり、ノイズが多い部分では画像が崩れてしまうことが考えられます。
②初期段階での生成の不安定さ
「v予測」は、ノイズが多い初期のステップからノイズが少ない後半のステップにかけて、適切に切り替えができるように設計されています。しかし、直接「ε予測」を行う場合、生成の初期段階ではモデルが画像の構造に関する情報を活用できないため、ノイズの多い段階での生成が不安定になりやすいです。その結果、画像全体に無意味なノイズが残ってしまう可能性が高くなります。
③生成ステップ全体でのバランスの崩れ
「v予測」モデルは、ノイズ成分と画像成分のバランスを調整しながら学習されていますが、直接「ε予測」を行うと、このバランスが崩れることが予想されます。具体的には、ノイズを取り除く際に必要以上にノイズ成分に依存することになり、画像のディテールや色彩が不自然になったり、場合によっては背景色や主要な構造が正しく再現されなくなる可能性があります。
④最終的な画像の歪みや色のずれ
直接「ε予測」を行うと、特に画像の色のバランスが崩れるリスクがあります。通常、「v予測」では、色のずれや細かな構造の精度を保つために、ノイズと画像構造の間で適切に調整を行います。しかし、ε予測のみを行うと、画像の全体的な色調が崩れたり、望まない色が背景や主要な部分に現れることがあります。
実際のNoobAI-XL-Pred-0.5-Versionの画像生成結果
先ほどの内容を踏まえて比較してみました。
①デフォルトの生成条件の結果は以下
基本的に①②の要素がメインに残っている印象?
![](https://assets.st-note.com/img/1731460043-qP0i1ykR52YSHuvZUcmAKx4g.png?width=1200)
②v予測が出来るようにすると以下のようになります。
![](https://assets.st-note.com/img/1731460324-y82masKxRlr9ZDh7AL6fwM0V.png?width=1200)
一応、v予測が行える基本ワークフローは前回記事に上げていますが今一度、上げておきます。
「ModelSamplingDiscrete」ノードと「BasicSchedular]ノード、「SamplerCustum」ノードを使用する感じになっています。
このノードの組み方だと、「ModelSamplingDiscrete」ノードで「EPS」を選択すると通常のSDXLが生成される感じになりますので、両方を併用したい
場合はこちらがスタンダードになっていく可能性がありそう。
<追記>
上記にComfyUIのワークフローを提示していますが、reForgeでも使用できることが分かっています。方法は以下を参照してください。
v-prediction modelをreforgeで使うには - gikoha’s blog