本記事ではControlNet 1.1で初登場のControlNet Inpaint(インペイント)の使い方を解説します。インペイントはimg2imgにもありますが、ControlNetのインペイントよりも高性能なので、通常のインペイントが上手くいかない場合などに便利です。txt2img(t2i)画面でも使えるのでいちいちi2iに切り替える必要がない点もお手軽です。
本記事を読むと次のような疑問を解消することができます。
- ControlNet Inpaintのできること
- ControlNet Inpaintの使い方が知りたい
- Preprocessorの違いを知りたい
ControlNet Inpaintできること
ControlNet Inpaintでできることをまとめると次の通りです。
- 髪型変換
- 服装変換
- 不要な物体の消去/除去
文字だけだとイメージがわかないと思うので、まずはControlNet Inapintの結果をみてみましょう。具体的なControlNet Inpaintの使い方については後ほどしっかり解説します。
髪型変換
髪の部分にマスクをして、short bob hair
をプロンプトに追加した結果です。このようにControlNet Inpaintを使うことで髪型変換をできます。
服装変換
服の部分にマスクをして、t-shirts
をプロンプトに追加した結果です。このように服装変換をできます。
不要な物体の消去/除去
インペイントで不要な物体をマスクして消去/除去もできます。
ControlNet Inpaintの使い方
ControlNetをインストール
ControlNet InpaintはStable Diffusion Web UIの拡張機能、ControlNetの機能の1つです。そのため、ControlNet Inpaintを利用するためには、ControlNetがインストールされている必要があります。もし、インストールしていない場合は以下の記事を参考にControlNetをインストールしましょう。
ControlNet Inpaint モデルをダウンロード
ControlNet Inpaintの利用にはControlNet InpaintのControlNet Inpaint Modelが必要となります。以下のリンクから次の2つのファイルをダウンロードしてstable-diffusion-webui/models/ControlNet
へ配置してください。
- control_v11p_sd15_inpaint.pth
- control_v11p_sd15_inpaint.yaml
Stable Diffusion Web UIでの利用手順(txt2img)
ControlNetのメニューを開きます。(1/3)
以下の手順でInpaintの特徴を抽出します。(2/3)
- ControlNetのメニューに画像をセットして、変更を加えたい箇所にマスクを描きます。
- Enableにチェックを入れます
- Control Typeは”Inpaint”を選択。
- 特徴抽出ボタン「💥」をクリックして特徴抽出。
後はtxt2imgで画像を生成する手順で画像を生成します。(3/3)
- プロンプトとネガティブプロンプトなどを入力します。
- “Generate”ボタンを押して画像を生成します。
Stable Diffusion Web UIでの利用手順(img2img, i2i)
img2imgでの使い方は次の記事で解説しております。新しいバージョンではtxt2imgから使うよりもimg2imgで利用する方が便利になっています。
ControlNet Inpaintの具体的な使い方
髪型の変更
プロンプトに以下のようにbob short hair
を追記します。
プロンプト: 1girl, a 20 years old pretty Japanese girl in classroom.school uniform,blackboard, bob short hair
髪部分にマスクを書いて特徴を抽出します。
これで生成された画像は次の通りです。左が参照画像で右がインペイント後の画像です。呪文(プロンプト)に指定したbob short hair
がちゃんと適用されていることがわかります。
服装の変更
服の部分にマスクを描いて特徴を抽出します。
プロンプト: 1girl, a 20 years old pretty Japanese girl in classroom.t-shirts,blackboard
服の色を変えるが…色の書き換えは苦手なよう。
白いTシャツに変換するためにプロンプトを入力します。
呪文(プロンプト): 1girl, a 20 years old pretty Japanese girl in classroom.white t-shirts,blackboard
設定は先ほどと同じですが背景の黒板に引っ張られて上手くいかないです。
プロンプトの調整やPreprocessorを切り替えたりもしましたが上手くいきません。通常のインペイントも試しましたが次のような結果になります。
これらの結果からわかる通り、インペイントは色の書き換えには向いてないようです。もし服装の色を切り替えたい場合はControlNet TileやReference Onlyなども試してみてください。
物体の消去
黒板の展示物など消去してスッキリとした背景にしてみます。プリプロセッサをinpaint_only+lama
に変更してみます。理由はinpaint_only+lama
のほうが消去性能が良いと言われているからです。後ほど解説します。
結果は次のようになります。黒板の展示物が消去されていることが確認できます。
Inpaintの Preprocessorについて
InpaintのPreprocessorには次の3つの機能が用意されています。
- inpaint_only
- inpaint_only+lama
- inpaint_global_harmonious
inpaint onlyはマスクしたものをコントロールに入力する通常のPreprocessorです。
3つのプリプロセッサを比較
Preprocessorの説明をする前に、まずは違いを画像で確認してみます。先ほどのボブヘアへのインペイントをプリプロセッサを切り替えて比較してみます。
左上: 参照画像
右上: inpaint_only
左下: inpaint_only+lama(inpaint_onlyに比べると画像が馴染んているような)
右下: inpaint_global_harmonious(マスクした箇所以外も変更されている)
inpaint global_harmoniousとは?
inpaint global_harmoniousはマスクした周辺にも変更が加えられ画像が馴染むように修正する際に使います。
inpaint lamaとは?
inpaintのPreprocessorのlamaは安定性の高い手法の名前です。次の研究の手法で、おそらくLarge MaskのところをとってLaMaという名称がつけられているそうです。
次のControlNetのgithubページでonly+lamaについての説明がまとまっています。
その中で次のように言及されています。
The results from inpaint_only+lama usually looks similar to inpaint_only but a bit “cleaner”: less complicated, more consistent, and fewer random objects. This makes inpaint_only+lama suitable for image outpainting or object removal.
https://github.com/Mikubill/sd-webui-controlnet/discussions/1597
inpaint_only+lamaの結果は通常のinpaint_onlyと似ていますが、少しだけ物体を消去する傾向があります。このため、inpaint_only+lama は画像の除去やオブジェクトの除去に適しています。
FAQ
Inpaint画面が小さすぎる…拡大したい
img2imgのinpaint画面からControlNet Inpaintを利用できるのでそちらから利用することで大きな画面で編集ができます。
Inpaint画面のペンを拡大したい
- Inpaint画面の右上のペンアイコンのクリックします。
- 表示されたスライダーでペンの大きさを調整
コメント