画質の評価は難しい! WaveSpeed と Dynamic Caching の高速化を探る!

はじめに
こんにちは、きまま / Easygoing です。
今回は、前回に引き続き、WaveSpeed について検証します。
今回も、かなり技術的な内容に寄った記事になりますが、よろしくお付き合いください。
画像生成は最初が大事!
WaveSpeed は、画像生成を劇的に高速化する技術です。
前回、WaveSpeed の効果を検証しているとき、特に start の値を変えるとイラストが大きく変わることに気がつきました。
画像生成は、ノイズ画像から少しずつノイズを除去してイラストを生成していきますが、画像生成の 初期の精度 が画質に大きく影響するようでした。
4つの設定項目
WaveSpeed の Apply First Block Cache ノードには、次の4つの設定項目があります。

residual_diff_threshold (RDT):キャッシュを適用する際の閾値
start:適用を開始するタイミング
end:適用を終了するタイミング
max_consecutive_cache_hits (max hits):連続でキャッシュを適用する最大回数
今回は、それぞれの項目について、個別に調整 してその影響を比較してみます。
結果のグラフ!
まずは、結果のグラフをまとめて示します。
横軸:画像生成にかかった時間(秒)
縦軸:画質を表す指標(MAE / SSIM)
グラフの中で、赤と青の点が 左上 にあるものほど、画質と速度のバランスが良い ことを示しています。
① RDT(residual_diff_threshold)

RDT は、生成時間を速くすると精度が低下しています。
② start

start は先ほどの RDT と同じような傾向ですが、グラフ全体が上側にあり、先ほどより 精度の良い分布 です。
③ end

end は全体が下にあり、精度が低い ことを示しています。
④ max hits(max_consecutive_cache_hits)

max hits は、初めの RDT と同じような分布です。
start が一番大切!
4つのグラフを比べると、2番目の start のグラフが結果が左上に寄っています。
つまり、4つの指標の中で start が一番画質に影響する ことが分かります。
画質に影響する順番
start > RDT ≒ max hits > end

グラフによると、start は 0.2 ~ 0.3 ぐらいまで画質が大きく変化しているので、その辺りが調節の一つの目安になりそうです。
start だけで良い?
start が一番大切なことが分かりましたが、その他の3つの指標は画質に影響するのでしょうか?
ここでは、それぞれ RDT と start を調節して、半分の所要時間で生成したイラストを比較してみます。
RDT = 0.08(102 sec)

start = 0.3(108 sec)

どちらのイラストも同じ所要時間で生成しましたが、完成した 見た目が大きく違って います。
まず、MAE と SSIM に注目すると、いずれも下のイラストの方が高いので、構造は下の start の方が正確 です。
一方で、細部の描きこみを見ると、下のイラストは明らかに 描き込みが少なく なっています。
画像生成は初期の段階で大きな構造が決まり、後半で細部が描きこまれますが、start は 初期のタイミング を重視するため、構造は安定するものの描き込みが少ない結果になるのだと思います。
何事もバランスが大事
それでは、前回の検証で画質と速度のバランスが良かった ChatGPT オススメの設定を見てみます。
start = 0.2
end = 0.8
max hits = 5

これは、start, end, max hits をバランスよく配分した設定で、今までの検証の中で一番精度が良い結果です。
Dynamic Caching は、おそらく start が一番大切 ですが、他の設定も ある程度バランスよく 組み合わせる必要がありそうです。
Dynamic Cashing を使わないと?
今度は、Dynamic Cashing を使わず に、全体の Step 数 を変化させて画像を生成してみます。

step を少なくすると、画質は相応に低下します。
先ほどの ChatGPT オススメのグラフと比べると 全体的に下側 に位置しています。
Dynamic Caching は適切に設定すれば、step 数を減らすより 画質を維持しながら高速化できる ことが分かります。
Dynamic Cashing は、細部を省略する!
最後に、Dynamic Cashing はどのような描画を行うのか調べてみます。
Dynamic Caching の描画を確かめるために、次の2枚のイラストを比較します。
通常の 15 step(106 sec)

通常の 15 step + Dynamic Cashing の 15 step(合計 30 step, 147 sec)

下のイラストは、通常の 15 step に加えて Dynamic Cashing を 15 step 追加したものですが、全体の構造はしっかり したものの 細部は逆に省略 されていきます。
Dynamic Cashing を利用した推論は、大まかな計算結果は一致しますが、細部では RDT の設定値に応じた誤差 が生じます。
そのため、大きな構造は定まっていくものの、逆に細部は省略されていく結果になったと考えられます。
イラストの優劣は簡単には決め難いですが、シチュエーションによっては、下のイラストの方が シンプルで説得力 のあるイラストとして、好まれる場合があるかもしれません。

まとめ:画質の評価は難しい
MAE と SSIM には限界がある
start が一番大切だが、他の項目も影響する
Dynamic Cashing は、大きな構造を整えて細部を省略する
今回は、かなり奥が深い検証になりました。
今まで、画像の違いを評価するために MAE と SSIM を利用していましたが、今回はその限界を知ることができました。
今回検証した Dynamic Cashing は、人間のような 要点を捉えた大雑把な推論 を行っていて、その結果に面白さを感じます。

Dynamic Cashing は 画像や動画生成 AI だけでなく、これから 他の分野の AI にも応用できる画期的な技術です。
画像生成 AI は、世界中の人が開発に参加しているので、時代の最先端 に触れているのかもしれず、ワクワクします。
最後までお読みいただきありがとうございます!
参考
画像の生成時間がおよそ半分になったときの各設定のイラストを掲載します。それぞれのパラメーターが何を意図して設定されているのかが分かります。
① RDT = 0.08(102 sec)

全体の描画がやや不足。
② start = 0.3(108 sec)

構造は完成しているが、細部が足りない。
③ end = 0.4(102 sec)

構造が不正確なまま、細部が描き込まれている。
④ max hits(max_consecutive_cache_hits) = 1

全体の描画が不足。
⑤ No Dynamic Caching, step =15(106 sec)

全体の描画が不足。
測定データ
全ての測定データは こちら。
