ページの先頭へ戻る

【導入方法】ControlNet徹底解説!プロンプト苦難の時代が終わる…

最終更新:2023/02/16 05:01 │ AIイラスト | コメント(1)
control.png

こんにちは、スタジオ真榊です。ここ数日はこの話題でもちきりですね。そう、拡張機能「ControlNet」の衝撃的デビューで、プロンプトやi2iでポーズや構図をなんとか表現しようと苦心していた時代は過去のものになりました。

Controlnetは、参照画像からキャラクターの四肢のボーンやイラストの主線、depth(深度情報)などさまざまな情報を抽出し、イラストのポーズや構図を自由に制御できる革新的な拡張機能です。2023年2月10日に論文が投稿されるや、わずか数日でStable Diffusion用WebUI向けの拡張機能が登場。当初は1つ5GB超えのモデルを8つダウンロードしなくてはなりませんでしたが、あっという間に一つ約700MB程度に圧縮され、容易に導入できるようになってしまいました。



単に構図やポーズを指定するだけでなく、イラストの主線や輪郭を保存して新たにイラストを生成しなおすことすら可能になったため、線画の着色やマウスで描いた落書きからのいきなり完成イラスト生成といったi2iではできなかったことが次々にできるようになっています。まさに革命!



さっそく今回は導入方法の解説とともに、各学習モデルの違いや使い方を解説していきたいと思います。


【この記事はFANBOX会員向け記事ですが、前半部分を無料公開します】

ハニカム  ハニカム

目次

何ができる?i2iとどう違う?
Controlnet導入方法
「OpenPose」でキャラのボーンを引用する
「Depth」で深度情報を抽出しよう
「Canny」を使って主線や輪郭を引用
「Hed」で色合いや光源だけを変更しよう
「normal_map」で法線情報を参照
「mlsd」で直線だけを抽出
「openpose_hand」で手の位置も写し取る
「scribble」でマウス絵をイラストに!
「fake_scribble」でふんわり構図を写し取る
終わりに


何ができる?i2iとどう違う?

さて、本題に入る前に、controlnetがこれまでの技術とどう違うのか?どんなことができるのか?について簡単に触れておきます。


Controlnetはtext2imageの画面でも運用されるものの、見本となる画像をもとに新たな画像を生成するわけですから、本質的には「image2image」に近い技術です。これまで、AIに何を描けばいいか指示するには「言葉で説明する(プロンプトによるt2i)」か「見本画像で説明する(image2image)」の2つの方法があったわけですが、ここに「ボーン(キャラの骨組み)で説明する」「深度情報で説明する」「着色前の線画を見せて説明する」「適当に描いたトンチキ絵で説明する」「ノーマルマップで説明する」などがいきなり加わったと考えてください。要するに革命が起きたわけです。

では、i2iとどこが違うのか。従来のi2iは基画像の「色」を主に参照して、おおむねどの位置に何を描けばいいかをプロンプトを見ながら判断するものでした。うまくいく場合もありますが、どうしても参照元画像の色に引っ張られてしまうのがネックで、例えば自由に着色することは苦手でしたし、どこに何が描かれているかを本質的に理解するわけではないので、スカートがカーテンに化けたり、肌色に近い背景部分にキャラクターが出現したりといった現象も起きがちでした。また、白黒の線画をもとにAIが色を塗るようなこともできませんでした。
一方ControlNetは、画像から姿勢や輪郭(=ほとんど線画)や深度情報といったさまざまな情報を抽出することができる技術です。線画からいきなり完成イラストレベルに塗りを加えることもできるし、画像から線画だけを抜き出して別のイラストとして着色しなおすこともできるし、姿勢や構図だけを引用してまったく別のイラストに仕上げることもできるわけです。本質的にはi2iに似ていますが、「基となる画像から色以外の多彩な情報を読み取って、人間の意図をより正確に再現できるようになった画像生成技術」それがControlnetと言えるでしょう。



Controlnet導入方法


Controlnetをめぐっては、数日程度で情報が古くなってしまう異常事態となっていますが、とりあえず記事執筆時点(2023/02/16)の導入方法を紹介します。


1.拡張機能をインストール

WebUIの拡張機能(Extensions)タブにある「URLからインストール(Install from URL)」の画面を開きます。「拡張機能のリポジトリのURL」欄に下記のURLを入力して「インストール」ボタンを押すだけでOKです。

https://github.com/Mikubill/sd-webui-controlnet.git

インストールできたら、WebUIをリロードします。拡張機能の「インストール済」タブから、「適用してUIを再起動」しましょう。


スクリーンショット 2023-02-16 003437

成功していれば、txt2image画面の下の方に「Controlnet」というタブが出現しているはずです。

2.モデルをダウンロード

ControlNetのモデルをダウンロードします。ControlNet-modules-safetensorsから、「control_canny-fp16.safetensors」など8つのsafetensorsファイルをダウンロードし、「stable-diffusion-webui\extensions\sd-webui-controlnet\models」フォルダに放り込みましょう。それぞれモデル名をクリックすると、リンク先に個別にdownloadボタンがあります。gitが分かる人は右上の</>how to cloneを押してgitした方が早いです。


スクリーンショット 2023-02-16 015043


