generated at
🦊image2image

参考


image2imageは参考画像を下書きにしてもらって、その上から絵を描いてもらう方法です
しかし、完璧にトレスしては複製してるだけで、なんのオリジナリティもないですね
そこで、元の絵が分かる程度にノイズを追加してから、デノイズしてもらうことで元の絵をいい感じに使いつつ新たな絵を書いてもらいます
ちょっとしかノイズを追加しなければ元絵の微調整に使えますし、たくさんノイズを追加すれば元絵の雰囲気を継承しつつオリジナリティが増した絵が作れます


🤔ComfyUIではどうやっているのか?
KSamplerでは、まずノイズを追加してからサンプリングをしてノイズを除去していきます
start_at_step が0、 end_at_step が20の場合、最初にノイズが満量追加されていますね
では、 start_at_step を1にしてみましょう
追加されるノイズが減って、元の画像が少し見えるようになりました
もう少し増やして、 start_at_step を5にしてみましょう
追加されるノイズが減って、元の画像が大分残っていますね
では、 start_at_step を20にしたらどうなるでしょう?
そうです、まったくノイズが追加されずサンプリングもされません
これが完璧にトレスした(入れた画像がそのまま出てくる)状態です
ということで、 start_at_step が1 ~ (step数 - 1)までが元の絵を残しつつサンプリングしている状態 = image2imageとなります


🦊ComfyUIでやってみる
説明のためにKSamplerAdvancedノードを使いますが、後述しますが無印KSamplerを使うのをおススメします
読み込んだ画像をVAEEncodeで潜在空間に変換してKSamplerAdvancedに送り込みます
読み込んだ画像の大きさでそのままサンプリングするので、うっかり4Kの画像を使っていたりすると大変なことになります
その場合はImage Resize for ComfyUI等で画像を小さくしてからVAEEncodeノードに接続します

start_at_step と生成画像の関係
上のグラフで見た通り、 start_at_step が0とき元の絵を完全に無視(text2imageと同じ)し、steps数と同じ時は読み込んだ画像がそのまま出てきます
step数20なら start_at_step を10にすればノイズと元絵のバランスが1:1になる感じがしますが、そうじゃないんですね
特に後半はどこのstepでスタートしても大して絵が変わりません


🤐余談 : EmptyLatentImageノードの中身
text2imageで使うEmptyLatentImageノードをそのままVAEDecodeにつなげてピクセル画像にしてみると土色の画像がでてきます
text2imageは、この土色の画像を start_at_step 0でimage2imageしたもの、と言い換えることもできるわけです


💫無印KSamplerノードへの変換
ここまでKSamplerAdvancedノードでやってきましたが、無印のKSamplerノードでもimage2imageはできます
ただし大きな変更が2箇所あり、そしてとてもわかりにくいです


denoise
ここにあった説明間違ってました、もし見てたら忘れてくださいnomadoor
denoiseはどのタイミングでサンプリングを始めるかを設定します
1.00だとtext2image、0.00が元の画像がそのまま出てきてしまう値です

steps の扱い
これが無印とAdvancedで大きく違います
KSampleAdvancedでstep数 20 / start_at_step 4の設定のとき、サンプリングされるのは黒い部分です
step数 - start_at_step 回、この例では16回サンプリングします
では無印KSamplerで同じ結果になりそうな、step数 20 / denoise 0.8で生成するとどうなるでしょう?
なんと黒い部分のみで20stepあります
denoiseが0.5であっても0.1であっても20回サンプリングします
もしKSamplerAdvancedと同じ結果を出したいならばstep数を毎度計算しないといけません
$ 設定するstep数 = 全体のstep数 * denoise


🤔無印とAdvancedどちらを使うべきか?
ちなみにStable Diffusion web UIの動作はKSampleAdvancedと無印KSamplerの間です
step数 20でdenoising strengthが0.5だった場合、サンプリングは10回です

step数は固定にする場合
denoiseが0.9とか0.8のときはどちらを使ってもそんなに違いはありません
問題はdenoiseが小さいときです
step数20でdenoiseを0.1にするとKSamplerAdvancedは2stepしかサンプリングしません
大して無印は関係なく20回サンプリングするのでコントロール性能が高いといえば高いです
が、denoise 0.1にもなるとほとんど絵が変わらないのでstep数20は無駄です

タイミングを固定にする場合
無印はstep数を変更しようとタイミングには影響しない
KSampleAdvacedはstep数を変えてしまった場合、 start_at_step の値を計算する必要がでてきます
そして、計算してもちょうど当てはまるstep数がない(丸める必要がある)こともある

image2imageで大事なパラメータはなにか?
と聞かれたらそれは確実にタイミングの方が大事nomadoor
step数が増えたり減ったりしたところで、多少生成される画像の品質が変わるだけ
タイミングはちょっとずれると元絵との差が大きくなってしまう

と、いうことでimage2imageのときは無印KSamplerを使うのをおすすめしようと思うんですが皆さんどう思いますか?nomadoor
startとendの扱いにまだなれてない人&&image2imageであれば同感です
KSamplerAdvancedに慣れてても無印を使った方がいいような気がするんですよねnomadoor
微調整のしやすさが段違いで、denoise 0.76とかをKSamplerAdvancedでやろうとすると、step数100でstart 34…? step数20ならstartどこ…ここ…?みたいになっちゃう