AUTOMATIC1111+ControlNetのつかいかた
(23/04/04追記)線画を崩さず着色できるAIの登場を待ってたら、AUTOMATIC1111WebUIの拡張機能で使えるやつが先に登場したので、早速試しました。
https://github.com/Mikubill/sd-webui-controlnet
導入方法
AUTOMATIC1111WebUIのExtentions-Install from URLから
https://github.com/Mikubill/sd-webui-controlnet.git
を入れてインストールします。
一旦WebUIを終了して、AUTOMATIC1111_webuiのあるフォルダ内、
extensions\sd-webui-controlnet\models
に、https://huggingface.co/webui/ControlNet-modules-safetensors/tree/mainのファイルを全部DLして入れます。
https://huggingface.co/lllyasviel/ControlNetで公開されてるpthファイルの方は、SD1.5などの絵描きモデルとマージしたものですが1111では不要です。
control_sd15_canny.pthとcontrol_sd15_hed.pthを今回試しました。
そしたらwebUIを起動し直すと、拡張機能が反映されます。
使い方
Txt2imgとimg2imgの下の方に項目が出現します。
Enableをオンにすると有効化します。
1.preprosessorとmodelを選びます。
preprosessorはcannyを選んだらmodelはcontrol_sd15_canny.pthを選びます。適切な組み合わせを選ぶ必要があります。
2.、画像をアップロードするか、描きます。
cannyの場合、画像は線画でもいいしカラー画像でもいいです。どのみち内部で変換されます。訂正、cannyとhedは線画でなく輪郭線を抽出するので線画だけはうまくいかないやつでした。ベタ塗りでも塗ってあればいける?要検証です
自作の線画でいいのが見当たらなかったので、オリキャラの3Dモデルのスクショを使いました。
画像は、どんな解像度でも認識できますが、controlnetが分析できるサイズにリサイズされてるはずなので、300dpiのガチ絵だと細部は潰れて認識できないのではと思われます。初期verでは縦横のピクセル数が64の倍数でないとトリミングされたりエラーを吐いてました。
3.なにかプロンプトを入れて、読み込ませた画像とサイズ(というかアスペクト比)を合わせて、generateします。
cannyだと、こうなります
同時に、線画輪郭を抽出した画像が生成されます。
この線画の部分をできるだけ保持して、後はプロンプトに従った画像を生成するというのがcannyの仕様のようです。
Dynamicpromptで髪の色やアクセサリをランダムにして出すと、こう↓
抽出しきれなかった細部、プロンプトで指定しない箇所は、AIの好きにアレンジされます。
線画だけしか見てないから腕や胸元の服のデザインの解釈ができず、肌になったり紐になったりしてます。
でもポーズや表情や構成要素は(抽出できてる範囲内では)しっかり理解して、線画を保持するさじ加減をしてるのがわかります。
prosessorをhed、モデルをcontrol_sd15_hed.pthでやるとどうなるかというと
色、光源の向き、質感だけ変わり、それ以外はほとんど保持されました。
(細部は変わってるとこもある)
あいにくDynamicpromptで髪や服の色指定をしてなかったのですが、肌は呪文通り青くなったり白くなったりして、乳サイズを指定する呪文で胸の塗りが変化してるのでその辺コントロールできるようです。
完璧な線画をもってくれば完璧な塗りができるのか?
(追記)線画着色特化のモデルは、controlnetの作者が思うとこあって非公開にしてしまったので、現時点では不明です。多分そのうちどこかが出すんじゃないでしょうか…
ただそれを踏まえても、それ以外の仕様・制限を見るに
1k程度のものなら、運任せの既存のtxt2imgやimg2imgよりはるかに意図した通りの構図、デザインで画像が生成できるでしょう。ここまで線画が維持できるなら著作権的な問題も、話が変わってくるのではと思えます。数年前からあった、塗りAIに文句言ってた人はいないんだから。
まあ、300-1200dpi、2k・4Kサイズの線画だったら、そのまま解析して着色生成できるわけがなく(絵描きモデルの方が、まともに描ける大きさが1k程度が限界です)、アップスケールしかないはずですが…
他のprosessorも試さないとわかりません。また次の機会に検証します。
過去絵から線画を探さないと。Blenderで3Dモデルやノーマルマップ画像作らないと…