このようになっていればOK。あっという間にインストールが終わってしまいました。これら一つひとつがこれから説明する参考画像からの情報抽出に使われるモデルなわけです。下記を読んで「Openposeとdepthだけ使うかな」という方はその2つだけダウンロードするのでも構いません。でも全部使うと思うな…

では、さっそく実際に生成してみましょう!

「OpenPose」でキャラのボーンを引用する

まずは8つのモデルのうち、キャラをボーン(棒人間)化してポーズを写し取ってくれる「openpose」というモデルを使って、既存のイラストから新しい画像を生成してみます。今回はこちらの女の子のポーズを借りてみましょう。


vF9yRZKhTt94NqdTDlTTZls6.png


・Controlnetのタブを開いてEnableにチェックを入れ、preprocessor欄で「openpose」を、Model欄で「control_openpose-fp16」を選択します(modelフォルダにちゃんと配置したのに何も表示されない場合は、webui をリロード/再起動してみてください)

・次に「Image」欄に画像をドラッグアンドドロップ。Canvas widthとheightにはこの画像と同じサイズ(または同じ比率)を入力します。横縦を間違えないようにしましょう。

・Controlnetはグラフィックスメモリ(VRAM)12GB以上推奨ですが、8GB以下の環境でメモリエラーが出てしまう場合は「Low VRAM (8GB or below)」のチェックボックスをONにしましょう。画像の生成速度が大きく下がる代わりに、VRAM不足の環境でもエラーを回避して生成することができます。VRAM4GBでも動作したとの報告あり。


スクリーンショット 2023-02-16 021057

するとこのような感じになります。

Weightは元画像をどれくらい影響させるかなので、最初は「1」で。通常のプロンプト欄には、「1girl」のみを記入し、生成する画像サイズもさきほどの参考画像の比率と同じにしましょう。Hires.fixを掛けるなど、このあたりはいつもどおりの感覚でOKです。

生成ボタンを押しましょう!ぽちっとな…。最初は反応がなくてビビりますが、webUIの黒い画面を見てみると、初回のみ必要なファイルのダウンロードが行われているのでちょっと時間がかかります。
まもなくして…


スクリーンショット 2023-02-16 045408

!!!!!

tmpx6aqf8wn.png

!!!!!


しっかり元イラストのボーン(棒人間)が検出され、構図がコピーされています!感動!!

スクリーンショット 2023-02-16 045628


さきほどは「1girl」でしたが、プロンプトを工夫するとこんなことも可能に。さきほどの棒人間画像は元画像の末端や指の位置まで認識していないので、プロンプトの「peace sign」に反応してこのような出力が行われるわけです。

ちなみに、参考画像によっては、学習モデルがうまくボーンを抽出できないことがあるようですが(その場合ボーン画像が真っ黒になる)、自分で棒人間画像を描いてそれを基に生成することもできます。その場合はpreprocessorを「None」にすればOKです。

「Depth」で深度情報を抽出しよう


今度は「Openpose」ではなく、「Depth」を使ってみます。これはさきほどのボーンの代わりに元画像から立体的な深度情報を擬似的に抽出し、それを参考に新たな画像を生成する方法。

使い方は、先程設定したPreprocessorを「depth」、モデルを「control_depth-fp16」に変えるだけでOKです。今度はプロンプトをぼっちちゃんにして…どん!


スクリーンショット 2023-02-16 045640

▼元画像から抽出された深度情報

tmp49p079xm.png

▼元画像


vF9yRZKhTt94NqdTDlTTZls6.png


BOeAbZcCEAEZOpj.jpg

こんなの泣くだろ。

今度はボーンではなく、画像の陰影などを基に奥行きを含めた深度情報を得て、それを参考に画像が出力されているのが分かると思います。Openposeとの違いは、たなびく髪の毛や手の位置まで忠実に再現されていること。髪型など輪郭が違うキャラクターを生成したい場合は「OpenPose」の方を使わないと髪型まで引用されてしまうので、このあたりは目的によってどのモデルを使うか判断すれば良いようですね。

「Canny」を使って主線や輪郭を引用


今度はCannyというモデル。こちらは画像の輪郭部分を線画のように抽出して、それを参考に画像を出力してくれるモデルです。Depthが立体的な位置関係を処理できるのに対し、こちらはあくまでイラストの主線を参考にする違いがあります。



tmpauuy6r_b.png



スクリーンショット 2023-02-16 045704

Depthと違い、キャラの主線や服装の詳細、背景の雲まで詳細に写し取りながら、プロンプトを基に新たなイラストを描いていることが分かります。抽出された線画は無表情ですが、プロンプトの「smile」に反応して口元は笑顔になっていますね。

ところで、ControlNetのUI上では「Weight(重み、影響度)」を指定することができます。Cannyの「Weight:1」だと上のように忠実な写し取り方になりますが、「0.2」にすると…

スクリーンショット 2023-02-16 045715


このように、影響度をより軽くして、プロンプトをより重視させることもできます。髪の毛の…

関連記事

4VRAMならなかなか足りない

どうやらわしの古いパソコンのVRAMが足りないみたい...

わしはもうゲームなどがやりたくないAI絵だけの為に新しいパソコンを買うのは賢い選択かな?
[ 2023/02/22 07:58 ] [ 編集 ]

コメントの投稿













管理者にだけ表示を許可する