Home Artists Posts Import Register

Content

こんばんは、スタジオ真榊です!


ControlNet、してますか?毎晩寝不足な日々が続いていますが、今夜は前回の「ControlNet徹底解説!プロンプト苦難の時代が終わる…」に続き、具体的なポーズの付け方についての実践編です。


ControlNet公開以来、特にキャラクターのボーン(骨組み)でポーズ指定できるOpenposeをより自由に設定する方法が次々に考案され、拡張機能としても登場しています。今回はそれらを使って、さまざまなポージングの可能性を探っていければなと思います。よろしくお願いいたします!


…とその前に、ちょっとわたくしごとで宣伝ですが、ツイッターアカウントが開設7年目にして初めて5000フォロワーを突破しました✨ フォローしてくださった方々、お祝いしてくださった皆様方、この場を借りて御礼を言わせてくださいませ!



実験概要


さて本題に入りましょう。今回はスレッタちゃんに例のポーズを取ってもらう実験をしてみます。


プロンプトではほぼどう指定したものだか困ってしまう、例のポーズ…。ただ、Cannyやopenpose handを使ってこの輪郭をぶっこ抜くのは公式のi2iパクリとほぼ同じなので、それ以外の方法を使って再現するにはどうするのがよいか、実践していきたいと思います。



「scribble」で再現してみよう


まず最初に、「ポンチ絵」(ラフスケッチ)を使って再現を試みます。やり方はとっても簡単。Preprocessor「Scribble」、モデルも「Scribble」とし、一番下の「Create blank canvas」をクリックすれば下図のようなキャンバスが出てくるので、ささっとラフスケッチを描いてやるだけです。



我ながら特徴を捉えた良いイラストですねぇ!


(※背景が白いので、「scribble mode(invert colors)」にチェックをいれておきます。こうすることで、生成画像も背景が空白になるのを防いでくれる効果があるようです)


これを(anime color:1.2),(angry:1.3),suletta_mercury,scared,open mouth,sweat,white short pants,out door,wall(+ クォリティタグ&Lora設定)で生成したのが以下のイラスト。



うーん、惜しい!あのトンチキ絵でよくココまで…という驚きはあるものの、へっぴり腰がなかったり、ド正面を向いていたりと、ちょっぴり雰囲気が違いますね。この成果をもとにさらにCannyしてみると…



残念ながら右手の輪郭がうまく検出されずに消えてしまいました。腕がクロスしていることがしっかり分かるような輪郭を書き加えてやればもうちょっとうまくいきそうですが、今度はOpenposeを試してみましょう。



「VRMお手軽ポーズ」を使ってOpenpose!


さて、キャラクターに骨組みでポーズを指定することができるOpenPoseはプロンプトとi2iでなんとかポーズをつけていた我々AI術師に衝撃を与えたわけですが、「せっかく素晴らしい機能だし、もっと簡単に参考ボーン画像を作れたら便利じゃないか?」ということで、さまざまな試みが進んでいます。


例えば、こちらは「VRMお手軽ポーズ」を使って参考ボーンを立体的につける方法です。



FKだ!!!(古の記憶を刺激されるコイカツ勢)


こちらのサービスはもともとVRMモデルを使ってポージング画像を撮影できるWebアプリなのですが、キャラクターモデルとしてカラフル骨組みのVRMデータを使うことで、こうした3Dなアプローチが可能になったわけです。


使い方は簡単で、まずはまじかる☆しげぽんさんが配布されている「COCOv2互換リグ / 黒背景バージョン」を「このモデルを使用する」からダウンロード。「VRMお手軽ポーズ」を開いて「ファイルを開く」でさきほどの「.vrm」拡張子のファイルを開くだけです。



あとは画面上でボーンをクリックしてぐりぐりポーズをつけていきます。完成したら、こちらの設定でコントローラー表示とグリッド表示をオフにします。



png画像を保存してWEBUI上で読み込むこともできますが、もっと簡単な方法があります。「Shift+Win+s」キーでスクリーンショットを撮り、それをWebUI画面を開いてCtrl+Vで貼り付ければ…


画像をいちいち保存することなく、一発で貼り付けられます。便利~!


今回はこちらのポーズを付けてみました。心なしかへっぴり腰が再現できている気がいたします。



既存イラストからボーンを検出する必要がなく、自分でボーンを用意しているので「Preprocessor」はNoneに(重要)、モデルはopenposeにして生成したのがこちらのイラスト。



手の破綻はひどいですが、腕のクロス感を出すことができていますね。なんかちょっと壁を破壊している気がしますが…



「OpenPose Editor」を導入しよう


VRMお手軽ポーズの時点で既に超便利だったところ、新たに登場したのが、WebUI拡張機能「OpenPose Editor」です。なんとWebUI上でワンストップでボーン画像が作れるということで、さっそく試してみました。


インストール方法は公式に日本語で書かれているとおり。


・Extensionタブを開いて、「Install from URL(URLからインストール)」タブを選択。

・「URL for extension's git repository」欄に下記URLを入力

https://github.com/fkunn1326/openpose-editor.git

・インストールボタンを押し、無事インストール完了のメッセージが出たらWEBUIを再起動


でOKです。通常の拡張機能導入と同じですね。


成功すると、WEBUI上にこのような「openpose editor」タブが新たに生成されます。



WidthとHeightで画像の比率を設定し、「Add」で棒人間をいくらでも増やすことができます。


「Save json」で現在のポーズをjson拡張子で保存することができ、「Load from json」からいつでも読み込むことが可能。完成したら「save png」で真っ黒背景のポーズデータをpngで保存できるほか、「Send to ControlNet」でtxt2txtの画面に直接データを送れます。


