ControlNetのSegmentationで家具や建物などシーンのディテールに拘ったイラストを生成する
まだまだ続くよcontrolnetとsegmentation。
ここ数回のコントロールネットとセグメントの記事では「人のポーズや構図」をセグメントを使って指定していました。
ただ、もともとセグメントはシーン認識のメソッドで、建物や家具などを自動的に塗り分けることが目的です。
つまりシーン(背景)を描くのが得意です。
というわけで、本体の目的であるシーン(背景)描写でセグメントを使ってみましょう。






segmentaitonの塗り分けは、controlnetのPreprocessorで「seg_ofade20k」を使えばやってくれます。
もしくはChatGPTなどに「画像をドロップしたらADE20Kで塗り分けてくれるスクリプトが欲しい」と言えば作ってくれると思います。
なお、PreprocessorとGPT製スクリプトだとなぜか色分けが違いました…。両方とも使えるのは確認しましたが、細かい部分で差があるのかもしれません。個人的にはスクリプトを使っています。本記事のセグメント画像もすべてスクリプト産です。
セグメンテーションは基本的に「塗った部分」に対応します。塗られていない部分は関与しない、もしくは参照画像の描写を参考にします。
また、塗られた部分でもプロンプトによる上書き・加筆が可能です。
例えば上の赤い水が入ったバスタブが和室に置かれている絵ですが、これはプロンプトなしで、コントロールネットの数値は強度1終了ステップ1になっています。
つまり塗り分けたイラストだけを見て、そこで指定されている「床」「バスタブ」「水」「ラグ」「手摺」が描かれています。
指定されていない壁は描いていないし、指定されている「水」や「床」もそれ以上の指定(プロンプト)がないので、赤くなったり畳になっていたりとTPO完全無視な絵になっています。
逆に言えば、ちゃんとプロンプトで指定すればそれっぽくなります。

こちらは「bathtub, bathroom」だけ指定しました。バスルームになったことで一気に違和感がなくなっています。まだ水がびみょいですが、その辺は調整しながら完成させればOKです。
なお強度と終了STEPを下げると、塗り分けた参照画像の再現性が下がっていきます。バスタブの形が変わるのはもちろん、蛇口が左の壁にも追加されて2個になったり、お風呂にアヒルが浮かんだり、いきなり全裸の女の子が入ることもあります。
カッチリ再現したいときは1-1で、参照にとどめて融通を利かせたいときは0.9-0.7の間あたりで調整してみましょう。
自分は0.9-0.7ぐらいでやることが多いです。
数値はもっと小さくできますが、あまり小さくするとコントロールネットの効果がほとんどなくなってしまうこともあるので要注意です。



セグメントでシーンを描きつつ人も足す
セグメントで描いたシーンに人を付け加えるには、プロンプトで足すやり方と、セグメントに描き足すやり方があります。

プロンプトやコントロールネットの設定値を弄ると、
後ろから別の人物に抱きかかえさせたりすることもできる。
ここから先は
この記事が気に入ったらチップで応援してみませんか?
