見出し画像

Betaスケジューラーとは?CR XY Plotも試してみた@ComfyUI

以前のFLUXの記事で、Betaスケジューラーというものがあり、興味を持ったので調べてみました。

ComfyUIのデフォルトノードにBetaSamplingSchedulerがあり、そこに説明がありました。

GPTさんに聞いてみた結果です。

ComfyUIのBetaSamplingSchedulerは、ベータ分布を使ってディフュージョンモデル用のカスタムサンプリングスケジュールを生成するための特殊なノードです。これにより、画像生成の際にサンプルの質や特徴を制御でき、特にアーティストが異なるサンプリング技法を試す際に便利です。

主な特徴
AlphaとBetaパラメータ: ベータ分布の形状を制御する重要なパラメータで、これによってノイズの適用具合が調整されます。デフォルト値は0.6ですが、範囲は0.0から50.0まで設定可能です。この2つのパラメータを微調整することで、生成するサンプルの質を細かく調整できます。

ComfyUIわ立ち上げた状態で以下のように調べると出てきますが、説明にあるように「alpha」と「beta」の数値を調節するもののようです。

パラメーターの説明
Alpha:
サンプリング過程におけるベータ分布の形状を制御します。Alpha値を増やすと、分布の前半で大きなシグマ値が適用されるようになり、逆にAlpha値を減らすと、後半に大きなシグマ値が適用されやすくなります。
<効果>
高いAlpha値は早い段階でノイズが大きく減少し、後半はより滑らかな画像生成が期待されます。低いAlpha値の場合、後半に細かいディテールがより強調される可能性があります。

Beta
Alphaと同様、ベータ分布の形状を調整しますが、逆方向の影響を持ちます。Beta値を大きくすると、ステップの前半で小さなノイズが多く適用され、後半でより大きなノイズが加わるようになります。
<効果>
低いBeta値では早い段階でノイズが少なく、結果的にディテールが鮮明になることが期待できます。逆に、高いBeta値では後半にノイズが集中するため、より大胆なアーティスティック効果が生じる場合があります。

GPTさんにスケジューラーごとの比較をしてもらいました。
以下、簡単にまとめたものです。
<比較のまとめ>
BetaSamplingSchedulerは、柔軟なノイズ制御が可能で、サンプルの質を高度にカスタマイズできますが、使いこなすには経験が必要です。
Normal Schedulerはシンプルで使いやすく、高速な処理が可能ですが、カスタマイズの余地が少ないです。
Simple Schedulerは初心者向けで、基本的な結果を素早く得ることができ、簡単に使用可能です。
Karras Schedulerは、効率的なノイズ除去が可能で、特にディテールにこだわる場面で高い性能を発揮しますが、やや設定が複雑です。

ということで、BetaSamplingSchedulerは、経験者向き?のスケジューラーの様です。
こういうのを見ると色々やりたくなる方がおられるのではないでしょうか?

BetaSamplingSchedulerの使用方法
先程の図でもありましたが、入力が「sigma」となっているため、通常のKsamplerでは使用できません。

以下のような感じにする必要があります。

以下は、以前の記事で紹介した「MiaoshouAI tagger」とOPEN FLUXを使用したワークフローです。参考にしてください。

CR XYプロットの使用@Beta schedular

このノードはalpha、betaの値はデフォルトで0.6という数値になっています。
ということで、alpha、betaの値でXYプロットを作成すれば良いのでは?と思いましたが、ComfyUIはXYプロットの作成がずいぶん難しい。。。。

efficiency nodes comfyuiというところが出しているXYプロットはサンプラーがらみのもので設定が簡単に出来るもののようですが、残念ながら今回のBeta schedularには対応していませんでした。。。。

XY Grid Nodes · Suzie1/ComfyUI_Comfyroll_CustomNodes Wiki (github.com)

そのため、上のリンクにある「CRなんとか」でよくお世話になるノードにあるXYプロットを試してみました。

公式が出しているワークフローは以下です。

試してみたら、どのようなものかよくわかりませんでしたので、分解してみることにしました。

下半分は通常の画像生成で、上半分がXYプロットの部分になります。

このXYプロットは、必要な画像枚数をバッチで生成するのですが、そのために「Primitive」ノードでその調整をしています。これは1回生成ごとに一つずつ値が増えていき、それが右側のXYプロットを進めるみたいなイメージです。
「CR XY Interpolate」というノードを使用しています。
ノードのパラメータは、上の4つがXで下の4つがYとなります。
<パラメーターの説明的なもの>
①「x_colums」:作成するXのパラメーターの数
②「x_start_value」:Xの開始パラメーターの値
③「X_step」:1回ごとに増えるパラメーターの値
④「X_annotation_prepend」:Xのパラメーターの値

そのため、上の設定では、Xはalpha値を設定したいと考えているので、「0.4から0.2ずつ4回増やす」、Yはbeta値を設定し、「0.4から0.2ずつ4回増やす」としています。
そのため、これらのXYの組み合わせは4x4で16通りになります。

バッチで生成しない場合は、生成ボタンを押すと、ShowTextの所に、それぞれのXとYの値が表示されます。最初はこの数値の変化を見るとイメージしやすいと思います。
XとYの出力は、該当する部分に接続する感じになります。

「CR ImageOutput」に接続して画像の出力をしています。
Filename prefixで、保存先のフォルダ名を変更できます。

生成ボタンのところの「Extra options」にチェックを入れるとバッチ数を入力することができます。

生成すると、「output」フォルダ内に「Test1」というフォルダが出来ます。すでにある場合はそこに保存されます。

以下のように16個出来ています。

これは生成した画像をグリッドにするフローです。
説明は特にしませんが、当初に生成時のXYプロットの設定に合わせて数値の調整をします。
注意点としては、これもバッチ処理が必要になります。

ということでようやくXYプロットのグリッド画像が作成出来ました。
公式が出しているフローはそれを合体させたものですが、うまくグリッド画像が作成できなかったこともあり、分けてみました。

ちなみに、デフォルトの0.6と0.6なのですが、ここに提示したものだと顔が崩れて。。。。

alphaは高いとアーチファクトが入ってきました。特にbetaが低いと0.8でも見られています。


これはbetaの数値を大きくしたものです。
alphaとbetaはある程度の関係性を持っている印象です。

ここまで記事を書いていて、サンプラーのシード値を固定していなかった事に気がつきました。
生成時間の検証とかしていませんが、既存のスケジューラーに飽きたら試してみるのも良いかも知れません。




いいなと思ったら応援しよう!