見出し画像

Kyoha HR fix:設定を模索した結果、とりあえず使ってみるのが良さそうな件

SD-webui-forgeのDeforumで最近、「Kyoha HR fix」が搭載されました。もともと、forgeのデフォルトの拡張機能として「Kyoha HR fix」がついていましたが、使い方が分からないこともありスルーしていました。
NoteだとBDさんがforgeが出た直後に設定について記載しています。流石です。

さて、「Kyoha HR fix」ですが、ForgeのDiscussionでも取り上げられているのですが、「解説がほぼない」ということでやり玉に挙がっています。
また、Automatic1111と効果が違うという意見もあるようです。

現状の個人的な意見は、なんかちょっと早くなるので、他の拡張機能とか使わない場合は推奨という感じです。

「Kyoha HR fix」について

ソースコードを見ると、「SDXLで高解像度での構図の破綻を軽減する」ものと記載がありました。それ以上の解説はありません。
ということで、もともとのコードをGPTさんに解説してもらったのが以下になります。
<GPTさん解説>
このコードは、ニューラルネットワークの「前進伝播(forward pass)」を定義しています。前進伝播は、入力データをネットワークの各層を通して処理し、最終的な出力を得るプロセスです。
この特定のコードは、特定の種類のニューラルネットワーク、おそらく画像処理や生成に使用されるもの(U-Netのバリエーションを思わせます)での前進伝播をカスタマイズしています。説明を簡単にするために、コードの主要な部分を順に追っていきましょう。
タイムステップの拡張: まず、timesteps(時間のステップ)をバッチの次元に拡張します。これは、各入力サンプルが特定の時点に対応することを意味し、この情報を使用して、ネットワークが時間的な変化を学習できるようにします。
埋め込みの生成: 次に、タイムステップとラベル(y)から特定の埋め込み(emb)を生成します。これは、ネットワークが入力データに関連する追加情報を考慮できるようにするためのものです。
モジュールの繰り返し呼び出し: ネットワークは、いくつかの「ブロック」または層の集合(input_blocks, middle_block, output_blocks)を通じて入力xを処理します。各ブロックは、異なる処理を行う複数の層を含むことがあります。このプロセスは、入力データをより高いレベルの表現に変換していきます。
ダウンサンプリングとアップサンプリング: コードには、特定の条件下で画像の解像度を下げたり(ダウンサンプリング)、元の解像度に戻したり(アップサンプリング)する処理が含まれています。これは、ネットワークが画像の異なる解像度で特徴を捉えることを可能にし、生成された画像の品質に影響を与えます。
結合と最終処理: アップサンプリング後、処理されたデータは、以前の層からの出力と結合され、最終ブロックを通過します。これにより、ネットワークはより細かい詳細を保持しながら、高レベルの特徴を効果的に統合できます。
要するに、このコードは、入力画像やデータを受け取り、時間的な情報とラベル情報を組み込んで、特定の処理を行った後に変換された出力を生成するニューラルネットワークの動作を定義しています。この処理は、特に画像生成や変換タスクで有用です。<解説終わり>

さて、この拡張機能で設定する内容についておさらいしましょう。
設定する項目は以下の4つです。
①Block Number (1-32)
②Downscale Factor (0.1-9.0)
③Start Percent (0.0-1.0)
④End Percent (0.0-1.0)

上の説明に当てはめると、
①はモジュールの繰り返し呼び出しの項目あたりに該当すると思われます。
②はダウンサンプリングの部分に該当すると思われます。
③④はタイムステップの部分に該当すると思われます。

Block numberについて

ちょっと専門家ではないので、なんとも言えませんが、上のサイトの解説にあるAttentionブロックみたいな感じの層の数みたいなものをかと思われます。そのため、ブロック数を増やすことで、生成される画像において、より詳細かつ深い表現が可能になる可能性があるパラメーターの様な気がしてます。

Downscale Factorについて

通常の画像生成において、ダウンサンプリングは2の様なので、その程度を変えるのかと思われます。上の議論のところでは、1.75の設定をしてる方がおられましたので、少し小さくする良いのかも。

<参考>以下はGPTさんに参考意見として推奨設定について聞いてみたものです。
<1024x1024の解像度>
Block Number:低め(例: 2-3)
解像度が低いため、ネットワークの浅い層での修正が効果的です。Downscale Factor:低め(例: 0.5-1.0)
高品質な詳細を保持するためには低い値が適しています。
Start Percent:低い(例: 0.0-0.2)
生成プロセスの早い段階から修正を開始します。
End Percent:中程度(例: 0.3-0.5)
生成プロセスの半ばで修正を終了し、細部を保持します。

高速化との関係について

理由は、よくわかりませんが、この拡張機能は使った場合に、通常生成よりも少し早くなります。

実例紹介

<例>Paperspace A4000、9527DetailRealisticのライトニングモデルを使用
20ステップ 2M Karras
(Photorealistic:1.2), (RAW photo:1.2),
1girl, japanese, kawaii, beautiful face, happy, long hair, denim outfits, park, outdoors, detailed background, perfect anatomy.

①「Kyoha HR fixなし」の通常生成
1024x1024:おおむね1枚あたり、8.3秒程度で生成

②「Kyoha HR fixあり(デフォルトの値のまま)」の通常生成
1024x1024:おおむね1枚あたり、7.0秒程度で生成

拡張機能を入れるだけで、1秒近く早くなっていることが分かります。

しかしデフォルトの設定だと、イマイチな画像になりがちな印象

そのため、この高速化を活かすため、質が落ちない、あわよくば質が上がる設定をするという方向性が良いかと思います。

上の設定をするにあたって私がした方法について記載しておきます。

最初に設定をしておく値2項目

ダウンスケール
理由はわかりませんがダウンスケールについては、「2」より小さい値、調整が面倒なら1.75あたりにしておくと良いと思います。
スタートの時間0.01(0.1でも良いかも)にします。

すると、ちょっとマシになります。

7.3秒

次に終わりの数字をもう少し増やします。
なんとなくその方が早くなる気がするので。
0.5くらいまでは問題ない気がします。

7.0秒

次にブロック数です。
低くするとわずかに早くなりますが、画像が崩れることがあります。
プロンプトとモデルによって最適な数値は異なると思いますが、5以上で、段階的に上げて行く感じが良い気がしてます。

ブロック数1
ブロック数5の場合 7.4秒
ブロック数10の場合8.4秒
ブロック数32の場合8.4秒

上げすぎると、構図が逆に変になる場合もありますし、生成速度か少し遅くなります。上のだと、ブロック数が10だと、通常生成と同じ速度になりますが、それ以上だとそれほど速度の変化が出ませんでした。

通常生成では反応が悪いプロンプトも反映してくれる場合もあるのでいろいろとチャレンジしてもいいかもしれません。

<感想>
やってみて、感じたことは、最適な数値の設定を求めすぎてはいけない拡張機能だと思います。
早くなるなら良いんじゃない的な感じでしょうか。

ちなみにブロック数を増やしておきる生成速度の低下は4ステップとかだとそれほど増えません。

無し 2.3秒
ブロック数10 2.4秒
ブロック数20 2.5秒
ブロック数32 2.4秒


この記事が気に入ったらサポートをしてみませんか?