2023-03-07

ControlNetを使ってャラを塗り直す方法【Stable Diffusion】

ControlNetを使うと元絵に新しい色を乗ることができる。今回は手指を再現しながらもうまく塗り直す方法を記す。

Article Image

ControlNetで塗り直し

今回は元絵を用意し、その画像を塗り直すというケースを想定しControlNetを使う。

このとき、どうしても壊れやすい手指の正確さを少し上げる方法を合わせて紹介する。

前提

ControlNetのExtensionを使用するので、使ったことがないユーザーは別サイトを参考にてインストールしてほしい。

ControlNetの詳しい設定等は次に掲載している。

ControlNetの詳しい解説!輪郭やポーズから思い通りの絵を書かせる【Stable Diffusion】 | 謎の技術研究部

上の解説は細かすぎるため、今回はユースケースを絞った実例記事とした。

ダメな例

まず、今回使用するサンプル(元画像)

こちらはAI絵ではなく私が3DCGで作ったもの。

人魚+手のポーズ

そもそも左手のネイルがすこし伸びた印象にもなっているので、これがあまり良くないかもしれない。

そしてこれを塗り直そうとしてimg2imgを使うというのがよくある例。

実はこの方法だと目的を達成できない。まずはそこから実験してみる。

プロンプトなしデフォルト+Denoising Strength = 0.3i2iすると次のようになった。

ダメなサンプル1

これはこれで悪くはないが、手がかなりおかしい。

これは良い方で、酷いときには手の原型がなくなることもしばしば。

Denoising0.4以上にすると、そもそも手が描画されなくなってしまった。

手を正解にしたいだけであれば0.1にしてもいいのだが

Denoising 0.1の例

ほぼ元絵と一緒になってしまった。

私の場合はあえてこれを使うことで自分の作品へより近づけているが、そっちの使い方は少数派だろう。

今回は塗り直しをやりたい。特に線画に色を入れるときは有用かと思う。

やり方

既に上で言っているがtxt2imgタブのControlNetを利用すると良い。

この時hed推定を使うのがコツ(指など、壊れやすいラインが綺麗に描かれやすい)

設定は次の画像通り(hed推定を利用するので対応したモデルもDLしておくこと)

設定

実行結果

上の設定で実行すると次のようになった(プロンプトなし)

最初の出力

プロンプトいれてないから色が変なのは良いとしても...

指壊れれてるじゃないですか!

目も少し変だ。

実はもう一つ重要な要素がある

実はStable Diffusion出力画像が小さければ小さいほど顔や手が崩れやすいという特徴がある。

実は今回最大のTipsがこれかもしれない。

これに気づいている人がまだ少ない模様でSampling stepsを上げたのにちっともよくならないという人は多いのではないだろうか。

というわけでWidthHeight1024にしてみる(デフォルトは2)

画像サイズの設定

ただ、注意点としてはグラフィックボードのメモリが貧弱だと落ちるようになる。

ここはメモリと相談で微調整してほしい。

それでも指が壊れる場合はControlNet側のHED Resolutionを上げると良い結果になる可能性がある。

Hed resolution

また、個人的にはここで線の重みであるWeightは使わない。

これを上げると逆に壊れる可能性が高いが、どうしてもいい線が出ないときには試して見る価値はある。

大きくした結果

上の設定通り画像サイズを大きくして画像を生成する。

ここからは色を付けていくのでプロンプトを適当にイメージのものを入れてやる。

良くなった結果

だいぶ良くなったかと思う。

ただ、今回は左手の小指が絶妙な角度のため再現しきれず。さすがに100点にはできなかった。

あと、右手の親指も長すぎる...と思ったのだがよく見たら元絵も長い。

モデルのポージングには十分気をつける必要がある。

もう一枚

Sampling Stepsを20から80に増やしてもう一枚出力してみた。

この設定は上のように細部が十分書き込まれているのを確認した後に上げていくと、よりなめらかな画像になる

良くなった結果2

この例では塗りがキリっとして美しくはなったが、手の問題は少々悪化。

Sampling Stepsの値を増やすとこのように手の結果が逆に悪くなることもあるので安易にいじりすぎないほうが良いかもしれない。

おまけ:プロンプトを変えて

Fireという単語を入れて炎属性のマーメイドを出してみた。

炎の女神

炎の女神2

炎の模様は出なかったが、手や髪飾りにパワーが宿った。

炎の女神という感じでいい感じだ。

それでも手が壊れますが?

その他やってみて分かってきたTipsを乗せておく

HED Resolutionは大きければ良いというものではない?

どうやらHED Resolutionは大きくしすぎるとダメになることもある。

生成画像と同じぐらいか、少し小さいぐらいで段階的に調整して何度かトライする他無い。

hed以外も試す

hedが手指に最も良い結果を出すのはあくまで個人的な実験からの傾向。

他にもDepthCannyも線を再現しやすいので試してみると良い。

それでもだめならSegmentといったイメージ。

顔も良くなることがある

目が小さいイラストの場合は、AIが目を認識せずに省略してしまうことが多々ある。

上で解説した画像サイズを大きくする手法をはじめ、このあたりを調整すると顔の書き込みがよくなることがあるので覚えておくと良い。

恐らく同様の効果で、小物などの書き込みも良くなる可能性が高い。

おまけ:もっと出力イメージをコントロールしたい

ここからは更に一歩進んだテクニックの実験。

これまではtxt2imgを使ってきたがimg2imgタブへ移動し、別の画像のイメージを流し込んでみる。

上と殆ど同じ設定+img2imgに炎の画像を流し込んで「火属性の人魚」を作ってみることにした。

入力した画像

こちらの画像をi2iへ入れる。

このときDenoising Strengthの値も関係してくるので、設定は結構難しい。

出力1回目

Denoisigng = 0.75

炎のマーメイド

自らの炎で消し炭になりかけている。

どうやら炎画像の「黒背景」がそのまま出てしまうらしい。

出力2回目

というわけで逆にControlNeti2iの画像を入れ替えてみる。プロンプトにFire

Denoisingを上げて

炎?

なるほど、

炎のシルエットのようなものを纏ったが、炎の色はでないらしい。

炎画像を作り込んだほうが良い。

このようにi2iを使う場合はかなり上級者向けで、この場合は炎の画像そのものに対して出したい色を配置しておかないと、そのままMIXされるだけのイメージができてしまう。

この手法で線画に対して明示的に色付けを行う場合は、予め「こんな感じの色で」みたいな画像を用意しておくといいのかもしれない。

以上

正直なところもう少し手指はよくできそうだったが、記事を書きながら諦めの境地に達した。

AI絵は簡単に誰でも作れるものだがエクステンションを使っていくとかなり設定が複雑になってくる。

このあたりは熟練のユーザーが有利になるのか、はたまたそれすらAIが自動化してしまう未来となるのかはわからない。

私に出来ることはひたすら試すことぐらいだ。



この記事のタグ


謎の技術研究部 (謎技研)