1枚の絵しかなくてもAIで角度やポーズを変更する!
前回1枚絵から3Dモデルを作ることができるDreamGaussianを利用することでAIで画像の角度を変更するという記事を書きました。
ただDreamGaussianで3Dモデルを作って回転させてもそこまで制度は高くないのでAIで清書をする必要があり、そのためには角度を変えたい絵をすでに学習しているモデルかLoRAが必要です。
ただ、「絵の角度を変えたい、ポーズを変えたい」と思うときは、モデルやLoRAを作れるほど十分にないことが多いはず!また、アニメ絵や写真はDreamGaussianでの3D化にあまり向いていないのも克服したいところ。
そこで今回の記事ではどうやって絵が1枚しかないところから、絵をなるべく崩さずにいろいろポーズをつけたり角度を変えることができるかということをやっていきます。
私のキャラクターである「渚の妖精ぎばさちゃん」、この正面絵から
この横向絵が作れるように!手の作画崩壊は気にしない!
1枚絵からバリエーションを作るには
1枚の絵からバリエーションを作る方法として、ControlNetのReference-onlyやIP-Adapterがあります。
ただ、Reference-onlyもIP-Adapterもかなり雰囲気は変わっちゃうんですよね。元絵はそのモデルで生成したものでないと再現するのは難しいのかもしれません。今回の元絵はAIで生成されたものではなく、絵描きさんによる作画です。
そこで1枚絵だけでオリジナルの絵柄を再現する手法が「1枚絵をベースにLoRAを作る」です!
拍子抜けする方もいるかとは思いますが、ポーズや角度を変更したときの絵柄やデザインの再現性はReference-onlyやIP-Adapterを上回ります。私が試した限りでは。またLoRAの作成に多少の工夫はしています。
DreamGaussianから出力した画像にControlNetのCannyとDepthを0.5ずつかけた上で、「1枚絵LoRA」とReference-only、IP-Adapterでの比較をしてみたのが次の画像です。上に挙げた元画像のぎばさちゃんと比較してみてください。1枚絵LoRAのプロンプトはLoRAのトリガーワードのみです。
はっきり言って1枚絵LoRAの圧勝じゃないでしょうか?まあ、元絵と構図が近いというのもありはするんですが。
ただ、「1枚絵LoRA」はこれだけじゃないんですよ!この生成画像をさらにimage2imageをかけて清書することができるんですよ!これは他の2つの方法にはできないんですよね。
image2image清書の威力を真横からの画像で試してみましょう!DreamGaussianで真横からの画像をControlNetのCannyとDepthを0.5ずつかけて1枚絵LoRAを使って出力します。
この時点で結構再現度が高いんですがこれをさらにimage2imageで清書します。強度を0.5にしてimage2imageすると……。なんと、消えてしまっていた海藻状のアホ毛が復活!
さらに何度かimage2imageをかけるとヒトデ型のカバンも復活します!ちなみに何度も繰り返すなら最初から強度が高い方が良いんじゃないかと思われる方もいるかもしれませんが、最初から強度が高いとほぼ元画像のものが出力されます。
まあ、手がおかしくはなっていますがこれは通常の作画時と同様に直せばよいです。
ただ、このimage2imageでの清書は「元画像に近づいていく」という行為でもあるのでそこは気を付けてください。最初に出した1枚絵LoRAのサンプルで清書しすぎた場合を見てみましょう。
アホ毛が復活してくれてはいますが、せっかく角度がついていたのに元の画像の角度に戻っていっています。こういうときはInpaintやInpaint sketchも使いながら画像の精度を上げましょう。
そして、こうやって作った角度変更画像もLoRAの素材に入れれば、LoRAの表現力も上がります。
1枚絵LoRAの作り方
「1枚絵LoRAなんだから絵を1枚だけ入れればいいんじゃ?」と思われるかもですが、元絵は1枚なのを増殖させてLoRAを作ります。具体的には「画像の角度を微妙に変え、背景も全部変える」です。ここでの画像の角度は3次元的な回転ではなく、2次元的な平面上のものです。今回はこのように素材を作りました。
LoRAは背景ごと学習しちゃうのでキャプションで制御したりしますが、キャプションでの制御より背景の種類を増やす方が1枚絵LoRAの場合は良いです。今回は4種類でしたがもっと種類があった方が良かった気がしますね。また、それに加えて顔と上半身のアップを入れています。
角度を変えた画像を入れるとControlNetのcannyやdepthを指定したときに、デザイン崩壊度合いが小さくなる気がしています……。気休めかもしれませんが。
とにかく、こうやってLoRAを作るとReference-only、IP-Adapterより元絵再現度が高く、三次元的な角度やポーズがつけられるようになります。
ポーズをつけてみる
1枚絵LoRAはプロンプトではほとんどポーズが変わらないのですが、ControlNetを使うことでポーズをつけることができます。まあ、絵柄の再現は落ちますけどね。
コマネチは極端なポーズなので、絵柄の再現もポーズの再現も悪くなってますが、1枚絵LoRAであってもポーズが取れるということが重要です。これも清書して、新たにLoRA素材に加えればLoRAの精度が上がっていきます。
ちなみにControlNetのposeは向きを反映しないですが、CannyやDepthは輪郭線や深度を再現するので向きも再現してくれます!これだとDreamGaussianなしで三次元的な角度の変更が可能!ただ、CannyやDepthは元となる3Dモデルのシルエットになってしまうので、ちょうど良い3DモデルがなければDreamGaussianを使うという形になるかと。
絵に描かれていない個所を補完する
向きを変えたりポーズをつけたい絵が上半身しかなかったりということもありますよね。実はこれも1枚絵LoRAで克服できるんですよ!
ここのサンプルにはSD1.5系のアニメ絵モデルが苦手とするおばあさんの絵を使います。SDXLで出力したら以外にあっさりとアニメ絵のおばあさんが出てきました。ただ、胸の上までしかありません。
ほとんどのSD1.5系のアニメモデルではGrandmaと入れてもOld womanといれても年齢を指定してもこんな感じのお姉さんになっちゃいます。
なので、ちゃんとおばあさんが出てくればそれはLoRAがちゃんと効いているということです。
さて、上半身しかないところにどうやって全身を作るか?これは意外と簡単でControlNetを使うだけです。
ControlNetのOpenPoseを使って、おばあさんにコマネチをしてもらいましょう!
おおお、足が生えてきているじゃないですか!プロンプトも効くのでお好きなデザインにすれば良いのです。
向きを変えてみるのもやってみましょう。先ほど書いた通りアニメ絵のおばあさんはなかなか出ないものなのでフォトモデルで出力しました。可能な限り装飾物等は元絵に合わせています。
これをおばあさんの1枚絵LoRAにControlNetのCannyとDepthの両方を適用します。OpenPoseでは向きが反映されないからです。そして、CannyとDepthを適用するために元絵になるべくデザインを合わせています。
実際に出力したのがこちら!
ちゃんと横向きになっているうえに元絵にない部分も補われています。そして、最初のControlNet適用時は写真のほうによったデザインで髪も直毛でしたが、image2imageで清書することで元絵の髪形になっています!
最後に
前回のDreamGaussianからはじめて、1枚絵LoRAを使ってたった1枚の絵からポーズや三次元的な向きを変更するのはいかがでしたでしょうか?
まあ、絵が描ける人なら描きなおした方が早い場合も多いでしょうがw
1枚絵LoRAを作るのは手順的に全自動で行けそうなので、どこかの作画サービスが機能で入れるかもしれませんね。