【ゲームエンド!?】controlnet拡張で手の描写を支配しよう! (Pixiv Fanbox)
Content
こんばんは、スタジオ真榊です。なぜか本日突如として7年間続いたシャドウバンが解けまして、ツイッター上でたくさん通知が来て楽しい一日を過ごせました笑 18禁アカウントなのにいいんですかねイーロンさん…
さて、本日は非常にエキサイティングなControlnetの拡張機能が登場しましたので、さっそく実験をしてみました。「sd-webui-depth-lib」は、多数の手の形をしたdepthマップをWebUI上で拡縮・回転・反転させて、手の形を強く傾向付けられる画期的機能です!
インストール方法
・SD webUIの「拡張機能」タブを開き、「URLからインストール」をクリック
・「拡張機能のリポジトリの URL」に「https://github.com/jexom/sd-webui-depth-lib.git」を入力し、「インストール」をクリック。上記画像の「Installed into~」が表示されたらインストール完了。
・「インストール済」タブからWebUI を再起動
・新たに「Depth Library」タブが追加される
使い方
さて、こちらが起動画面。画面左側に31個(記事執筆時)の手のdepthマップが用意されており、どれかを選んで「Add」すると画面右側のキャンバスに表示させることができます。キャンバスの大きさはwidth/heightバーで調整。「Add background image」で見本画像を背景として読み込むことができます。
では早速、こちらの崩壊したピースサインイラストをこの拡張機能で修正してみましょう!
「Add background image」でイラストを背景として読み込み、ピースサインを選んで「Add」します。depthマップは片手分しかありませんが、このようにオブジェクトを回転・拡縮するハンドルが出るので、角を引っ張ってきて対角線に持ってくると画面上で反転させることができます。
手の細さがちょっと見本と合わないのですが、だいたいの感じで合わせて、「Save png」で画像を保存。「send to controlnet」でtxt2txtの生成画面に飛ばすことができます。
こちらがtxt2txt生成画面のControlnet画面。既に抽出されている状態なので、「preprosessor」をnoneにします。これをEnableにした状態で、さきほどのイラストを生成したときと全く同じプロンプトやseed、各種設定で生成してみましょう。
!?
手は狙った通りきれいなピースサインにできましたが、その他の部分がもとのイラストから全くかけ離れてしまいました。これは、さきほどのDepthマップが画像生成の全ステップに影響したことで、プロンプト通りにイラストを描くよりもControlnet指示のほうが優先されてしまったために起こる現象。イラスト全体が白黒になってしまっただけでなく、depthマップが手首のところまでしかないため、AIが「手首の部分にラインを描けってことかな?」と誤認して、わざわざ袖を作ってしまっていることもわかります。
前回の記事「超革命!Multi Controlnetでできるようになったこと」でも「Guidance Start/Endで何ができる?」という項目で解説したように、「Enable」にしたControlnetの影響が画像生成のどのステップから及ぶかは「Guidance Start/End」のバーで設定することができます。また、Controlnetの効きそのものも「Weight」によって強弱がつけられるのでした。でも、それぞれどれくらいの設定にすればよいのでしょうか?
分からないときは、いつものアレ。X/Yプロットで総当りします!
X/Yプロットの結果
もう一度確認しましょう。元イラストはこちら。
これを、depthのweightを「0.5」~「1.0」、Guidanceスタートが「0.1~」「0.2~」「0.3~」で比べたのが、以下の図です!
ほんまX/Yプロット便利!!
これだけでわかったことが沢山ありますね。まず、一番右側のタテ列を見て下さい。Guidance Startが「0.3~」、つまり全体の30%が過ぎたところからControlnetが効いた場合、影響が出るのが遅すぎて、手は崩壊したままです。一方、「0.1」「0.2」はしっかり手が直っていますが、髪の毛の色や背景の色合いが変化しています。これはさきほど白黒のイラストが出てしまったように、depthの影響が早くから及ぶほどに、イラスト自体の作りを大きく変えてしまうことがわかります。「0.1」の列の下の方は、髪型だけでなくキャラクターの服装まで改変されています。
「0.3」だと手が治らない、「0.2」だとちょっと髪の色が違う…という感じなので、0.25前後に答えがありそうです。一方、「Weight」の大きさはどうでしょうか。Start Guidanceほどにビビッドな変化は見られませんが、やはり影響が強まる(下に行く)ほどに手の形はきれいになっていきます。ただ、GuidanceStartが「0.1」の列を見ると、weightが「0.8」から手首にブレスレットが現出。これはさきほどの白黒イラストの袖と同じで、AIが「ここに線を引かないといけない」と誤認識していることによるものです。
GuidanceEndをいじったらどうなる?
さきほどの実験で
①GuidanceStartの値は「0.25前後」が良さそう
②Weightは弱いと指が直らないし、強すぎると手首に線ができたり、イラストのデザインが変更される
…ということがわかったので、今度は「GuidanceEnd」の方をいじってみましょう。
GuidanceEndを「0.6,0.7,0.8,0.9」刻みに。GuidanceStartは「0,0.1,0.225,0.25,0.275,0.3」とします。さきほどの実験結果を踏まえて、0.25前後を手厚くしてみました。Weightは「1」固定。その結果…
こんなん出ました!
まず、GuidanceStart:0はダメダメだということを再確認。指が崩壊するのはGuidanceStart:0.25から。実験目的だったGuidanceEndのタイミングはさほど強く絵柄に影響しないことも確認できました。画像生成AIの基本ですが、ノイズから完成に至るまでに、前半ステップでは全体を、後半ステップでは詳細部分が描かれます。だからこそGuidanceStart0だとここまで全体が乖離するわけで、全体のステップの22.5%あたりからdepthを効かせると、指を直しつつイラスト自体をそこまで変えないでくれる…ということが分かります。
ちょっとしつこいですが、GuidanceStart:0.225で最適なWeightを探ってみましょう。1.0できれいな指になることはわかったので、影響を弱めれば髪の色などが元イラストに近くなるかもしれません。
…と思いましたが、失敗。結局Weight1.0以上でないと指が治らないのですね。これ以上は「あちらを立てればこちらが立たず」になりそうです。
もちろんこの実験で分かるのは「手を直すときはGuidanceStart:0.225が最適解!」ということではありません。全体のステップがどれくらいかや、Controlnetで指示した範囲の大きさ、学習モデルによっても違う結果になるでしょう。ただ、なんとなく0.1~0.3の間にしておけば概ね期待に近い結果が出そう…ということくらいは言えそうですね。WeightやGuidanceEndはさほどいじる必要はなさそうです。そもそもここからスケールアップするので、手さえきれいになっていればそこまで細部にこだわる必要はありませんしね。
最後にもう一つ実験をしてみましょう。一部だけ直したいときは、やっぱりinpaintを試さなければ!
inpaint(レタッチ)でやるとどうなる?
設定はこちら。元イラストの崩壊した手をマスクして、GuidanceStart0.225でdepthを掛けて生成してみましょう。
しかしこれがうまくいかなんだ。
おおむね近いところまでは行きますが、クォリティが維持できず断念。わざわざレタッチで苦労するくらいならむしろ、さきほど直したものと元イラストをクリスタで合成してしまったほうが楽ですね。
このように重ねあわせて余分な部分を削ってしまえば…
はい、ゲームエンド。本番のときは、ここからi2iできれいにアップスケールしてあげればOKです!
終わりに
いやあ、本当に素晴らしい結果が出ましたね!今回は既存イラストの崩壊した手を修正するのに使いましたが、これから新たに画像生成をする際も、Openposeと手のDepthを組み合わせるなどして多彩な使い方ができそうです。
他にも、たとえばできたイラストをCannyで読み取って…
手の部分だけを消せば…
これをCannyで読み込むことで、depthよりも正確に望んだ手の形を指定することさえできるでしょう。マジのガチで聖杯が来た!という認識でよろしいかと思います。STAP細胞は、ありまぁ~す!!
その後もいろいろ試してみましたが、もちろん完璧というわけではなく、
例えばこちらのツイートのように、お嬢がこっちを指さしているポーズを印象付けようと思っても、左のイラストのように指がグチャってしまうことがありました。漫画パースの効いた構図だと、例えば突き出した人差し指をブローチと誤認してしまったりするなど、なかなかうまくいきません。なんどか試すと、これくらいまでは指示することができましたが、過剰な漫画パースにするにはさらなる研究が必要そう。
グーチョキパーを指示するのはうまくいくので、いろいろ試してみたいと思います。
…。
【AM3:10追記】なんか、いろいろ試してたらできちゃいました
いやあ…Controlnetヤバスギだろ!
今夜はとにかく急ぎ足で紹介したのでわかりにくいところもあるかもしれませんが、「最速レビュー」ということで細かいところはご容赦ください。というところで、午前0時を過ぎてしまいました。もう時の流れが早すぎてついていけませんことよ…
そんなわけで、controlnet拡張で手の描写を支配しよう!でした。
それでは皆様、素晴らしいハンドコントロールライフを!スタジオ真榊でした。