Pixiv Fanbox
最新のControlnetで差分イラストを作ろう!(背景・立ち絵編)
Published 06/21/2023, 10:02:04 PM · Edited 02/01/2024, 10:23:11 AM

こんばんは、スタジオ真榊です。今回は「差分イラストを作ろう」シリーズの第三回、背景・立ち絵編です。ここまで、表情や服装、ポーズなどキャラクターの一部分についての改変方法について見てきましたが、今回は対象がキャンバス全体に広がります。
このように、キャラクターを保持しながら背景やシーンを自由に差し替えることができるようになれば、画面全体が自由にControl可能になるということ。これまで全3回で見てきた差分の技術を総動員すると、キャラクターの一貫性を保持しながらあらゆる要素を自由に変更できるようになることが分かってきました。
こちらの左→右への変化は、生成を何度も繰り返したように見えるかもしれませんが、たった1回の生成でキャラクターを保持しながらのシチュエーション変更(表情・服装・ポーズ・背景の同時コントロール)に成功しています。今回はこの最後のピースに当たる「背景差分・立ち絵差分」の作り方について検証していきたいと思います。
前回までの記事をまだ読んでいない方はこちらからどうぞ。
【第1段階】背景を消そう
さて、まずはあるイラストから「背景だけを消す」方法から見ていきましょう。複数のやり方がありますが、大きく分けて「SDwebUI上でやる方法」「外部ソフトでやる方法」の2つがあります。
・その他タブで背景を消せる「Rembg」
まず最初に紹介するのはSDwebUIの純正拡張機能「Rembg」です。インストール後、「その他」タブで背景を切り抜きたい画像をアップロード。左下にある「背景を削除」メニューからいずれかを選んで生成ボタンを押すだけです。
それぞれのモデルの違いは以下の通り。
u2net:基本の「u2net」モデルを使って背景を削除する。
u2netp:u2netの軽量版。
u2net人物区分(human seg):人物部分のみを検出するモデルを使用する。(アニメ調イラストは苦手?)
u2net 衣装区分(cloth seg):衣装(布)部分のみを検出するモデルを使用する(上半身・下半身で分けて出力されるが、服装が上下はっきりした画像でないと失敗しやすい)
シルエット:「u2net」とは別の背景削除モデル。
isnet-general-use:より軽量な背景削除モデル。
isnet-anime:フラットなアニメ調イラスト向きのモデル。
生成結果
このように、それぞれ100%完璧にではないものの、前景(キャラクター)部分が切り抜かれます。特段どれが優れているということはなく、切り抜きたい画像の性質によって得意不得意があるようです。
うまく人物だけを切り抜けているように見えても、よく見ると「切り抜いてはいけない部分が切り抜かれてしまっている」ことがあるので注意しましょう。たとえば、「u2net」のスカートの右膝の三角形部分が色褪せてしまっているのは、そこが誤って切り抜かれてしまっているからです。髪の毛まわりは逆に背景が透過しがちですね。isnet general useはベンチの一部が残ってしまった代わりに、なかなか上手に切り抜けている感じがします。
生成と同時に切り抜く「ABG extention」
こちらもSDwebUIの拡張機能。インストール後、text2text画面かimage2image画面の左下「スクリプト」欄にABGRemoverが追加されます。text2text画面で起動すると、これから画像を生成する際、背景が透過された差分やマスク画像が一緒に出力されるようになります。
【操作画面】
Only save background free pictures:元イラストとマスクが生成結果に表示されない
Do not auto save:生成された画像がフォルダに保存されない
Custom Background:カスタム背景色。右側の■をクリックして色を指定できる
Random Custom Background:背景色がランダムで決まる
デフォルト設定では、こんな感じでイラスト生成のたびにマスク画像と切り抜き済み画像(白背景)が表示されます。
Rembgのように既に手元にある画像を透過したい場合は、image2image画面で使います。その際、必ずノイズ除去の強度を0.01などの低い値に設定することを忘れないようにしましょう。画像が変容してしまいます。
このように、なかなか綺麗に抜き出すことができました。
ちなみに、こちらの機能はSDwebUI上でなくともウェブブラウザ上でデモ版を利用することができます。動作が早く品質も良いので、ブックマークしておくことをおすすめします。
Photoshopの「背景を削除」
今度は外部ソフトを使う方法。ジェネレーティブ塗りつぶしで話題のPhotoshopですが、「背景を削除」という機能も備わっています。画像を読み込ませて、「背景を削除」をクリックするだけで前景が切り抜かれます。
が、アニメ調イラストでは意外とポンコツなのが玉に瑕。フォトリアルなイラストの方が向いているみたいですね。
ちなみに、これは本当に背景部分を削除してしまうのではなく、レイヤーマスクを生成して背景を隠しているだけなので、マスク部分をいじれば消えてしまったポニーテールもちゃんと復活させられます。が、マスク部分をいじること自体がもう面倒なので、あまり使えないかもしれません。アニメ調イラストを切り抜くときは、ABGremoverやAnime remove backgroundのデモを使うことをおすすめします。
さて、「精度や得意な画像に差こそあれ、これらの方法はどれでも前景であるキャラクター部分を抜き出すことができる」ということを確認して、次の項目を見ていきます。
【第2段階】「背景のみ差分」を手に入れよう
今度は逆に、キャラクターがいない「背景のみ差分」の作り方です。adobeジェネレーティブ塗りつぶしを使う方法と、Controlnetインペイントを使ってSDwebUI上で行う方法の2つがあります。
①ジェネレーティブ塗りつぶし
このように、折れ線選択ツールで大まかにキャラクターを囲い、プロンプト空欄で「生成塗りつぶし」をするだけです。「被写体を選択」でキャラだけ自動選択しようとすると、ポニーテールや足の一部がけっこう取り残されてしまうので、このようにおおざっぱに切り抜くことをおすすめします。
すると…
このように、切り抜かれた部分を「なんとなく」想像して生成してもらえます。ここまで大きく消しゴムマジックすると、このように別のオブジェクトが代わりに置かれることが多いですね。
あとはもう簡単、やることは同じです。邪魔な部分を選択して…
再度消しゴムマジックするだけです。ちなみに、ちゃんと影も選択しないと「何かがここにある」と推察され、また余計なオブジェクトが配置されてしまうので注意してください。細かなゴミもこの調子で消していきましょう。Shiftキーを押しながら選択すれば、複数箇所を選択することもできます。
ちなみにこのように選択すると…
ベンチの歪みやゴミ部分をなんとなく描き直してもらうこともできます。
ジェネレーティブ塗りつぶしはどうしても実写調に寄ってしまうきらいがあるので、気になる方はもう一度元イラストと同じモデルでimage2imageに通すのもいいと思います。
元画像と見比べたとき、背後に映り込む緑やベンチの細部があまり異なりすぎてはいけないので、最初にキャラクター周囲を選択するときはできるかぎり背景が残るように選択しましょう。例えば、ミナちゃんの左肩のところに小さく緑が映り込んでいますが、さっきまでの画像ではここが選択範囲に巻き込まれて消えてしまっています。(鉢植えの葉っぱだと解釈されてしまったのが原因)
上手にやれば、この程度に違和感を抑えることができます。
②CNインペイントを使う
Controlnetでもプロンプトを空欄にして推測してもらう「ジェネレーティブ塗りつぶし」的な使い方ができます。
まず、Controlnet画面で元画像を読み込み、このように消したい部分をマスクします。Controlnet is more importantを選び、プリプロセッサは「inpaint_only+lama」を利用しましょう。これはLamaCleanerでよく知られているLamaモデルを利用したプリプロセッサで、ただのinpain onlyより「消した後」をうまく処理してくれます。(存在しない続きを描くアウトペイントでも、inpaint onlyより上質な結果が出るようです)
text2img画面の設定は以下の通り。プロンプト・ネガティブプロンプトとも空欄にします。この際、高解像度補助をONにする必要があります。
このように設定すると、SDwebUIでもジェネレーティブ塗りつぶしのような「推察修復」とでも言うべき動作を行わせることができます。ただ、モデルによっては空欄生成でもこのようにすぐ美少女を生成しようとするので…
一旦生成を止めてやりなおし。実際には「blue_sky, ocean,bush,bench」といったプロンプトを入れて、人物なしの風景画像であることを強調することになります。ごく少ないプロンプトでないとうまく生成できないようです。
さて、こちらが生成結果です。左列がinpaint only、右列がinpaint only+lama。
X/Yプロットを使って実験してみましたが、やはり右列の+Lamaのほうが安定しているように見えます。また、Seed値によってけっこうランダム性が強いこともわかりますね。
Controlnetを使えば元画像と同じ学習済みモデルを使うので、ジェネレーティブ塗りつぶしのようにタッチが写実的になってしまうことは防げるのですが、ベンチの質感や拡大したときの不自然なカリカリ感を見てしまうと、個人的にはadobeに軍配があがりそうです。image2imageを挟めばもちろんきれいにはできるのですが、それはジェネレーティブ塗りつぶしでも同じですからね。
何はともあれ、これによってあるイラストから背景だけを抜き出すことができるようになりました。背景のみの画像があれば、例えば連作CGにおいて、キャラが登場する前のシーンに使うことができます。キャラの別ポーズ差分を作ったときに背景部分に微細な違いが出てしまっても、この画像を取捨選択して合成する(人力マージする)ことで元に戻すことも可能ですので、背景抽出は覚えておいて損はないテクニックだと思います。
【第3段階】背景を入れ替えよう
さて、背景なしの立ち絵と背景のみ差分が作れるようになったので、ここからが本番です。キャラクター部分を維持しながら、背景だけを差し替えるにはどうしたらいいでしょうか。
まず思いつくのは、こちらの記事で試した前景(キャラクター)と背景を別々に生成して、画像編集ソフトで違和感なく合体させる方法。Rembgなどを使った「キャラクターのみ差分」がすでに手元にあるので、これと適当な背景画像とをクリスタ上でレイヤー合成してしまうことが考えられます。
ただ、これには前景と背景で光源や色調などが一致していることが必要ですし、つなぎ目はコラージュっぽく不自然になってしまいます。もちろん、画像編集ソフトで時間を掛けて合成すればなんとかなりますが、目指したいのはもっと簡単に、魔法のように背景を入れ替える方法ですよね。
そこで、次のような方法を考案しました。
「Lineart+InpaintOnly」
まず、1つめの画面で切り抜いた前景(キャラ)を読み込ませます。使用するCNモデルは「LineartAnime」。これでキャラクター部分を確定させてしまいます。
二つめ以降のControlnet画面を設定する前に、とりあえずこれだけでどうなるか試してみましょう。「Controlnet is more important」で、元画像と背景プロンプトを変えて生成してみます。(outdoor,sky:1.20)を(night,city:1.20)に変えてみました。
もうこの時点でけっこういい感じに背景チェンジできましたね。ただ、問題は全くナイトでもシティでもないこと。キャラへの光の当たり具合も継承されているので、別の場所なのにやや不自然に感じます。胸の校章や全体の塗りも変化しており、元画像とは印象の違うイラストになっている気がしますので、もう少し差分らしくしてみましょう。
今度は、2つ目のControlnet画面を開いて「InpaintOnly」を起動します。このように、もとの背景が何も残らないように大きくマスクします。輪郭はLineartAnimeで保持できているので、キャラクターに食い込むようにマスクしてOK。
例によって、いずれも「Controlnet is more important」です。これで生成すると…
チェリーピックなし一発目でこれが出せるのはすごいですね!
ただ、一つ気になるのが、やはり光源と色調の問題。スカートのふちの逆光など、頑張って違和感がないよう繋げてくれてはいますが、やはり昼の海辺の公園のイラストと夜のイラストが同じ光源・色調なのは不自然に感じます。
そこで、過去のControlnet研究知識を総動員したところ、「全体のトーンを変えるのは…pix2pixだ!」という着想を得ました。「it is now midnight」の指示プロンプトで、昼の公園のイラストを夜に変えたことがありましたね。
ところが、これがなかなかうまくいかない。この例はアップスケール前ですが、このように…
元イラストの色を大幅に改変する過程で、ミナちゃんのリボンや目の色などが変わってしまい、キャラクターの同一性保持ができなくなってしまうのです(背景も変わってしまう)
その後もさまざまな方法を試しましたが、現時点では残念ながら「SDwebUI上で小細工をするより、手作業で加工したほうがずっと早く良質な結果が得られる」という結論に至りました。
まず、CLIPSTUDIOなどの画像編集ソフトでさきほどのイラストを読み込み。上に濃紺で塗りつぶしたレイヤーを重ね、合成モードを「ハードライト」や「ソフトライト」「オーバーレイ」にします。(複数当てても構いません。この辺りは好みです)
すると、このように夜らしい色調になるので、
光が当たる部分(というより当たって欲しい部分)だけを柔らかい消しゴムで消しましょう。グロー効果を掛けたり、適宜元イラストのレイヤーに色調補正を掛けることで…
このように、手っ取り早く夜らしい感じを出すことができました。Controlnetによる光源のコントロールはこれまでもさまざまな取組み(▼)が行われていますが、元画像を保持しながら完全に意図に沿った光源にするには、まだAIに任せるより人力のほうが早いようです。
終わりに
これまでの検証で、主にInpaintOnlyを駆使すれば、表情・服装・ポーズ・背景それぞれの差分を個別に作れることが実証できました。これまでに検証で作ったイラストをざっと振り返ってみますと、現在のControlnet技術では、およそこのような差分変更ができるようになったことがわかります。
それぞれ、一度仕組みを理解さえしてしまえばさほど作業は大変ではなく、十分普段の生成ルーチンに組み込める実用性の高いテクニックだと思います。
今回は「差分」という観点からControlnetの使い方をあれこれと検証してきたわけですが、別にビジュアルノベルを作ろうとしているわけではありません。これらの一つ一つの技術を組み合わせると、元画像のキャラクターデザインを維持したままでほぼキャンバス全体を書き換えられる、つまりAIイラストが最も苦手としていたキャラクターの保持ができるようになるのではないか?ということが検証を始めたきっかけでした。
もちろんLoRAを作るなどすれば、キャラクターデザインを維持しながらいろいろなイラストを作れるのはそのとおりです。ただ、キービジュアルが一枚あればさまざまな差分を作ることができたり、さらに差分を超えめ全く違うシチュエーションの一枚を生み出せたりするようになれば、創作の幅が格段に広がることは間違いありません。
次回はいよいよ、これらの差分技術を総動員すると一体どんなことができるようになるのか、集大成になる検証記事をお届けしたいと思います。
というわけで、「最新のControlnetで差分イラストを作ろう!背景・立ち絵編」でした。 それでは皆さま、近いうちにまたお会いしましょう。
Attachments (32)