実際に生成してみよう


この拡張機能の素晴らしいところは、2次元的にあっという間にポーズを付けられるところと、「Add」を押すたびに簡単に多人数を設定できてしまうところ。



このように適当に人物を配置し、6girls,outdoor,smileで生成してやると…




このように、細かなポーズは別として人物配置はかなり忠実に再現してくれます。部分部分によってはやはり7人になったりはするようですが、そこは重み調整によってある程度コントロールできそう。


「Detect from image」では既存の画像からポーズを検出することができ、「Add Background image」で参考イラストを表示させ、その上でポーズを編集することも可能です。



ただ、Openposeは人体がななめになったり、上下逆になったりするととたんにうまく表現できなくなります。こちらのボーン(▲)でベッドルームをプロンプト指定して生成してみましたが、このような結果に。



「Weight」を2にしてボーンのポーズをより忠実に再現させてみても…



ちょっとはましになりましたが、まだまだ特殊なポーズには対応しきれていないようですね。ちなみに、先日全裸土下座をこの方法で試してみましたが、人体崩壊しまくりでした。


「Add Background image」は本来、このように無人の背景画像ではなく既存のイラストを参考にして、手作業でボーンを指定するのに有用な機能です。


ただ、openposeの最大の弱点は、depth情報がないために立体的位置関係に弱いということ。パースが効いているのか、効いていないのか理解できないので、このように元画像では腰においている手を「手前に伸びているのかもしれない」と解釈する余地が生まれてしまいます。




これを解決するためには、やはりプロンプトで「hand on hip」などとプロンプト指定してやる必要があります。Controlnetが登場しても、プロンプトってやっぱり重要なんですね(反省)


その上で、ガチャした中で正しいポーズを探し、fake scribbleします。



背景のゴミが乱舞する謎の物体を生み出してしまっているので、画像編集ソフトで消してやったのがこちらの画像。



これをPreprocessor:None、モデル「fake scribble」で生成すると…



上手にポーズを再現することができました。


では本題に戻って、スレッタポーズをこの機能でつけてみましょう。ポーズの付け方は簡単。全体をドラッグアンドドロップで選択すれば拡縮することができ、各ドットをドラッグすることで位置を調整することができます。



VRMお手軽ポーズはポージングを3Dに詳細設定できる良さがありましたが、こちらは完全に2D画面上で点をいじるだけなので、もっと短時間にポーズをつけることができますね。ボタン一発でt2iのタブに飛ばせるのもありがたい。



ざっくり作ったこちらのボーン画像で生成してみると…



腕のクロスは再現できました。scaredがガチビビリで出てしまったのが失敗でしたが…。ただ、問題は左手がおなかの前にきてしまっていて、例のポーズとはちょっと言えなさそうなところ。



試行錯誤は続き…



二人だと解釈されたり、腕が多数本になったり…scribbleが一発で腕クロスを理解してくれたのに対し、実はopen poseは複雑なポーズの再現に向かないことがだんだんと分かってきました。むしろ得意なのは、キャンバスのどこに人がいるのか、おおむねどんなポーズでどちらを向いているのかを指定することなんですね。


良いところ、苦手なところ


さまざまな実験を経て、浮かび上がってきた得意不得意分野は以下の通り。


openpose:こちらを向いたスタンダードな立ち絵は一番得意。openpose editorを使うことで、特に人数の指定が簡単にできる。6人、10人といった多人数でもかなり強力に人数や立ち位置を指定することが可能。一方で、腕が交差したり、横になったり、頭が下に来たり、パースが効いたりした立体的なポーズの再現は苦手。線が重ならないポーズの再現にとどめたほうがいい。


scribble:複雑なポーズの再現に向く。かなりの柔軟性を持って理解してくれるので、下手なイラストでもかなり人間の意図を再現できる。正解ポーズが出たら、それをfake scribbleすることで可能性を絞っていくことも可能。一方で、描くのはたいへん。


今夜はこの2つを実験しましたが、マンガ的なパースは「depth」を使うことで再現できるとの実験報告(▼)が既になされており、まだまだControlnet研究は終わりそうもありません。




openpose editorにはまだ指の位置を指定するopenpose hand対応の機能がありませんが、もしかするとopenpose handを使うことで、スレッタポーズをより簡単に再現することもできるかもしれません。


openposeはキャラのおおまかな位置や腕の上げ下げ程度の指示にとどめておき、複雑なポーズを再現したいときは別モデルも活用していくのが賢い方法かと思います。


というところで午前4時15分!ちょっとは寝たいので今夜はここまでです。さようなら!さようなら!





Files

Comments

ギュスたん。

早朝間際までお疲れ様です。いつも参考にさせていただいてます。PC初心者ですので、コンスタントな記事掲載本当に有り難いです。 お身体ご自愛しながら探求を続けてください!応援しています!

MIDORI

なかなか面白いですね。使いこなせるようになったらもう何でもいけちゃいそうですね。これからも応援してます。

スタジオ真榊

コメント返せていませんでした、ごめんなさい!お気遣いくださってありがとうございます。体調はすこぶる良いので、楽しく元気に更新していきたいと思いますわ〜!

スタジオ真榊

segmentationによってこの記事の悩みの大部分は解決できることがわかってきたので、まだまだ研究は続きますわ。。応援、本当にありがとうございます!

ShadowS

いつもありがとうございます。 Blenderから棒人間に起こすツールが有りますよね。 3Dモデルから棒人間にするならば、奥行きの情報を保つことは可能に思うのですが、どうなんでしょうねえ?