生成AIでどこまでいけるのか研究リターンズ![]()
前回から年単位で間が空いた。 ニュース上のAIは追っていたが身辺が忙しく生成AIから離れていた。 その間に状況が様変わりしていたので現行最新の生成AIが集まるComfyUIを導入し暫く弄って居た。 なるほどこれは面白い。 ノードベースで繋ぐプログラム…さながらpython界のCFみたいなものだった 慣れるまでは大変だが慣れてくると色々と構築したくなるというもの。 例によってお題はゲーム用アニメーションデータだ 最近は動画生成AIもあるのでそれを使ってスプライトアニメーションも作ってみたりしたが ゲーム素材として見るとやはり今一つの出来になってしまう。 細部デザインの破綻は目をつぶったとしても中割コマの残像化など対処できない部分がどうしても出るのだ そもそも考えてみれば学習元の映像自体、動きのある物はブレて記録されているのだからブレているのが正解だ… 正解を再現してくれているんだからこれはもうどうしようもないのだ そこで今回考えたのはSpineだ 検出AIを組み合わせればその素材が上手く作れるのではないかという研究である (容量削減に破綻も無くなる一石二鳥) 問題はSpine素材を作り上げるまでの労力をどれだけ削減できるかである 今回主に使うのはPose Landmarkerとセグメンテーション検出 https://ai.google.dev/edge/mediapipe/solutions/vision/pose_landmarker https://ai.google.dev/edge/mediapipe/solutions/vision/image_segmenter Pose Landmarkerによって関節が検出できるというAIソリューションでこれの検出を画像に適用するとこんな感じに検出される この時点で既にボーン情報が得られたと見ることが出来る
![]()
(驚くべきは裏側にある構造の推測があり、映っていない腕の情報まである) 適当に動画化AIにアクションさせて検知
…お判りいただけただろうか。 座標差分を見れば既にアニメーションキーフレームが完成していることに!
次に素材の切り出し 画像からパーツを切り出すだけだが、これは実に労力が掛かる。 ある程度はやむなしだが全部切り出すのはとても大変だ とにかくそこをどうにかしたい! プロトタイプとしてセグメンテーション判別とボーンの階層構造をjson出力するComfyUIワークフローを組んだ (残念ながらmediapipeによるセグメンテーション検出は実写学習モデルの為アニメ系には使えず)指定範囲を組んでSAMによる検出をUI化して繋ぎ込み、ボーン位置と連動させれば 必要な画像パーツのセグメント検出で自動的に切り抜くという代物だ…しかしこれでもノイズは混ざる
位置計算を挟みSpineの構成情報となるjsonを構築
最後はアレコレ手直し
そしてプロトタイプ う〜ん?
素材の切り出しをどうするかこねくり回していたが seethroughというlive2d切り出しモデルが最近出たらしい。セグメント検出の精度を上げる為に色付けしみたりしていたがAI学習には勝てませんね… 欠けてる部分の塗り直しもしなくて良くなるなんて…seethroughを試すことにする ボーンについては親子構造に対しlengthを取り、atanで方向を合わせる
Spineのインポートフォーマットを調べ 頂点データからリグを自動で生成できるように調整 髪のボーンはARマーカーを使ってボーンになるように融合する これなら3D人形でもARマーカーをテクスチャにするだけでモーションキャプチャが可能となる ここにきてARが秘密兵器となった で、一発ポンでリグ形成
IKも自動で埋め込み AIにメッシュ割アルゴリズムを聞いたりしてメッシュ化 髪ボーンも自動で物理が効くように調整
バラのパーツを調整するのがなんだかんだ大変なので 少しでも楽になるようにボーン情報を基点にピクセルの重なりを調べ 関節部に必要な塗り直しガイドラインを自動生成 透かして塗り込むだけで良くなり凄く楽になった…
そしていよいよ抽出した頂点差分を使いアニメーションデータ化 なんだかおかしい感じはあるが 一発ポンの未調整でここまでできるなら随分と良いだろう 他のキャラクターでも上手く行くか色々試してみよう
タイトル:[ジュエルセイバーFREE] URL:[http://www.jewel-s.jp/] 純粋なイラスト検知ではまぁまぁの精度。 そもそもPose Landmarkerは実写学習だから仕方ない。 しかし実写で認識するのであれば、AIで実写に変換すれば良いとも言える キャプチャには実写、素材はイラストと分ければ良い。 Spineならそれができる…
大き目の画像でも抽出できた
AIと対話するのにいちいちWEBツール(DEEPLなど)を通していたが手間を減らす為に内部でAI経由させる事を思いつく。 ComfyUIにはOllamaのカスタムノードがあるのでこれを使い 実行時に日本語文章からLLMを通じ自動プロンプト生成して実行するという流れにした。 すばらしい
なによりもまずSpineモデルの上手な作り方を知って居るかどうかが根底にある事を実感した。 Spineを勉強せねば… というわけで何が違和感の正体か調査と実験をしていた。 クオリティの高いSpineを作る為の解説を見たところ2.5Dを意識したモデルづくり 特に中間ボーンによる体の捻りが重要であることが分かった。腕や足に合わせて体も一緒に動くような作りのテスト 物理揺れモノ(自動制御)の動作確認 それらしくはなってきたか。 しかし服を着ていない方が繋ぎ目を隠せないためごまかしが効かず高難易度であることもわかった。。。
適当に画像ぶっこんでモーション抽出&Spine再生
獣人化させると人体検出精度が下がった。そりゃそうか。拡張オプションとして猫耳ボーンや尻尾ボーン、羽生成もできるようにしていた。
しかし人体骨格トラッキングでアニメーション化するにも 本来検出できない人体外パーツを手打ち作業で合成するのは大変なのでどうにかできないものかと考えていたところ WARP_GATEの作成研究で使っていたオブジェクトトラッキングの併用を閃く。 オブジェクトトラッキングは記憶した画像の変化量を見るものだが これを獣人パーツに適用すれば変化量を追跡できるのではないだろうかと。結果は人外パーツの自動認識に成功(アニメーションデータにできるということ) しかしトラッキングモデルでは人体の誤検出が発生する/(^o^)\ うまくやるには骨格検出との併用をせねばならんが、前述の通り獣人画像では骨格の誤検知が起こる まぁ構想はひねり出してあり これまたAIのSegment Anything Model(SAM)でセグメント抽出を組み合わせて行けば骨格検出へ繋げられるのではないかと。
ボーンは物理設定にしておけば勝手にしなってくれるので喜ばしい AI機械学習総動員で挑むものの 時間が足りない(無職の癖に)とはこれ如何に。
ボーンデータを元にSAM検出を行う見事な検出精度。 そして、人間化
獣耳を黒くしているのは、ただくり抜いただけだと酷い骨格検出精度になった為 (陥没していると人の頭と認識されなかったようだ) 帽子を被っているかのようにごまかしたら精度アップ…
と思いきや、何故か検出精度が悪化する。 (顔を肩にされている)
細かいところで見るとくり抜きすぎている部分もあるし髪の色が肌の色に似ているのもあるのかもしれない。 かといって転生前の人型の時は検出できていたので前者の恐れが強い。 まぁとにかく認識出来れば大丈夫だろう… みんな大好きi2iも組み合わせてそれっぽくしてもらうAIイラスト変換特有の別人化したり髪とか服とかチラチラするが
案ずるな、私は君たちのガワには興味が無いんだ (骨しか見ていないマッドサイエンティスト) …いい感じに骨格が抽出出来ているようだ。 獣人だろうと天使だろうと堕天&転生させて骨を拾うというまさに黒魔術。
オブジェクトトラッキングの弱点は手足の交差にある (右足と左足がくっついてしまう)
骨格推論との融合… 成功だ。
見ての通り羽や尻尾、髪の毛までもが直線最短距離による分割なので 物理で揺らしてみるとわかるがとにかく見栄えが悪い ボーンだけで見ればそうでもないがメッシュとなると酷い物なのだ 今回はここに手を入れる調べてみるとOpenCVのdistanceTransformが使えそうだったのでこれを使い画像から外側までの距離をマップ化する これだけでは尻尾のような弧を描いている画像にどうも弱かったので 画像を煮詰めて、完全な線となった状態にして重心を割り出す 割り出した重心線に自動ロボット制御とかでおなじみのライントレースを応用して重心に沿ったボーン位置を確定させる
こちらも成功 ボーンが画像に吸着できるようになった
胸のボーンを忘れていたので同様に重心トレースを施す 揺れモノパラメーターやメッシュのバインド比率計算も調整正しい重心とボーン配置によって一段階上の揺れ具合にできたのではなかろうか
骨格検出はどんなに精度が高くても肩の上が検出される(これが仕様) 実際にSpineで使用したいポイントはパーツが一回転しても後ろ側があまり見えない地点、つまり重心にある。
モデル生成の段階ではこのズレている骨格情報では使い物にならない為改良を加える。 今までは任意のポイントをARマーカーを合成することで補正していたボーンポイントだが 目視ではやはりズレる為ここにさらに重心割り出しロジックを当てはめて吸着させパーツの精度を上げる試みをする。 こういった地味な調整が続く。 (赤い点が目視よる無理矢理補正ポイント、緑が割り出された重心線) しばらくはオートメーション化の為の調整が続く 実に眠くなる
他にもモーションキャプを見つけたのでメモ https://github.com/freemocap/freemocap
アニメーション合成にも着手中間ボーン追加に物理パラの調整 (物理パラはどういう計算すればいいのか想像つかないのでとりあえず決め打ち) テクスチャチェンジも追加した 顔とか手とか、本当は左手もグーにしたかったが時間の兼ね合いで妥協 それなりに形になってきたか?
歩きモーションは人体状態からモーション抽出できたので転生不要
走りモーションは実験込みで羽と尻尾有画像から転生させているので若干遠回り (デバッグ用に転生前素材との合成) 細かく見れば下半身の捻りが課題だが、Spine素人には今が限界。 まだまだ勉強せねば…(上半身と下半身のパーツを分ければできるか?)
上半身と下半身のパーツを分けたりパラメーターの調整をしたりと地味な調整が続いていた。 Spineのバージョン差異もあり、なかなか手間取ったが遂にここまで辿り着くことが出来た。しかしまあきっと一発でSpine出力できるようなAIも出てくることだろう 〜完〜
〜続〜 もはやSpineモデル生成プログラムはほぼ完成と見込んでいたが ついでにひとつ上の表現力を実装しようと思いSpineExtensionにも手を入れる ここから先はサドンデスでありもはや生成AI関係無し!
IKやボーンをアニメーション中でも操作できるように改良しつつ いわゆる地面に沿った手足を実装できるようにした。 ・・・つもりだがモデルの足の構造が悪くイマイチな結果となった。 接地の為につま先や踵を含めた足のボーンを追加せねばならんようだ…
公式サンプルを参考に見るとベタ足のボーンを末端に入れるのが良さそうだ。 上手く行ったらSpineExtensionもバージョンアップ作業となる。 まだまだやる事が山積みだ…。
ボーンの自動生成構造を公式水準に拡張することに成功
これにより足の裏の地点にあるボーンが基準となり足首もIK化したのでめり込み制御も直ぐに可能になったはず
しかし恐ろしい事に最新のCFでAndroidRuntimeがいつのまにかかなり拡張されていたようで 現在公開しているSpineのAndroidが動かなくなっていた。 対応せねば…(対応した!)
ゲームを作るにしてもまだまだパーツが足りないことに気づく。 とりあえずアクション向けキャラクター生成プログラムは一応完成したとして一旦離れる。 再度生成沼へ戻ることにした。 そして次は会話シーン等のバストアップモデルの自動生成に挑む。まずは適当に正面を向かせてAI動画化する。 今でもボタン一つでこういうのが作れるのが驚きだが、これをこのまま使うとえらいことになる(容量が) 生成動画は狙った動きをプロンプトで作る事が簡単に出来るとは言えないのも大きな懸念点だ。 しかし融合研がゴールにしているのはボーン抽出である。 いっそWEBCAMを通じて自分が演じても良いが、骨格までは合わないのでそこから更に転生させる必要もあるだろう… (この計画の行きつく先はSpine抽出なので元画像は別に生成画像である必要も無い)
そして勿論静止画としてみると動きのある細部はバッチリ破綻している
ここからおなじみgoogle大先生による検出AIを頼る。 https://ai.google.dev/edge/mediapipe/solutions/vision/face_landmarker今回試していくのは顔のランドマークに特化したAI検出で これもまたボーンに落とし込み差分を頂戴すればアニメーションデータも手に入るだろうという寸法である。 この手の方向ではフェイスリグとかVTuberだとか沢山の先輩方もいることだろう。 …いざ検出
なんの成果も!!得られませんでした!! ※進撃の巨人 諫山創/講談社 骨格モデルとは異なり、獣人どころか人間状態でも全く検出することが出来なかった。 …まさに人間の顔のみで微細な動きを学習した特化モデルである事がわかる。
AIで困ったらAIに聞く ということで…聞いてみると アニメ系に特化した学習モデルもあるという Anime Face Detector https://github.com/hysts/anime-face-detector dlibのアニメ顔学習済みモデル等、 類似の検出モデルも多数存在することがわかった。 融合研の冒険はまだ始まったばかりだ!(完)
本日はあまり上手く行かない日に終わった。 Anime Face Detectorは環境構築が特殊で難儀しかけたので一旦白紙。 環境依存が多いライブラリを使用しているらしく現行環境を変更してまでのインストールが必要になり難しかった。 dlib学習モデルもなにやら上手く行かずに終わった。 ついでにセミナーも失敗する(ここでは関係ない話題) そんな日もあるさ!
転生術による検出の検証何もないよりは検出できるようになったが目の幅が足りない。 実写学習モデルがベースなのでリアル人間サイズに検出されているようだ。 まぁ誤検出とも言える状態である。 これを全て手直しするのはキツイので無しとする。 Anime Face Detectorの導入を優先する事にした。 環境依存があってどうしようもなかったのでfaceボーンを抽出するだけの仮想環境を作成し 抽出を中間ファイル化し後で合成できるように仕様を変更する
頑張ってAnime Face Detectorを導入した 動作環境に必要なモジュールの相性が悪いので複数の仮想環境をはしごしての実装 しかし、頑張った甲斐のある検出精度となる目玉の位置はAnime Faceでは取得できない為、別のAI検出を組み合わせて合成する こっちはまだ実際取れているのかよくわからんので運用次第となるが いずれにしても転生せずに取れるようになったのも良い
ざっくり抽出 輪郭にボーンがあれば多少の向き変化も2.5D的に対応できそうな気はするが まぶたとかもどのくらいあればいいんだろう Live2Dはデフォームベースでボーンはなかったのでこのあたりが割と未知数 なんだかんだで実験ソースが大掛かりになって煩雑になってしまったので 一度作り直しレベルで洗練&改修中。 脳内に設計図があるうちに一気に進めてしまいたいが 忍び寄る就活認定日に震え上がる日々
リファクタリング中。 これまでの実験からどのように自動化するのが良いか勘所を掴んできたので再度ゼロからの再構築。 処理を細分化し検出機構と構築機構を分離しモジュール化する。 まだまだ動くに満たない。(あちこちズレてる) 引き続きバストアップモデルの検出とテンプレ化を進める。 表情コントロールのボーンが大変だ… アクションゲーム向けはこのままフェイスボーン関係を一掃し フェイスパーツは全て顔テクスチャとして画像合成すれば動かせるようにする想定 先は長そうだ…
完全な初動ミス。 バストアップモデルという事で元画像を拡大したが 手が見切れている事によって重心計算が破綻していたようだ… とりあえず膝くらいまではある状態で作り直す事に。
モデルの作り直し…そしてモデルの検出工程をやり直していると気が付いた。 これはもしかして検出デプスにボーンからSAMすれば(謎語w) 羽や尻尾の堕天転生と同じ処理の応用で 切り出しパーツも殆ど自動分解できるんじゃないか…?
髪の分解・腕の分解・胸の分解
8〜9割成功ってところか。AI特有の塗りムラか、若干欠けている部分もあるが最後に手直すれば良いので 初期モデル配置のパーツ別け作業は大幅短縮といえる。 どのみち回転パーツの整合性合わせ等で手を入れて行く必要はある。 画像コンバート&合成して画像未処理でここまで作ることが出来た。 しかしアクション用は実験含めてもあり顔パーツなど端折れるところは端折り比較的小規模に漕ぎつけたが バストアップモデルはまだまだ手を入れる箇所が多く想像以上に巨大だった。 そりゃ専任デザイナー要るわなぁ。
顔パーツの自動化難し過ぎ。
失敗と調整の繰り返し。 出口はまだ見えず。 難易度的に顔パーツがラスボスだ…