Home Artists Posts Import Register

Content

こんばんは、スタジオ真榊です。今夜はこれまでの差分研究の総決算として、Controlnetで表情、服装、ポーズ、背景を全て任意に変更する方法、つまりキャラクターの同一性を維持しながら全く違うイラストを作るやり方について解説していきたいと思います。


前回までの検証では、主にInpaintOnlyを活用することで、表情・服装・ポーズ・背景の差分を個別に作れることが実証できました。では、これらすべてを同時に行うにはどうしたらいいでしょうか。つまり、キャラクターの同一性が失われない最低限の情報だけを完全に保持しながら、それ以外の部分を一つ残らず全て任意に変更するということです。それも、何度も生成→入力を繰り返すのではなく、一度の生成で。



前回の記事冒頭でも紹介したこちらのイラストは、1回の生成でキャラの顔周辺以外を全て変更したものです。キャンバス上のほとんどの線が重ならないにもかかわらず、しっかり同一人物に見える出来に仕上がっているのではないでしょうか。


今回の記事では、このイラストが完成に至るまでの設定方法を詳しく紹介しつつ、さらにopenposeやwildcardなどと組み合わせる方法を検証していきます。



実験1:表情・服装・ポーズ・背景の差分を同時生成

今回はいきなりControlnet画面の設定に入るのではなく、ちょっとした下準備が必要です。具体的には、「キャラクターの線画を抜き出して、継承させたい部分以外を塗りつぶす」作業を行いましょう。


まず、元画像からキャラクター部分を抜き出すところから始めます。今回は「AnimeRemoveBackground」を使いました。上手に抜き出せたら、このように抜き出された右側の画像をドラッグし…


ブラウザの別タブで開いていたSDwebUIにもってきて、このようにControlnet画面にドロップします。Chromeの場合、ドラッグしてきた画像をタブ部分に重ねて一瞬待つと画面が切り替わります。


無事読み込めたら、プリプロセッサ「LineartAnime」に掛けて、黒背景の線画を抽出しましょう。先にキャラだけを抜き出しておけば、背景部分を塗りつぶす面倒がはぶけます。


次に、プリプロセッサプレビュー画面の右上にある「↓」ボタンからこの線画をダウンロード。そして、Clipstudioでもペイントでもなんでもよいので、下の画像のように手と頭、表情、下半身の部分を黒塗りで消してしまいましょう。残すべき部分は、キャラクター性を保持するための最低限の線だけ。ちなみに、頭の上部分を消したのは、バニーさん耳を足すためです。


ちなみに、肩や胸のラインなどを丁寧に残しておくと、ポーズのブレを防ぐことができます。また、絵心のある方はこの段階でボディラインや眉、目などを簡単に描き込んでしまっても構いません。黒目部分を消して描き直すことで視線を制御することもできます。

こちらが完成図。これをLineartAnimeモデルに読ませることで、キャラデザインの根幹をしっかり引き継ごう、というのが狙いです。


これで下準備はおしまい。


①LineartAnimeで最低限の線を固定

さきほどの線画画像を今度は左側で読み込み、プリプロセッサを「none」、モデルを「LineartAnime」に設定。言うまでもありませんが、noneに変更するのは既に抽出済みの線画だからです(プリプロセッサをLineartanimeにすると、線画からさらに線画を抽出しようとして低劣化します)


これで1つ目のControlnetは完成です。


②モデル画像を「Reference」

2つ目はこちら。以前作ったバニーさんイラストを参照(reference only)してもらいます。これは、背景の雰囲気を再現するだけでなく、バニー耳を含めた衣装のディティールを「念押し」する意味があります。参照したいモデル画像がない場合は、この手順は省略しても構いません。


③変えたい部分を「Inpaint」

