[Stable Diffusion] 拡張機能ControlNetの使い方まとめ

# [Stable Diffusion] 拡張機能ControlNetの使い方まとめ
前提条件：Stable DiffusionとControlNetのインストールは完了している

## ControlNetとは
ControlNetはpreprocessorとmodelを利用して、画像を作成します。

▪️ preprocessor（前処理装置）

ControlNetのpreprocessor（前処理装置）は、画像をAIモデルに渡す前に、データを適切に整えるための道具や方法を指します。簡単に言えば、画像をAIが理解しやすい形に変えるための準備作業です。

▪️ model（モデル）
AIにおける「モデル」とは、特定のタスク（例えば、画像認識、自然言語処理、予測分析など）を実行するために訓練されたアルゴリズムや数学的な構造を指します。

参考：https://sae-chan.net/controlnet-preprocessor-model-guide/


## ControlNetのパラメータ設定画面の見方
![スクリーンショット 2024-05-31 14.28.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286094/377a5f9d-f3d7-a698-95f6-98a5080eef44.png)

**①画像アップロードエリア**
ここで画像をドラッグ＆ドロップするか、クリックしてデバイスからアップロードできます。

**②有効化（Enable）**
このチェックボックスをオンにすると、ControlNet機能が有効になります。チェックを入れると設定が適用されます。

**③ピクセルパーフェクト（Pixel Perfect）**
入力画像に対してピクセルレベルの正確さを維持する設定です。一部のタスクでは品質が向上することがあります。

**④プレビューを許可（Allow Preview）**
このオプションをオンにすると、ControlNetの効果をプレビューできます。設定が画像にどのように影響するかを事前に確認できます。

**⑤コントロールタイプ（Control Type）**
画像処理の方法を決定するための様々なコントロールタイプを選択できます。

**⑥プリプロセッサ（Preprocessor）**
画像に特定の調整を適用するためのプリプロセッサを選択するドロップダウンメニューです。オプションには none、各種画像前処理技術、白背景と黒線のための反転などがあります。

**⑦モデル（Model）**
処理に使用するモデルを選択するドロップダウンメニューです。選択したモデルが、選択したコントロールタイプと設定を画像に適用します。

**⑧コントロールの重み（Control Weight）**
スライダーを使って、ControlNetの最終画像に対する影響度を調整します。値が高いほど効果が強く、低いほど効果が弱くなります。

**⑨コントロールモード（Control Mode）**
プロンプトとControlNetの重要性のバランスを取るためのオプションです。選択肢には Balanced、My prompt is more important、ControlNet is more important があります。

**⑩リサイズモード（Resize Mode）**
画像のリサイズ方法を制御するオプションです。選択肢には Just Resize、Crop and Resize、Resize and Fill があり、それぞれアスペクト比を維持したり、画像エリアを埋めたりする異なる方法で画像サイズを調整します。

# 主要なControlNet機能紹介
## 1.DW Openpose
DWPose（DW Openpose）とは画像に写る人物のポーズを推定するためのモデルです。

Stable Diffusionなどの画像生成AIに応用することで、生成画像の人物のポーズを制御できます。

例えば、バーチャル試着体験で自分の写真をアップロードし、様々な服を試着させたい時などにDWPoseを利用すれば便利です。
 

### DWOPENPOSEの使い方
- preprocessorで`dw_openpose_full`を選択
![スクリーンショット 2024-06-01 17.35.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286094/9f5df528-49b6-114d-d5a3-615ee9848879.png)

- modelで`control_v11p_sd15_openpose`を選択

