なぜ再現したか
研究でモーション生成を扱う上で、骨格構造が違うキャラクター間でどう動きを対応づけるかは 避けて通れない問題です。関節数や階層が違うモデルにモーションを流し込むには、 「この関節はどの関節に相当するか」を固定の対応表に頼らずに扱う必要があります。
そのアプローチとして、関節をトークンとして扱いトポロジーに依存しない表現を学習する手法に興味を持ち、 読んだだけで終わらせず手を動かして構造を理解するために再現実装を選びました。
実装したもの
- 関節トークン化:スケルトンの各関節を系列要素として扱い、関節数が変わっても同じモデルで処理できる入力表現を実装
- XCiT ブロック:チャネル方向に注意を取る Transformer ブロックを論文の記述に沿って実装し、関節数が増えても計算量が跳ねない構成にした
- 学習ループ一式:データローダ、損失計算、最適化、チェックポイント保存までを自作
- 形状検証:各ブロックの入出力次元をユニット単位で確認し、論文記載のパラメータ数と突き合わせて構造の妥当性を検証
詰まった点と対処
論文に書かれていない部分をどう埋めるか
公式コードが無いため、正規化の位置、埋め込みの与え方、損失の重み付けといった細部は論文から読み取れません。 そこで「論文の数式・図と整合する実装を複数候補として書き、パラメータ数と出力形状が記載値に合うものを採用する」 という進め方をしました。数字で照合できる指標を軸に置くことで、推測の当たり外れを判定できるようにしています。
データ表現の統一
モーションデータは形式ごとに関節定義も座標系も異なるため、まず自分の実装が期待する共通表現に落とす前処理を 用意しました。ここを曖昧にしたまま学習を回すと、モデルの問題かデータの問題か切り分けられなくなるため、 前処理の検証に時間を使いました。
研究とのつながり
ここで身についた「関節をトークンとして扱う」設計思想と Transformer 実装の勘所は、 現在の研究テーマであるキャラクター性と感情を分離したモーション生成で そのまま土台になっています。またモーションデータの前処理規約を自分で整えた経験は、 複数データセットを扱う研究環境の構築でも役立っています。