🦊Unsampler
👈 |
拡散モデルはノイズをスタートとして、そのノイズがどんな画像からできたかを予想することで絵を描く仕組みでした 🦊ComfyUIでやってみる
🪢カスタムノード
https://gyazo.com/a0443475cc8df23b77ec978103328675
🟩入力した画像を完全なノイズに戻します
ノイズをデコードしたものを薄目で見ると、なんだか形がそれっぽいですね
🟨それを元にtext2imageをすると、あら不思議、入力した画像と同じものが生成されます
プロンプトが空でないと、影響を受けて別の絵になってしまいます
生成された絵で無くても、その絵になりそうなノイズを推測することができます
どこで使うのか
プロンプトやControlNetなどの制御が全く無かった場合、どんな絵が出来るかは、素となったノイズがどんな模様をしているかに依ります
https://gyazo.com/bbb1bca709f4a0b20735da8222d6e3f9
image2imageは元絵に適当な量のノイズを追加してデノイズすることで、元絵を参考にしながら新しい絵を作るものでした
しかし、ここで追加するノイズは元絵とはなんの関係もない完全にランダムなものです
text2imageだったら象になるかもしれないし、ビルになるかもしれない
象に行き着くノイズで、人の顔をimage2imageするのはナンセンスな感じがしますね
ここで登場、Unsampler
Unsamplerは完成した絵から、素となったノイズを予測します
当然ながらUnsamplerが作ったノイズは、(人の顔であれば)人の顔を描くためのノイズになるわけです
image2imageでランダムなノイズを使うよりも、このUnsamplerで作ったノイズを使うほうが良さそうな気がしてきませんか?
Unsamplerでimage2image
https://gyazo.com/c597e3135b3d11d31cc15cb6eeadfb4c
🟩end_at_step 10 🟨start_at_step 10でimage2image
表情だけ変化させましたが、他の部位への影響は比較的少ないですね
弱点をいうかは人それぞれですが、Unsamplerはノイズを生成したいため、シードガチャが出来ません
代わりにBNK_InjectNoiseノードというノードでランダムなノイズを少し注入することで、生成する絵を微調整するというテクニックがありますが、ここまでやるとシンプルなimage2imageの代わりに使うか微妙なラインになってきますね 応用研究
このアイデアをさらに深めて、もっと正確な画像編集に使おうという研究がいくつかあります
ComfyUIではあまり実装されていませんが、既存のノードで再現できるかもしれません