見出し画像

ControlNetの魅力: キャラクターの手に物を持たせる方法

「むずかしいなぁ…どうしたらいいんだろう…」

こんにちは、Einarです。今日は、ControlNetが、難しいシーンを正しく表現する可能性を大幅に向上させることを紹介します。 ControlNetについて知らない人は、私の前の投稿を参考にしてくださいね。

イラスト生成で物を持つキャラクターに共通する問題点とは?

AIを使ってキャラクターに物を持たせようとすると、いろいろな問題が起こりますよね。武器だろうがスプーンだろうがグラスだろうが、物を持つキャラクターをうまく生成されないことが多いです。武器は特に問題で、背景でいっぱい見かけたり、キャラクターの手から離れてしまったりします。

この現象の原因は、以前の記事でお話ししたように、とても単純で、AIは、「懐中電灯を持つ」ということがどんなことなのか、全く分かっていないんです。AIにとって、モデルには懐中電灯についての概念があるけど、それは人の手に持っているものもあれば、持っていないものもあるんです。そのため、懐中電灯の姿が変わったり、懐中電灯がキャラクターの手から外れてしまったりするんです。


「やだやだ、 もうやめてよ!」

ここの記事では、下のイラストのようなイラストを作ってみようと思います。このイラストは、廃墟になった商店街に出かけた勇敢なマヤちゃんの物語の一部です(全体のストーリーはこのツイッターコレクションを見てくださいね)。このシーンでは、マヤちゃんは懐中電灯を持って使われていない暗いエリアに入らなきゃいけません。懐中電灯だけが明かりを与えてくれる、使われていない廃墟の雰囲気を出すためには、懐中電灯の光や影の表現が重要です。

「誰もいない…」

※ Twitterスレッドに表示されている画像とは異なる可能性があります。なぜなら、当時と違うモデルを使っています。Twitterスレッドと同じような結果を得たい場合はSE_V1_Cをダウンロードしてください。
※ イラストは選択されたものではありません。つまり、不完全さや小さな間違いなどが見えるかもしれません。それらは私が普段直すものです。

第一段階:プロンプトのみ


「よし、やろうよ!」

さあ、準備はいいですか?これを入力してみましょう。この例ではシードは3095461575です。アップスケーラーはAnime4xSharpで、hires fixと1.5倍の拡大、CFGスケール10で、ノイズ除去強度は0.35を使っていました。 次のプロンプトは長くなっていますが、CLIP (StableDiffusionのテキストパーサー、つまりテキストを単語に分割するプログラムです)はタグだけでなく平易な英語も理解できるので、普通の英語の文章も含まれています。 また、テキストに十分な重みを持たせるためにBREAKを使っています。BREAKが何かわからない場合は、BDさんのガイドを参照してください。

(masterpiece, best quality, highres, absurdres:1.3) (illustration:1.3),(art by kantoku:1.2), (anime:1.2), (anime coloring:1.2), sharp focus. A girl is walking inside an abandoned shopping mall at night. The building is decrepit and no light comes out of it. Only the light of the girl's flashlight illuminates the surroundings. Everything is dark. There are no lights.

BREAK

1girl, (solo:1.4), (standing:1.2), (medium breasts:1.1), intricate dark brown hair, blue eyes, (bob cut:1.2), (parted bangs:0.9), (blue track suit:1.4), (blue sports bag:1.25), (cautious:1.3), (scared:0.6), (perspective :1.1), (vanishing point)

BREAK

(holding flashlight, gripping flashlight:1.3), detailed ultra photorealistic (abandoned shopping mall:1.25), empty shelves, (broken windows, cracked ceiling:1.2), (low lighting, rubble:1.2), (flashlight beam:1.2), (night:1.5), (darkness:1.4), dynamic angle, (eerie shadows:1.5), (chiaroscuro:1.8), (terror:1.3), (abandoned place:1.3), (grayscale:0.8), horror composition

ネガティブプロンプトはこれです。

(low quality, worst quality:1.4), (EasyNegative:0.8),(3D:1.4), (child:1.5), (loli:1.4), (realistic:1.5), (realistic face:1.5), (sketch:1.2), (lips:1.4), long body,(abstract background, simple background:1.4), [:(badhandv4:1.5):27]

BREAK

