こんばんは、スタジオ真榊です。このところAIと著作権をめぐる投稿が続いてしまったので、しばらくは本題に戻って、いつものStableDiffusionを使ったAIイラスト術について紹介していきたいと思います。今回はControlnet機能の一つ「Segmentation」の活用法についてです!
「ControlNet徹底解説!プロンプト苦難の時代が終わる…」でControlNetの各種機能については解説したところなのですが、前回は「Segmentation」だけ賢木の環境にうまく導入できず、説明を飛ばしてしまったんですよね。その後無事に活用できるようになったのですが、使えば使うほどに「Segmentationこそが構図を支配する聖杯…!」との思いを強くしたので、今回はじっくりその実力を確かめていきたいと思います。
Segmentationを導入しよう!
さて、まずは前回のおさらいから。ControlNetは参考画像をもとにさまざまな情報を抽出して、それをもとに新たな絵を生成してもらうi2iの進化版のような機能でした。「Canny」は輪郭抽出、「Openpose」はボーン抽出、「Depth」は深度情報抽出、「Scribble」でラフ読み込み、「Fake scribble」はcannyよりおおまかな輪郭抽出…などなどが前回紹介した機能でしたが、今回紹介する「Segmentation」はこちらの画像のように、画面上のどこに何が描かれているかを自動認識して色分け指定する画期的な機能です!

▼導入方法
前回説明したのと同様、ControlNet-modules-safetensorsから「control_seg-fp16.safetensors」をダウンロードし、「stable-diffusion-webui\extensions\sd-webui-controlnet\models」フォルダに放り込めばOK。Controlnetの画面上で適当な画像を読み込ませ、Enableをオン、preprosessorを「segmentation」、モデルを「control_seg-fp16」にして画像生成してみましょう。他の学習セットと同様、初回生成時だけ読み込みに時間が掛かりますが、上の「塗り絵」のような画像が表示されれば成功です。
※うまくいかないときはcontrolnetをアップデートしてみましょう。初めてsegmentationを使う際、初回の画像生成前に「preview annotator result」ボタンを押すとエラー表示になるかもしれません。構わず一度画像生成してみてください。
実際の操作画面
さて、導入がうまくいった前提で話を進めますが、実際の操作画面がこちらです。

さてこれ、一体何をしているのかといいますと、ADE20Kという規格で「イラスト上のどこに何が描かれているのか」を塗り絵にして抽出しています。それぞれの色には例えば「sky」「wall」「chair」といった情報が対応しており、AIはそれを基にして「この色で塗られているところには空を描けってことね」と理解できるんですね。

色と被写体の対応表はこちら。150種類の概念を各々振り分けられたカラーで塗り分けることができます。おりこう~!(実際にはここからさらに細分化され、もっと多くの概念を塗り分けられるようです)

こちらのリビングのイラストから構図を抽出したのが下図です。

ここまでどこに何が描かれているのかを理解させられるんですね。
controlnetでこの情報を入力してイラストを生成すると…

それぞれは違うイラストでありながら、完璧にそれぞれの被写体の配置を固定することができています。さきほどの色分け画像と見比べてみると、壁の写真や本、クッション、ラグ、開いたドアなど、全ての位置関係を非常に詳細に理解してくれていることが分かると思います。




