AUTOMATIC1111+ControlNetのつかいかた2(目当ては自動塗り)
(追記23/02/26)
※なんかControlNetを扱う拡張機能が複数あるらしいのですが、この記事ではMikubillって方を解説します、
https://github.com/Mikubill/sd-webui-controlnet
前回は軽くcannyとhedをいじってみましたが、続きを調べていきます。
目的が迷子にならないように、「オリキャラの線画に完璧な彩色をする」か
「3Dモデルをデザインを変えずブラッシュアップした2Dイラストにする」、の2つに重きを置くとします。
ControlNetが更新されてました。
拡張機能の更新はextensions-check for updatesを押してから、Apply and restartUIを押して、ブラウザもcmd.exeも再起動です。
(アップデート失敗して挙動がおかしかったらフォルダを全削除して入れ直しがいいそうです)
5GBもあるpthファイルをダイエットして0.7GBのsafetencorにしたものがアップされたので、\extensions\sd-webui-controlnet\modelの中身をさしかえてみます。
https://huggingface.co/webui/ControlNet-modules-safetensors/tree/main
今回の線画は、10年前にお絵描き掲示板で描いたようなのを用いました。
depth
モデル:control_sd15_depth.pth
Midasてのを使用して、画像の奥行きを推測して作った深度マップと、プロンプトをもとに生成します。ポーズをとらすなら、スマホで人を撮るか、デッサン人形アプリで画像を作るのがが最も手軽でしょう。
人物のポーズにも背景レイアウトにも使えます。画像次第では結構な形状維持で、キャラに使うとかなり体型そのままで出されます。上の画像はウエイト0.1に弱めてやっと無課金素体ボーイから抜け出して生成できた幼女
立体感のある画像でないと検出しずらいので、線画には不向きでしょう。最も立体から遠いアニメ顔とかには向いてないかもしれません。
生成した深度マップは保存されないので手動で保存する必要があります。
preproseccorをnoneにすれば直接深度マップ画像を使えます。
(深度マップはBlenderで結構簡単に作れそうですがやったことはない)
normal
モデル:control_sd15_normal.pth
画像からノーマルマップを推測して、それとプロンプトをもとに生成します。
depthよりさらに形状・ポーズの精度が高いですが、奥行きに射程距離があるようで、背景には使えません。また高解像度なほどノイズが目立って使えなくなるようです。
立体感のある画像でないと効果は薄いので線画には不向きそう。最も立体から遠いアニメ顔なんて保持できんのでは。できてない。だいぶ顔変わってる。
生成したノーマルマップは保存されないので手動で保存する必要があります。
preproseccorをnoneにすれば直接ノーマルマップ画像を使えます。
(ノーマルマップはBlenderで結構簡単に作れそうですがやったことはない)
mlsd
モデル:control_sd15_mlsd.pth
建物特化で、パースと建物のレイアウトの直線を検出してそれで描きます。
ダイナミックな構図と曲線的な建物には追いつかないようで、そういうのにはdepthのほうが強いかも↓
openpose
モデル:control_sd15_openpose.pth
OpenPoseポーズ検出を使ってポーズを指定します。指のポーズもしっかり対応して、精度が大幅に上がります。(現時点ではまだ指はポーズ検知はできるけど、描かせることはできない)ポーズスケルトンを直接操作する(自分で描く)こともできます。作成する拡張機能がいくつか出たし、Blenderなどでポーズスケルトンの3dモデルを作った人もいるようで、しっかり機能します。
使う前にopencvをインストールする必要があります。適当なフォルダでコマンドプロンプトからpip install opencv-pythonで
preprosessorをnoneにすると、ポーズスケルトンの画像を直接使うことができます。レタッチソフトでズラッと並べれば、多人数でもしっかり個別にポーズをつけられました。
でも全身が写ってない、奥に寝っ転がる、腕や足が重なる、学習されてないポーズ、複数の人物がダイナミックアングルで密接する(つまりえち絵)はうまくいかないです。
chibi(SDキャラ)や幼女も、手足が短くてポーズをとれないことが多いです。
見ての通り、線画塗りどころじゃないモードです。
scribble
モデル:control_sd15_scribble.pth
人間が描いた線画を境界線として生成。これが目当ての線画着色か…!
とおもいきや、こんなんなります。
AIが解釈できない線はそのまま棒で描かれ ひどくねえ?
トリミングされて情報量が微妙な構図だったり、絵が下手絵柄が個性的だったり、線が太すぎたり、質感出そうとカケアミベタ使うと、誤認識しやすいです。
はまればいい感じに清書して塗るんですが、そこはいじんなよ…てとこに限って結構修正されます。特に顔
segは謎のエラー出て使えず、不明です
どれを使うといいか
とりあえず自分の絵柄がAIがすんなり認識できるもので、少しぐらいAIが書き換えても許せるという想定でなら。
canny、hed、scribble、depth、normalの特性を見るに、構図、ポーズ、デザイン、絵柄、独創性…それぞれの相性は複雑で、状況に合わせて全部使う感じです。
線画をキープするならcannyやhedが強いが、顔を顔として認識するかは別問題で、scribbleは細い線を拾うけど認識しないとひどいことする
独自性の強いデザイン、奥行きのあるポーズはcannyやhedでは認識できないことが多く、depthやnormalなら対応できる可能性がワンチャンで…
weightの強度を変えるとうまくハマるかもしれません。
追記:複数のモードを同時適用できるようになりました。settingからその数を変えられますが、必要なVRAMもふえます。使いこなせるかは不明です
オリジナリティの高い作風、激しいアクションほど難易度が高いです。
自分の絵柄とAIモデルのもってる絵柄が近くないと、期待したものはできません。傾いた絵柄の人は、頑張って似た絵柄を出せるモデルを探すことになるのかな…
そしてその次に待ってる問題は、色の指定です。
色の指定の問題
ControlNetはなかなか(ぜんぜn)思った通りに色を付けてくれません。
髪の色、目の色、服の色、表情、光源、手にしたプロップ…事細かに指定しないといけないわけですが、名前のつけようのないオリジナルな装飾はどうしようもない。SD系はそもそも色指定がうまくいかないという問題がありますが、そっちのせいなのかそれとも。
使えるのかという感想は
現時点、controlnetはポーズの再現性の高さと手軽さに関しては、間違いなく革新です。文字で表現するのも困難で、学習でもなかなか出なかったポーズが直感的に出せて、指の精度が跳ね上がった。
でも、人間の描く絵を確実に清書したり塗れるかというと、できるものも多いけどできないものも多い、まだ課題が多くあると気付かされました。描けないものが思ったより多い。
はっきり言えば、顔が描き直される時点で「使える」と評する絵描きは、多くはないでしょう。色もデザイナーならものすごいこだわることだし、制御できないのは大マイナス。(その辺の価値観がわからないと酷い確執を生みますので、AI術師やプログラマーは、どうか慎重な対応を。)
まあ…今のところは面倒な髪やら手やらは高確率できっちり塗ってくれるわけだし。贅沢な悩みっつーか。もっと検証しないと断言はできない、まだ慌てる時間じゃない?
色指定の問題は解決してほしいですね…
理屈の上では、自分のキャラを学習させて、それと併用してopenposeやdepthでポーズ指定することで、自分のキャライラストを色指定もほぼ完璧に再現しつつ、自在なポーズで生成できるのでしょうか。
うーん(学習はまだ未経験です)
でも個人的には、3Dモデルを利用する方向で学習なしでできないかなとも思ってます。
最後に、AIが絶対塗れなそうな線画を貼ってしめます。