ControlNet Segmentationの使い方と解説。同じ構図で画像を生成。

ControlNetは機能が多すぎて、どれを使って良いかわからないですよね。そんな人の悩みを解決するためにControlNetの実用例を解説しています。今回、取り上げるのはControlNet Segmentaionです。本記事を読むことで次のような疑問が解消されるでしょう。

  • ControlNet Segmentationって何?
  • ControlNet Segmentationの具体的な実用例は?
  • ControlNet DepthやNormalMapなどの類似手法との違いを知りたい。

Segmentationとは?

Segmentation(セグメンテーション)技術は画像から物体を検出して、オブジェクトごとに画像を領域に分割する技術です。このセグメンテーション技術をControlNetに利用することで、分割された領域に基づいて画像生成することができます。

「プロンプトから画像を生成する」場合と「Segmentationを使用する」場合の違い

プロンプトから画像を生成する場合と比べるとSegmentationは構図を固定したまま画像を生成できるので、決まった位置に人や物を配置できるので便利です。気に入った構図の画像があれば様々なパターンで画像を生成できるので便利です。

ControlNet DepthやNormalとの違い

ControlNet DepthやNormalはSegmentationと似ている技術です。これらもオブジェクトごとに領域を区切るとという意味では同じです。異なる点はSegmentationの特徴は奥行きを保持しないことです。一見デメリットに思えますが奥行き情報に左右されない画像生成ができるので、奥行きが取得しづらい画像やデティールを変更したい場合に有効な手法です。

Segmentationでできること

ControlNet Segmentationのインストールと使用方法について説明する前に、できることの例として次の2つを紹介します。

  • シルエットから復元
  • 同じ構図で画像を生成する

シルエットから復元

左が参照画像、右がControlNet Segmentationを使って生成した画像

同じ構図で画像を生成する

左が参照画像、右がControlNet Segmentationを使って生成した画像

ControlNet Segmentationの利用方法

ControlNet Segmentationの事前準備

ControlNet SegmentationはStable Diffusion Web UIの拡張機能、ControlNetの機能の1つです。 そのため、ControlNet Segmentationを利用するためには、ControlNetがインストールされている必要があります。 もし、インストールしていない場合は以下の記事を参考にControlNetをインストールしましょう。

ControlNet Segmentationのインストール方法

ControlNet Segmentationの利用にはControlNet Modelが必要となります。以下のリンクから次の2つのファイルをダウンロードしてstable-diffusion-webui/models/ControlNetへ配置してください。

  • control_v11p_sd15_segmentation.pth
  • control_v11p_sd15_segmentation.yaml
lllyasviel/ControlNet-v1-1 at main
We’re on a journey to advance and democratize artificial intelligence through open source and open science.

ControlNet Segmentationの使い方

ControlNetのメニューを次の手順にしたがって設定します。

  1. 生成する画像のプロンプトを入力します。
  2. 「▼」をクリックしてControlNetのメニューを開きます。
  3. 参照画像をControlNetのメニュー画面にセットします。
  4. ControlNetを有効にするため”Enable”にチェックを入れます。
  5. Control Typeで”Segmentation”を選択します。これでPreprocessor(前処理)とControlNet Modelが設定されます。
  6. 特徴抽出ボタン「💥」をクリックして特徴抽出します。前処理が適用されて特徴抽出の結果が表示されます。
  7. これでControlNet Segmentationが適用されるので、”Generate”をクリックして画像を生成します。

Segmentationの設定について

ControlNet Segmentation Preprocessor(プリプロセッサ)

以下は、各ControlNet Segmentationの各プリプロセッサに関する詳細です。

  • seg_ofade20k: ADE20Kデータセットを使用してセグメンテーションマップを生成します。ADE20Kは、シーン理解のための大規模なデータセットで、多くのオブジェクトカテゴリが含まれています。このプリプロセッサは、画像内のさまざまな要素を識別し、カテゴリ化して操作しやすくします。
  • seg_ofcoco: COCOデータセットを使用してセグメンテーションマップを生成します。COCOは、オブジェクト検出、セグメンテーション、キャプション生成などのコンピュータビジョンタスクに使用されるデータセットです。seg_ofade20kと同様に、画像内のオブジェクトを識別し、カテゴリ化することが目的です。
  • seg_ufade20k: これもADE20Kデータセットを使用してセグメンテーションマップを生成しますが、パフォーマンスはseg_ofade20kやseg_ofcocoに比べて劣るとされています。※1

これらのプリプロセッサは、ControlNet Segmentationモデルと組み合わせて使用され、画像生成プロセスにおいてセグメンテーションマップを条件付き入力として利用します。

I highly recommend one of seg_ofade20k and seg_ofcoco because their performance are far better than seg_ufade20k.

GitHub – continue-revolution/sd-webui-segment-anything: Segment Anything for Stable Diffusion WebUI

※1: seg_ofade20k と seg_ofcoco becauseを使うこと推奨します。なぜならseg_ufade20kよりもはるかに精度が高いからです。

コメント