nsfw, (shopping bag, school bag:1.2), (lights:1.2), (outdoors:1.3), (mask:1.8), (windows:1.2), (day:1.3), (glowing eyes:1.2), (mask:1.9), (glowstick, camera:1.2), (trolley:1.2), (hip bag), (school), (day, sunlight, sky:1.4), (lamp, ceiling light:1.3), (red track suit:1.2), (cape:1.2)

一部のタグは冗長かもしれませんが、重い雰囲気を出したかったのです。そして、結果は…

まさか、あれが懐中電灯だと言いたいのですか?冗談ですよね。

見てもらえば、まやちゃんは…何かを持っています。懐中電灯かどうかはわかりませんが。それに、どこにも向けていないので、私が狙っていたホラー映画のような雰囲気は全然ありません。 まあ、仕方がありません。最初からやり直しましょう。

第二段階:ControlNet


「まだ終わってない!もう一回!」

ポーズはちょっと地味だし、ControlNetを使って思い通りにしましょう。CLIP STUDIO ASSETSというサイトで「ホラーポーズパック」という素敵な素材を見つけて、購入しました。それと、無料の懐中電灯の素材も。CLIP STUDIO PAINTで少し作業したら、こんな感じになりました。

では、次はControlNetを使ってみましょう!この作業では、openpose(weight 1)とdepth(weight 0.2、resolution 1056)を使ってイラストを生成します。 その結果は…

え?懐中電灯はどこだよ???

理由は簡単です。「depth」というControlNetは画像にかなり強い影響を与えます。そのため、早い段階で(weightは約0.4、control end stepは0.3~0.4)画像に反映させるか、あるいは全体的に低いweight(約0.2)で使うかのどちらかにする必要があります。そうしないと、ネガティブプロンプトにnsfwを入れ忘れたら、短髪(あるいは坊主頭)の裸の女性たちが大量発生するかもしれません。ですから、低いweightを使わなければならないので、生成中にAIが懐中電灯を忘れてしまって、別のものに完全に置き換えられてしまうのです。

「また失敗!?信じられない!」.

さて…どうしましょうか?

第三段階:ControlNetとsegmentationのモデル

前回の投稿を覚えていますか?ControlNetの"semantic"というモデルを使って、AIにまやちゃんとイレイルについて教えた方法を紹介しました。それと同じことを、まやちゃんと懐中電灯にもできます!

このチャートを使って(注意:英語)、すぐにこの画像を作りました。懐中電灯の色がなかったので、ランプの色を使いました。暗赤色は人間の色です。

このモデルも「depth」と同じくらい出力に影響を与えるので、いくつか調整をします。まず、AIが画像の情報を使うように強制するために、かなり高いweight(0.8~1)を設定します。次に、構図があまり変わらないように、生成の後半(ステップ0.15)から始めます。プリプロセッサーは「none」、モデルは「seg」(セグメンテーション)に設定します。他のものもすべて設定したら、「生成」を押しましょう。

やりました!大成功です!懐中電灯を持っているまやちゃんです!

「やったね。これは素晴らしい結果だ。」

より多くのディテールが写るようにweightの強さを弄ることができますが、weightの強さを低くすると、懐中電灯が他のものに変更される可能性が高くなるので注意してください。 Latent upscaleは、(アップスケール時にディテールを増やすために)イラストにランダムなノイズを目的に応じて挿入するため、モデルによっては、最終的な出力が大きく変わってしまう可能性があるからです。そのため、Latent upscaleを使用したHires fixと一緒に使用する場合は注意が必要です!こちらを見てください:

それは懐中電灯…なのでしょうか?それに、どこを向いているのかも謎ですね。

この問題に対処するには、いくつかの方法があります。影響を受けにくいモデルを使う、ノイズ除去の強さやアップスケールの値を下げる、別のアップスケーラーに切り替える、などです。ただし、この効果は大きなもの(棒や杖や剣など)ではかなり弱くなりますので、使う場合によっては気にしなくても大丈夫かもしれません。

最後に、自分で試してみたいという方への注意事項です。使うモデルの数が多ければ多いほど、イラストの生成に時間がかかりますし、VRAMの使用量も増えます。これらのイラストは16GBのVRAMを持つGPUで生成しましたが、VRAMの少ない方は、画像の解像度を下げたり、モデル数を減らしたりする必要があるかもしれません。

まとめ


「おめでとうございます。あなたは素晴らしいですね。」

以上で、今回の記事は終わりになります。役に立ったり、ControlNetを使って画像を改善する新しい方法を学んだりできたら嬉しいです。最後まで読んでいただき、ありがとうございました。次回もお楽しみに!