Modelの「control_v11p_sd15_openpose」がない場合は[Hugging Face](https://huggingface.co/lllyasviel/ControlNet-v1-1/blob/main/control_v11p_sd15_openpose.pth)からダウンロードして「stable-diffusion-webui\models\ControlNet」フォルダの中に「control_v11p_sd15_openpose.pth」ファイルを置いておきます。
![スクリーンショット 2024-06-01 17.44.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286094/791df5dd-779c-f8c2-82ce-b2ef040eadf2.png)


- 参考にしたいポーズの画像をドラックアンドドロップします。
- Enableを選択
- PixelPerfectを選択
- AllowPreviewを選択
- OpenPoseを選択

![スクリーンショット 2024-06-01 17.46.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286094/d94dc41c-f8d2-64eb-4ab1-d4abab203d81.png)

- previwボタンを押すと、プレビューが表示されます
（表示されない場合はAllow Previewにチェック入ってるか確認）

![スクリーンショット 2024-06-01 17.49.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286094/5803f081-1ed7-e0a9-29b9-48185ee9680b.png)

- 同じポージングをしている画像が作成されていれば OK

![スクリーンショット 2024-06-01 17.51.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286094/8c552026-8f1f-ef8e-de24-0f0db31ab861.png)

## 2.Lineart
Lineartを利用すれば、元画像から「線画」を推定して抽出し、さらに線画をベースに色を塗ることも可能です。

画像イラストの色だけを変更したい場合などに利用すると便利です。

### Lineartの使い方
- PreProcessorにlineart_standardを選択します
- Modelにcontrol_v11p_sd15_lineartを選択します

ControlNet Modelが存在しない場合はリンクからを[control_v11p_sd15_lineart.pth](https://huggingface.co/lllyasviel/ControlNet-v1-1/tree/main)をダウンロードしてstable-diffusion-webui/models/ControlNetへ配置してください。
![スクリーンショット 2024-06-02 12.28.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286094/c4d06497-11a1-d2a8-d456-aeb1f7d46387.png)


-　画像をドラックアンドドロップします
-　Enableにチェックを入れます
-　Pixel Perfectにチェックを入れます
-　Allow Previewにチェックを入れます
-　LineAartにチェックを入れます

![スクリーンショット 2024-06-02 12.29.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286094/41d77a4e-af11-72a5-c75f-d346d435e5e1.png)

- Previewボタンをクリック
- Lineartのプレビュー画像が出ればOK
![スクリーンショット 2024-06-02 12.29.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286094/d1ce5b46-3e7c-5e3e-271d-1455d575ea2e.png)

- PNG infoタブをクリック
- Send to txt2imgをクリックして元画像のプロンプトを抜き出す
![スクリーンショット 2024-06-02 12.33.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286094/609fdde4-cb69-aaa5-f105-8d3f4c589ca3.png)


- プロンプトを変更します、Generateをクリック

```
Photo of a dancing beautiful Japanese idol 20 years old woman on stage in front of crowd audience.idol uniform,
↓
Photo of a dancing beautiful Japanese idol 20 years old woman on stage in front of crowd audience.idol red uniform,(red uniformに変更)
```
![スクリーンショット 2024-06-02 12.34.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286094/089a05cb-040d-57e1-7295-a2a31c3d2f9a.png)

- 元の青色のユニフォームが赤になっていればOk

![スクリーンショット 2024-06-02 12.39.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286094/9c6ac635-cbb7-68b1-d30e-cf99c1289f4e.png)

- プロンプトがうまく動かない場合はMy prompt is more importantを選択しててください

![スクリーンショット 2024-06-02 12.39.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286094/3631288e-cd21-56c3-0d45-1e7d785f0757.png)

## 3.inpaint
inpaintを利用すれば、選択した部分だけの画像を変更することが可能です。

例えば、目や髪の色だけ変えたい場合や、髪型や表情の一部だけ変更したい場合に便利です。



### inpaintの使い方
- PreProcessorにinpaint_onlyを選択します
- Modelに[control_v11p_sd15_inpaint_fp16.safetensors](https://huggingface.co/comfyanonymous/ControlNet-v1-1_fp16_safetensors/blob/main/control_v11p_sd15_inpaint_fp16.safetensors)を選択します
 
![スクリーンショット 2024-06-04 19.51.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286094/2209d65a-53a2-a488-25c7-3c599dd65e41.png)

- 画像をドラックアンドドロップして、変更したところをマスキングします
- enable, pixel perfects, allow previewにチェック

![スクリーンショット 2024-06-04 19.51.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286094/4b3a43f0-115a-4e07-da4f-b566c75a3a85.png)

- プロンプトの変更
```
Photo of a dancing beautiful Japanese idol 20 years old woman on stage in front of crowd audience.idol uniform,
↓
Photo of a dancing beautiful Japanese idol 70 years old woman on stage in front of crowd audience.idol uniform,
```

- 顔だけ変更されていればOK
![スクリーンショット 2024-06-04 19.58.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286094/9add8fe5-7708-75e4-b253-a9c9b0cf6b2b.png)

## 4.reference
ControlNetのReference onlyは、元画像の特徴を含んだ画像を生成できます。
元画像の特徴を継承しながら、服装や背景、画風の変更が可能です。

### referenceの使い方
- PreProcessorにreference_onlyを選択します
- 元画像をドラッグ&ドロップでアップロードします
- enable, pixel perfect, allow previewを選択
- referenceを選択
![スクリーンショット 2024-06-05 16.40.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286094/6e7b7673-0608-6c1e-c211-da6f25efb3ff.png)

- 元画像の特徴を継承しつつ、服装が変更された画像が生成されていればOK

![スクリーンショット 2024-06-05 16.46.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286094/765af2b2-48f3-2fcc-6467-f575fac93858.png)

# まとめ
Stable Diffusionの拡張機能ControlNetでよく利用する機能を紹介しました。

ControlNetでは他にもたくさんの拡張機能を兼ね備え得ているので、気になる方は調べてみてください。