見出し画像

コラム: サンプリングステップについて

前回の記事で解説できなかったサンプリングステップについてのコラムです。
https://note.com/lively_viola452/n/nbe921826de5b

サンプリングステップとは?

サンプリングステップとは、Stable Diffusionで画像を生成するときのステップ数のことです。このステップの数だけ拡散モデルの復元過程の計算を繰り返しています。
WebUIの設定画面では一番右上にあるSampling stepsに対応します。

WebUI上のサンプリングステップの位置


サンプリングステップが多いほど生成に時間がかかりますが、画像の描写が精緻になる傾向があります。

サンプリングステップを増やしたときの生成画像の変化

画像の生成時間はステップ数にほぼ比例しています。
10ステップだと2.9秒
20ステップだと5.1秒
50ステップだと11.6秒
100ステップだと22.2秒
※私の環境での実測値

サンプリングステップのイメージは計算密度

このサンプリングステップは通常イメージするステップとは少し意味合いが違います。
通常のステップは1ステップが等間隔で増えるほど長くなっていくイメージで2倍になれば2倍処理が先に進むように連想されます。

通常のステップのイメージ

しかし、サンプリングステップはステップが増えるほど間隔が狭くなって密度が上がっていくイメージです。2倍になれば2倍細かく計算しているという理解の方が正しいです。

サンプリングステップのイメージ

なぜ計算密度と理解できるのか?

サンプリングステップが多くなるほど計算密度が高くなるというのは、普段Stable Diffusionで画像を生成するときは計算を省略しているからです。
拡散モデルには拡散過程と復元過程があり、そのステップ数は本来1000回で学習されています。

拡散モデルにおける2つの過程

しかし、1枚の画像を生成するときに毎回1000ステップ分の計算をすると画像の生成時間が非常に長くなってしまいます。これを短縮するために編み出されたのが複数回のステップの計算を1回のステップの計算で近似するという方法です。

通常サンプリングステップは1000回ですが、
2回分を1回で計算することにすれば500回
5回分を1回計算することにすれば200回
10回分を1回計算することにすれば100回
のようにステップ数を減らすことができます。

よく使われるサンプリングステップは20~30回なので50~33回分を1回の計算で近似していることになります。

この近似計算がだいたい上手くいくおかげで短時間で画像生成することができます。
近似計算がより上手くいくサンプリング手法も研究されており、より少ないステップで同じような生成結果が得られるようになってきています。
研究者の皆さんに感謝ですね!

最後に

今回は、サンプリングステップについてコラムを書きました。
解説記事は一つを作るのがかなり大変なので、説明する要素を一つに絞って過去解説した内容を関連付けるコラムも書いていくと思います!

もしこういうコラムも書いてほしいという意見があれば、twitterか記事のコメントに書いてください!
フィードバックがもらえるとモチベーションも上がるのでよろしくお願いします!

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