isoxmjV7AWJnZFddhN8UCdjm.png

tkbRw9TPEO2Y9r1iLoEOMnuq.png

lCGw6j4V9ZxIu5JSL4mSHnn2.png

CyOgsAY2IuLACxQEKJqNMjOQ.png

82obrixesdo65g8PZ97GO1jU.png

myZI3lwTiWo3xdY1DbM8Ofa8.png

TeigKgH3R6NfG4I42WH5PbLH.png

IblV7tbnpUxvWAI9IsT5zf97.png

1POqR0EIrULoRJbccwIi0SSH.png

2fMVBaCztx77BJE7RJh7GD1c.png

HitR6zCpOJV6JQJlDli1PW0e.png

c6rhKi31zBrwE9h2aXML4YWX.png

dV01ZULdkltG5H8b4p0TayT1.png

mZDAok38M1FTITFzrezWpDUK.png

lqDr0NDrYc3wgqLwnK7vMooN.png

WVpjTFDXX0tmTXMCWyECER5I.png

HX0Wbvg12yMlEByxAY4qsnfC.png

gNeYQXTZtr5hNngwtD5Sdops.png

yMX9xkBcc1zRmqGVUAtQhPK7.png

xb7rgQM53o6OM4IsKyxOzcL7.png

kQS9cz0dd5FgzTCqPJLFBBz9.png

IHFmbjJvOEGFGxSYvIzePuJd.png

VW0HwHQqWGhBhlyojlbu0fw9.png

cQEFSA06fpIf8DomP6K2CruJ.png

PIkR6sz1pD3rcReOGhjrIILZ.png

mo1khkt51gR10ZgkCmaYgbqu.png

wukfjZDHgdrNMQXQyBTfA9zu.png

tEpW9aabQaQSj5lQ6zsDzo1S.png

1L0YEgYHxIbt57uOCiCDFDlL.png

9XXUhQf8tbfJ0H0IAE4G92iH.png

gQR1b7Ly5IQJjXVyoIQpI4D2.png

9SvLHCW9JpT3mrLdFBQnSjlM.png