3つめはこちら。「InpaintOnly+lama」で、最低限このキャラがミナさんだと印象づけられる要素を残しつつ、変えたい部分をマスクします。下半身や腕のポーズ、バニー耳部分、さらに表情も変えたいので、目と口にもマスクを加えました。これとLineartAnimeが重なることで、強力に顔周辺のデザインを固定します。


④差分元画像を「Reference」

4つめ。最後の画面では、変更元のイラストをReferenceOnlyで読み込ませました。これを入れておくことで、生成されるイラストのタッチや色合いがさきほどのバニーさん画像に引っ張られすぎることを防ぎ、あくまで「このミナさん」の別シチュエーションイラストらしくすることができます。

(※ReferenceOnlyの複数掛けは最近気付いたテクニックですが、あるイラストに引っ張られすぎることを防いだり、二つのイラストの融合に似た表現ができたりと、さらに研究できそうな分野だと感じています)


以上、すべて「Controlnet is more important」に設定することを忘れないようにしましょう。画面によってPixelPerfect(自動的に適切な解像度を選択してくれる機能)が入っていたり入っていなかったりしていますが、特に気にする必要はありません。なんとなく反射的に入れる癖があるのですが、これはLineartなど特定のプリプロセッサにしか影響しないはずです。


⑤プロンプト

最後にプロンプト。変えたい部分を全て打ち込むので長くなります。「夜の街路で恥ずかしそうにたたずんでいるバニースーツミナさん」というイメージです。


1girl, beautiful purple eyes,embarrassed,wearing bunny suit, playboy bunny, standing,(bunny ears:1.3),black Fishnet tights,black pantyhose,bow tie,white collar,cleavage,neon sign,sexy,clothes reflecting light,sexy pose,open mouth,shiny wet skin,night,entertainment district,road side,beautiful starlight,masterpiece, extremely detailed CG, official art, high resolusion,


その他、txt2image画面の設定は以下のとおり。


忘れがちなのが、目の色も指定しておく必要があること。何も指定しないと、バニーさん画像を参照して青い目になってしまいます。あとは参照させたバニーさん画像に沿って、シチュエーションの情報を盛り盛りにすればOKです。


4つのControlnetの作用により、「LineartとInpaintでキャラクターの顔周りのデザインのみを最低限保持し」、「モデル画像をreferenceして衣装のデザインを継承」、「かつ元イラストのタッチをreferenceした」全く別のイラストが生成されるはずです。


緊張しつつ生成ボタンをプッシュ…。



生成結果(チェリーピックなし)

意図通り、服装・ポーズ・背景・表情が全て元画像と異なるイラストができました!


確かに最初のミナちゃん本人でありながら、ここまで全ての要素を任意に変化させられたことに、素直に感動しています。もはやこれは「差分」という枠を超えて、新たなAIイラスト生成方法と言えるのではないでしょうか。


チェリーピックした一枚と、モデル画像にしたミナちゃんのイラストと見比べるとこうです。


顔周り以外ほとんどの線が重ならないため、もはや差分であることをほとんど感じさせない出来になっています。これが、今回差分研究を通じて達成したかった「キャラの一貫性保持」です。


キャラの位置変更も可能

ところで、上の2つのイラストは顔や髪の輪郭(マスクで塗りつぶさなかったところ)がほぼ一致していますね。プリプロセッサ「Lineart」にキャラクターのみの画像を読み込ませる前に、いったん画像編集ソフトでキャンバス上の位置をずらしてしまえば、キャラクターの立ち位置はキャンバス上のどの位置にでも移動・拡縮・回転できます。


例えばこんな感じ。背景透過画像なのでわかりくいですが、キャラ立ち絵を左右反転して小さくして縦長キャンバスの右下に配置しています。


これをプリプロセッサ「LineartAnime」にかけて、さきほどと同様に書き換えたい部分を黒塗りにしたのがこちらの線画です。



その場合、このように③のInpaintOnlyの画面でも位置を移動させた「キャラのみ画像」を読み込ませるのを忘れないようにしましょう。


