TOP へ
Research / Motion Generation × Physical AI

ロボットとキャラクターの
「動作表現」をつくる

人が動きから受け取る情報は、「誰が動いているか」と「どんな気持ちで動いているか」に分けられます。 この 2 つを独立した潜在軸として分離し、任意の組み合わせで動きを生成することを主題に、 生成モデルの設計から実機ロボットでの検証までを一人で実装しています。

MAIN THEME
キャラクターの一貫性と感情を分離したモーションスタイル生成
APPROACH
Transformer + 拡散モデル / 潜在空間の分離
IMPLEMENTATION
PyTorch フルスクラッチ(既存実装の改造ではない)
STATUS
学会発表を準備中

何を解こうとしているか

既存のモーションスタイル変換は、スタイルを1 つのまとまりとして扱います。 「怒っているゾンビ歩き」を作りたいとき、スタイルが 1 軸しかないと 「ゾンビらしさ」と「怒り」のどちらかしか指定できません。

しかしキャラクターに動きを与える立場で考えると、この 2 つは別々に制御したいものです。 同じキャラクターは感情が変わっても同一人物と分かる必要があり、 同じ感情は誰が演じても伝わる必要があるからです。 そこでスタイルを「キャラクター性 z_char」と「感情 z_emo」の 2 軸に分解し、 学習データに存在しない組み合わせでも生成できる枠組みを目指しました。

単調な歩行モーションを、キャラクターの軸と感情の軸の組み合わせで9通りのスタイルに変換した図
やっていること:1 つの動作を、キャラクター性(縦)感情(横)の組み合わせで別々のスタイルに作り替える

下図はその処理の流れです。動作内容とスタイル参照を別経路で受け取り、 参照クリップを差し替えるだけで組み合わせを変えられる構成になっています。

コンテンツ動作 WALK / RUN / PUNCH キャラ参照 NINJA / ROBOT ... 感情参照 HAPPY / ANGRY ... CONTENT ENC. STYLE ENC. z_char (64) z_emo (64) DECODER スタイル変調 Transformer 生成モーション WALK × NINJA × ANGRY
動作内容とスタイル 2 軸を別経路で受け取り、デコーダで合成する。参照クリップを差し替えるだけで組み合わせを変えられる

生成結果のデモ

学習したモデルで、指定した「動作内容 × キャラクター × 感情」のモーションを生成した様子です。 可視化ツールも自作しており、参照クリップを選び直すとその場で再推論して結果が切り替わります。

MOTION GENERATION DEMO
PLAY — 生成モーション

自作の three.js ビューアで生成結果を再生したもの

研究テーマ

研究基盤

研究を進めるうえで必要な学習データ・計算環境・可視化ツールは、既存のものに頼らず自分で整えています。 試行回数を増やせる状態を作ること自体が研究の速度を決めるという考えからです。

DATASETS
キャラクター性・感情のラベルを持つ複数のモーションキャプチャデータセット(俳優・キャラクター別/感情別/スタイル別)を用途に応じて使用。 関節定義・フレームレート・座標系が異なるため、共通スケルトンへ揃える前処理を自作しています。
REPRESENTATION
21 関節の統一スケルトンに正規化し、各フレームを「全関節位置+回転+ルート軌跡」の 151 次元ベクトルで表現。 既存実装との数値一致(誤差 1e-7 未満)を検証してから研究に使っています。
TRAINING
自宅の単一 GPU(16GB)で 30 万イテレーション規模の学習を運用。 TensorBoard への全損失記録、学習の自動レジューム、外部 PC へフォルダごと持ち出して学習を再開できるスクリプト群を整備しました。
VISUALIZATION
three.js の自作ビューアで、内容・キャラ参照・感情参照・生成結果を 4 面同時に再生。 潜在空間を PCA で可視化する画面、外部の BVH モーションを取り込んで入力にできる機能、 任意の 3D キャラクターへリターゲットして表示する機能も実装しています。
EVALUATION
「見た目が自然か」を主観で判断せずに済むよう、評価指標とスクリプトを自作。 実データ分布からの逸脱、骨長の安定性、軌跡のドリフト、潜在空間のクラス内/クラス間分散などを数値で追跡しています。

研究を支える実装・環境構築

研究テーマそのものに加えて、先行手法を自分の環境で動かし比較できる状態を作る作業も継続して行っています。 いずれも制作物ページに詳細があります。