今回は元絵を用意し、その画像を塗り直すというケースを想定しControlNet
を使う。
このとき、どうしても壊れやすい手指の正確さを少し上げる方法を合わせて紹介する。
ControlNet
のExtensionを使用するので、使ったことがないユーザーは別サイトを参考にてインストールしてほしい。
ControlNetの詳しい設定等は次に掲載している。
ControlNetの詳しい解説!輪郭やポーズから思い通りの絵を書かせる【Stable Diffusion】 | 謎の技術研究部
上の解説は細かすぎるため、今回はユースケースを絞った実例記事とした。
まず、今回使用するサンプル(元画像)
こちらはAI絵ではなく私が3DCGで作ったもの。
そもそも左手のネイルがすこし伸びた印象にもなっているので、これがあまり良くないかもしれない。
そしてこれを塗り直そうとしてimg2imgを使うというのがよくある例。
実はこの方法だと目的を達成できない。まずはそこから実験してみる。
プロンプトなしデフォルト+Denoising Strength = 0.3
でi2i
すると次のようになった。
これはこれで悪くはないが、手がかなりおかしい。
これは良い方で、酷いときには手の原型がなくなることもしばしば。
Denoising
を0.4
以上にすると、そもそも手が描画されなくなってしまった。
手を正解にしたいだけであれば0.1
にしてもいいのだが
ほぼ元絵と一緒になってしまった。
私の場合はあえてこれを使うことで自分の作品へより近づけているが、そっちの使い方は少数派だろう。
今回は塗り直しをやりたい。特に線画に色を入れるときは有用かと思う。
既に上で言っているがtxt2img
タブのControlNet
を利用すると良い。
この時hed
推定を使うのがコツ(指など、壊れやすいラインが綺麗に描かれやすい)
設定は次の画像通り(hed
推定を利用するので対応したモデルもDLしておくこと)
上の設定で実行すると次のようになった(プロンプトなし)
プロンプトいれてないから色が変なのは良いとしても...
指壊れれてるじゃないですか!
目も少し変だ。
実はStable Diffusion
は出力画像が小さければ小さいほど顔や手が崩れやすいという特徴がある。
実は今回最大のTipsがこれかもしれない。
これに気づいている人がまだ少ない模様でSampling steps
を上げたのにちっともよくならないという人は多いのではないだろうか。
というわけでWidth
とHeight
を1024
にしてみる(デフォルトは2)
ただ、注意点としてはグラフィックボードのメモリが貧弱だと落ちるようになる。
ここはメモリと相談で微調整してほしい。
それでも指が壊れる場合はControlNet
側のHED Resolution
を上げると良い結果になる可能性がある。
また、個人的にはここで線の重みであるWeight
は使わない。
これを上げると逆に壊れる可能性が高いが、どうしてもいい線が出ないときには試して見る価値はある。
上の設定通り画像サイズを大きくして画像を生成する。
ここからは色を付けていくのでプロンプトを適当にイメージのものを入れてやる。
だいぶ良くなったかと思う。
ただ、今回は左手の小指が絶妙な角度のため再現しきれず。さすがに100点にはできなかった。
あと、右手の親指も長すぎる...と思ったのだがよく見たら元絵も長い。
モデルのポージングには十分気をつける必要がある。
Sampling Steps
を20から80に増やしてもう一枚出力してみた。
この設定は上のように細部が十分書き込まれているのを確認した後に上げていくと、よりなめらかな画像になる
この例では塗りがキリっとして美しくはなったが、手の問題は少々悪化。
Sampling Steps
の値を増やすとこのように手の結果が逆に悪くなることもあるので安易にいじりすぎないほうが良いかもしれない。
Fire
という単語を入れて炎属性のマーメイドを出してみた。
炎の模様は出なかったが、手や髪飾りにパワーが宿った。
炎の女神という感じでいい感じだ。
その他やってみて分かってきたTipsを乗せておく
どうやらHED Resolution
は大きくしすぎるとダメになることもある。
生成画像と同じぐらいか、少し小さいぐらいで段階的に調整して何度かトライする他無い。
hed
が手指に最も良い結果を出すのはあくまで個人的な実験からの傾向。
他にもDepth
やCanny
も線を再現しやすいので試してみると良い。
それでもだめならSegment
といったイメージ。
目が小さいイラストの場合は、AIが目を認識せずに省略してしまうことが多々ある。
上で解説した画像サイズを大きくする手法をはじめ、このあたりを調整すると顔の書き込みがよくなることがあるので覚えておくと良い。
恐らく同様の効果で、小物などの書き込みも良くなる可能性が高い。
ここからは更に一歩進んだテクニックの実験。
これまではtxt2img
を使ってきたがimg2img
タブへ移動し、別の画像のイメージを流し込んでみる。
上と殆ど同じ設定+img2img
に炎の画像を流し込んで「火属性の人魚」を作ってみることにした。
こちらの画像をi2i
へ入れる。
このときDenoising Strength
の値も関係してくるので、設定は結構難しい。
Denoisigng = 0.75
自らの炎で消し炭になりかけている。
どうやら炎画像の「黒背景」がそのまま出てしまうらしい。
というわけで逆にControlNet
とi2i
の画像を入れ替えてみる。プロンプトにFire
Denoising
を上げて
なるほど、
炎のシルエットのようなものを纏ったが、炎の色はでないらしい。
このようにi2i
を使う場合はかなり上級者向けで、この場合は炎の画像そのものに対して出したい色を配置しておかないと、そのままMIXされるだけのイメージができてしまう。
この手法で線画に対して明示的に色付けを行う場合は、予め「こんな感じの色で」みたいな画像を用意しておくといいのかもしれない。
正直なところもう少し手指はよくできそうだったが、記事を書きながら諦めの境地に達した。
AI絵は簡単に誰でも作れるものだがエクステンションを使っていくとかなり設定が複雑になってくる。
このあたりは熟練のユーザーが有利になるのか、はたまたそれすらAIが自動化してしまう未来となるのかはわからない。
私に出来ることはひたすら試すことぐらいだ。