結果がこちら。



キャラ部分を小さくすると、顔の表現が崩れるなどやや生成の難易度があがります。Inpaintで顔部分のみクォリティUPしたり、LamaCleanerを掛けてイメージ通りにしたあとアップスケールするなどすれば、もっと意図通りのものにできると思います。


実験2:Openposeを併用する

さきほどは1回生成にこだわりましたが、ここからさらに生成を重ねて良いのであれば、1度めの生成で得られた画像をさらに新たなモデル画像(以下、モデル画像2)とすることで、さらにブラッシュアップすることができます。


今度はOpenposeを使って、さきほどのバニーミナさんのポーズを変更してみましょう。ポーズ変化のやり方はこちらも参照のこと。

最新のControlnetで差分イラストを作ろう!(ポーズ差分編)

こんばんは、スタジオ真榊です。前回の「表情・服装編」に続き、Controlnetで作れる現状で一番簡単な差分の作り方について検証したいと思います。今回は「ポーズ差分編」です! このように、ポーズを一部だけ改変したり… キャラデザインや背景を維持したまま、Openposeで全身異なるポーズに変更したりする方法について検...


①Openpose Full

「モデル画像2」をプリプロセッサ「openpose」に読み込ませて、SDwebUI openpose editorを起動。今度は「ポーズコントロール」から、ちょっと手の混んだポーズ変更をしてみます。

「右手を追加」「左手を追加」を押すと、このように手のトグル(▲)が追加されます。位置を調整することで、四肢だけでなく指の位置も細かく指定することができます(Controlnet is more importantにしないと結構無視されるので注意)


ちなみに、下のスクショのように打ち消し線が入っているのは、ポーズ抽出で省かれた部位。このバニーさんイラストには両手の手首より先、膝より下が映っていないので、right kneeやright ankleなどが省かれています。この目のマークをクリックすると、省かれている部分を追加することもできます。


というわけで、今回はこのようなポーズに変更してみました。右手の親指を途中から消し(ドットを右クリックで消せます)、おしりの後ろに消えるように工夫してみましたが、うまくいくでしょうか。


完成したら、「Controlnetにポーズを送信」します。


②InpaintOnly

例によって、手があった場所とこれから移動する場所をマスクします。(ちなみに、下の画像ではマスク範囲が足りず、一回失敗することになります)


③ReferenceOnly

これはお守りのようなもの。差分に見えないようなタッチに変化しないよう入れておきます。

今回使うのはこの3つだけです。Openposeの設定だけ作れれば、あとは非常に簡単ですね。プロンプトは例によってマスクした部分に関係するものだけで良いです。


で、生成するわけですが、1回目は失敗してしまいました。こちらが一回目の失敗例。マスク範囲が狭かったため、右手がうまくつながらなかったのと、袖に関するプロンプトが足らず、一貫性のないデザインになってしまいました。


そこで、プロンプトにhand on hipやbare armsを足し、右手部分のマスクをひろげてあげます。


生成結果


おおむね意図した場所に手を配置できました!


左手は指が増えてしまっていますが、LamaCleanerでささっと消すだけで整えられそうですね。右手は親指がお尻の後ろに隠れるように工夫してみたのですが、逆に親指自体が消えてしまう感じになってしまいました。むしろ、こちらはOpenposeでしっかり指示するよりも、AIに自由に書いてもらった方がよい結果になるかもしれません。


実験3:写真からの背景取り込み

写真からの背景取り込みは、以前は背景と前景を別々に生成して合成するしかなかったわけですが、「背景差分」の応用で今度こそ一括生成できないか試してみました。

【Controlnet1.1】新モデルをフルに使って試す「写真とイラストの融合」

