resampleの詳しい解説!いつ使うのか?設定はどうしたらいいのか?などを解決2023/05/29:Preprocessorにcolorfix系が追加されたため追記。DiffusionのエクステンションであるControlNet(1.1)が持っている機能の1つ。小さい画像をアップスケール(拡大して再生成)する場合に、細部を書き込みながらも元画像を維持する働きをする。元絵のイメージを保ちつつも画像のディティールアップに貢献する補助機能といってよいかと思う。小さい画像をアップスケールする時にクオリティアップ!ControlNet本体の機能などを解説した記事は次。読んでない方は次を先に読むことを推奨。謎の技術研究部よってControlNetに関する基本的な内容は解説しないので注意。そもそもアップスケールって何AIイラストでは大きいサイズの画像を生成しようとすると途端に処理時間が長くなってしまう。そこで、まずある程度小さいサイズで何度か生成し目的に近い画像を作る。次にそれを画像サイズを拡大しながらも細部をAIに加筆させることで良い画像に仕上げていくという作業が一般的。この拡大する処理のことをアップスケールと呼ぶ。AI絵はビデオカードのメモリに応じて生成できる画像サイズに限界がある。この限界を突破する方法は後述。画像サイズを上げるだけではダメでは、実際にアップスケールはどうしたらいいのだろうか。512サイズで生成してみる。この画像を大きくしながらも細部をより綺麗にしたい。生成サイズを大きくすればいいじゃない?「画像サイズを大きくして生成すればいいじゃない」という考えが浮かぶが、そう単純ではない。上と同じプロンプト、シード固定で画像サイズを大きくして再生成するとこのように完全に違うイラストが描画されてしまう。Diffusionには標準でアップスケーラー機能がついている。byというのがありこれが画像を大きくしてくれる。これはあくまでAIが画像を引き伸ばしする機能である。わずかにリファインされるが、新たな書き込みは殆ど追加されない。fix機能を使えば良い、というのは1つの解だ。tile_samplerなど使わなくてもこれで良いのではないか?と思ったユーザーも多いだろう。残念ながら、これにもデメリットがある。実際にやってみて確認しよう。fix明らかに右の画像のほうが良くなっているし、元画像の雰囲気も壊していない。気づいた人が殆どだろう。洋服の形状は違うし左手のポーズも変わってしまった。え?だめなんですか?これはこれで良い絵がでているので一見「いいじゃん?」と思いがちだ。fixを通したことでせっかくのイメージが崩れてしまうことが実はよくある。なってしまっては、そもそも画像を大きくしないほうが良かったということになりかねない。Resampleが使える。「元絵のイメージを崩さないで、細部を書き込む」機能だ。用意するモデルファイル次のサイトからcontrol_v11f1e_sd15_tile.pthをDLし、モデルフォルダにいれておく。main設定Preprocessorはtile_resample、Modelは上記のものを入れる。PerfectのチェックはControlNet側の画像サイズ指定を簡略化してくれるものなので、特に問題がなければオンにしておこう。Rateというのもあるが、ここはデフォルトの1のままにしておこう(後述)あくまでアップスケールの「補助」ツールtile_resampleを設定しておけば自動でアップスケールしてくれるものではない。それらの補助ツールだ。fixを併用したりするもの。ここからはそれらと組み合わせるにはどうすればいいかを実例で交えて紹介する。単純に画像サイズを大きくするだけでもOKtile_resampleを設定しておけば、単純に生成サイズを大きくするだけでもアップスケールができる。1024サイズに変更これを見てわかるようにtile_resample+1024サイズにしただけで、細部の書き込みを増やしながら元画像のイメージを殆ど維持しているのがわかる。これを見ると色味が若干変わっているのでこの辺りは要調査かもしれない。t2iを使うときは小さいサイズの元画像をControlNetに放り込むことを忘れないように。プロンプトが同じでもこれを忘れてしまうと全く別の画像が生成されてしまう(筆者はけっこうやりがち)画像サイズに限界あり画像サイズの限界はVRAMに依存するので注意。fixで2倍にこのケースだと右のほうがわずかに書き込みが増えている。fixを併用する方法が有効かもしれない。Strengthは0.5よりも小さくすると画像が壊れがちなので0.6ぐらいを推奨。byに何倍に拡大するかを決めるControlNetにtile_resampleと元画像を設定して生成開始ひとまずこれだけでOK。詳しくは別サイト参考。画像サイズに限界ありこちらも画像サイズの限界はVRAMに依存する。3種類のtiletile系には3種類のPreprocessorが存在するので解説する。tile_resampleこちらが基本のtile_resampleアップスケールしながらもプロンプトによって効果やカラーを載せていく場合はこちらを使う。tile_colorfixこちらは元絵に忠実なカラーを再現するモード。通常のtile_resampleだと色が変わってしまう問題に対応したもの。可能な限りオリジナルに描かれている塗りを維持するようになる。デメリットとしてプロンプトによる影響を受けにくくなるので効果を載せる等のコントロールの幅が無くなる。tile_colorfix+sharptile_colorfixだと線がすこし甘くなる印象があるが、それを補ってシャープにする。tile_resampleとtile_colorfixのいいとこ取りをしたイメージ。実際にサンプルを用意した。Diffusionのエクステンションを併用する。4.0これに関しては詳しく解説しないが、1つのエクステンションで2つの機能がある。VAEをオンにすることで巨大な画像をタイルに分割して生成するのでかなり大きな画像も生成可能。fixで1536と2048サイズを生成した例。1536サイズ2048サイズさすがに2048サイズだと書き込める余地が多く、逆にAIが迷っているようになのでほどほどに。これまでの例の中でも、こちらの1536サイズは線も美しく一番好みな結果となった。VAE使用)で画像を生成すると次のようなものが出る。そもそも大きすぎる画像はこのようにカオスな状態になりがちなので、こういうときにもtile_resampleの恩恵がある。一歩踏み込んだ使い方。元絵のキャラを維持したままエフェクト的な書き込みを増やすテクニック。Diffusion本体のモデルを変えてしまってもOKこうすることにより、元絵のキャラクターに別の効果を与えることが出来る。いくつか例をだしてみる。resampleを使うことでキャラクターに効果を乗せるような動きをする。実はこちらの使い方も非常に有用なのではないだろうか。resampleはデフォルトの512サイズよりも小さい画像からスタートしてもかなりうまく作用する。160x160の小さいサイズを拡大したらどうなるのかをテストした。resampleが上手く作用してアップスケールに成功している。小さいサイズの画像をいくつか選定して、好みのものだけアップスケールするというワークフローを経由すれば非力なPCでも好みの画像が作れそうだ。小さいサイズだと風景のような書き込みが多いイメージは作れないので、バストアップのキャラぐらいが精一杯になるかもしれないので参考までに。Rateというものがある。こちらはシンプルに画像をボカす度合いになる。この値を上げると、元画像がよりボケた印象になり、あまり上げ過ぎると生成される画像もボケた画像が出てきてしまう。これが実際にどういう時に使うべきかはいまいち分かっていない。安易に数値を上げてしまうとアップスケールどころか霞んだ効果になってしまうので基本はデフォルトの1のままで良い。すると逆に解像度が高すぎる画像をボカす時に使う?あくまで予想。おまけ2:実はPreprocessorはnoneで良い実はこの機能PreprocessorをnoneにしたままModel側だけ設定してやっても正常に動作する。Rateの設定1と変わらないので面倒なら設定しなくても良い。resampleはアップスケールする処理のサポートとして、元絵のイメージを壊さないまま細部を書き込むような挙動になる。自分がイメージしたままの画像を維持し、さらに上のクオリティを目指すユーザーには必須の機能になるかもしれない。アップスケールを使ってクオリティを上げていく作業にぜひとも併用してみてほしい。DiffusionAIControlNetこの記事をシェア著者Ultra-Noob謎の技術研究部部長。3DCG以外にもDTMやプログラミング等も研究する。謎の技術研究部とはプライバシーポリシーホーム(自動スクロールなし)ご意見、お問い合わせ。