こんにちは、スタジオ真榊です。皆さんGWの真っ只中でしょうか?賢木は休みでも休みじゃなくてもSDwebUIをめっちゃ楽しんでおります! さて今日はControlnet1.1の全体検証とまとめ記事が一段落ついたのを受けまして、以前のこちらのツイートのように「CN1.1の最新モデルを組み合わせたらどんなことができるのか?」を検...


この2つのイラストの一括合成を試したのですが、結論から言うと「別々に生成して合成したほうがまだ簡単」という印象です。


できなくはないのですが、このように別物になってしまいます。


これにさきほどの背景を重ねて「人力マージ」すればより綺麗にはなるのですが、Controlnetで一から十までやるのが今回の目標でしたので、さらなる研究を要す…という感じでしょうか。


実験4:wildcardで完全ランダム生成

今度は「wildcard」を使い、キャラクターの同一性を保ちながらシチュエーションを完全ランダム生成してみます。Wildcardの設定などは下記の記事を参照のこと。

「Wild card」でもっとForever生成を楽しもう!

こんばんは、スタジオ真榊です。このところControlnetの研究報告が続いたので、今夜はとっても便利なのに取り上げる機会がなかった拡張機能、「Wild card」についての記事を書こうと思います。「固定シチュエーションを色んなキャラで描いてもらおう!」で紹介したDynamicPromptに似た機能で、何にでもなれる「ワイルド...


プロンプトは以下の通り。それぞれ、wildcardには服装やポーズ、表情、場所、行動といったタグが入力されています。


(girl in __wear__:1.3), (__pose__:1.2), (__expressions__:1.2), (black hair in side ponytail:1.1), (white hair ribbon:1.0), (gleaming purple eyes:1.2), (red glasses:1.0), (__outdoor__:1.2), (anime coloring:1.4),(__gesture__:1.3),[blue sky|night,stars],masterpiece,extremely detailed CG,official art,high resolusion


Controlnet画面の設定

LineartとInpaintは基本の通りで、特筆すべきことはありません。



上の2つだけでも十分生成は可能ですが、あくまで「差分」にしたいので、こちらの基本モデル画像をReferenceOnlyで入力します。


生成結果






組み合わせが完全にランダムなので状況はよく分かりませんが笑 全部ミナさんのままでランダム生成できるのは大変画期的ですね。これは本当に幅広く解釈を広げたパターンですが、もちろん狙ったシチュエーションに絞ったプロンプトにすれば、キャラを固定しつつ狙いどおりの状況のイラストを量産することもできます。nsfw系でぜひ試してみてください。


また、大量生成する中でうまく狙った通りのポーズや衣装、表情ができたら、それを新たなモデル画像としてReferenceさせることで、そこを最低ラインとしてクォリティーアップしていくことができるのも素晴らしいですね。


終わりに

現在6月23日午前5時。完全に夜が明け、というより出勤時間がせまっておりますが、ずっと目標としていたキャラの同一性保持と任意変化が追加学習なしで可能となり、胸安らかであります。この生成方法になにか名前をつけたいところですが、今夜(?)はもう寝なくては…


今回の記事はとっても手応えがあったので、もし気が向かれましたら、こちらの記事ツイートを拡散などしていただけたら嬉しいです(宣伝)。



このあいだのバニーさん画像連発のおかげで見事にシャドウバンが再発してしまい、ツイートのインプレッションががっつり下がっていまして…。nsfwでなくても、露出の多いイラストはやっぱり危ないですね。


先日からこのツイートのように、画像をインライン表示してブログ記事風にしたツイートがTwitterBlueの新機能でできるようになりました。記事の冒頭を少しだけ読めるようにした方が、どんな感じの記事かわかるので親切かなと思い、しばらくこんなふうに運用してみようかと思っています。ご意見ご感想などありましたら、コメントなどいただけると嬉しいです!


それでは皆様、3部作+1記事にわたる長い検証記事を読んでくださってありがとうございました。今回の記事が皆様の創作に役立つことを願っています。


Files

Comments

No comments found for this post.