8つの入力から58の胴体パラメータへ:学習損失の中にボディモデルのフォワードパスを組み込む [P]

Reddit r/MachineLearning / 2026/4/23

💬 オピニオンDeveloper Stack & InfrastructureIdeas & Deep AnalysisModels & Research

要点

  • 研究者は、8つの質問票入力(身長、体重、性別、体型、体格、腹部、カップサイズ、ルーツなど)から58のAnnyボディシェイプパラメータを予測する小型MLP(2層×256ユニット、約85KB)を構築し、ノートPCで約120分で学習できるとしています。
  • 主要な手法的貢献は「ボディモデルのフォワードパスを学習損失の中に入れる」ことで、Annyの微分可能なブレンドシェイプ、メッシュ頂点、体積/質量計算を通じて勾配を逆伝播可能にします。
  • 合成の保持データによる結果では、身長と質量の誤差が非常に小さく(平均の身長MAEは約0.3cm、平均の質量MAEは約0.4〜0.5kg)、さらにバスト/ウエスト/ヒップのMAEも既存の線形回帰ベースラインより改善したと報告されています。
  • 改善の主因は、損失関数で計測に近い制約(身長と、体積から導かれる質量)を強く課すことにあり、パラメータを独立に回帰する通常の手法では小さな誤差が体積・質量に対して複合的に増幅すると主張しています。
  • 写真ベースの既存パイプライン(SAM 3D Body → MHR → Annyチューニング)と比べ、質問票入力は体型や体格といった情報を含むため、単眼の写真系が平滑化しがちな要素を補えるとして、より良い性能を示す位置づけです。

小さなMLP(2層×256ユニット、約85 KB)。8つの質問票入力から58個のAnnyボディ形状パラメータを正確に予測します:身長、体重、性別、体形、体格(ビルド)、お腹、カップサイズ、祖先。ノートPCで約120分学習。構造的には退屈です――面白いのは損失です。

結果(女性/男性、ホールドアウトの合成テストセット):

女性 男性
身長 MAE(平均/p95) 0.3 / 0.8 cm 0.3 / 0.8 cm
体重 MAE(平均/p95) 0.4 / 1.0 kg 0.5 / 1.2 kg
バスト/ウエスト/ヒップ MAE(平均) 2.7 / 4.0 / 3.3 cm 4.9 / 4.3 / 3.3 cm

参考:Bartolら(2022)のh+w線形回帰は、同じセットでBWHのMAEが約7 cmです(私たちの着想)。自前の写真パイプライン(SAM 3D BodyMHR → Anny + チューニング、ライセンス上の理由でSMPLは完全に回避)では、実在人物でBWHが5〜8 cmに収まります。質問票が写真に勝つのは、入力空間に情報(体形、体格)が含まれており、単一画像HMRがそれをなめらかに消してしまうからです。

コツ。ユーザーは正確な身長と体重を私たちに渡します――生成される身体は、平均的に近いだけではなく、それらに一致していなければなりません。質量は58個のパラメータの一つではありません。質量は体積の結果として現れ、体モデルの順伝播(forward pass)から出てきます。

そこで、順伝播を損失の中に入れます。MLPが出力 → Annyのブレンドシェイプ → 頂点 → 体積 → 予測質量と身長、そして全てにわたって逆伝播します。Annyはデフォルトで自動微分(autograd)にフレンドリーです:ブレンドシェイプは線形、体積は符号付きテトラヘドロンの和です。標準のPyTorchでOK、独自のbackward実装なし。

概略:

```python params = mlp(questionnaire) # 58 Anny形状パラメータ verts = anny.forward(params) # ブレンドシェイプ → メッシュ(線形、微分可能) vol = signed_tetrahedra_volume(verts) # 微分可能な体積 = vol * density(body_fat(params), gender) # Siriの二成分モデル height = verts[top].y - verts[bottom].y waist = iso_8559_plane_sweep(verts, "waist") # clad-bodyから

loss = mse(params, params_target) rel + λ_m * (mass - mass_target)2 rel + λ_h * (height - height_target)2 rel + λ_w * (waist - waist_target)**2 ```

Ridge(ベースライン)だと、平均の質量MAEが3.9 kg(p95 9.7、重い体の最大16 kg)に到達します。これは各58個のパラメータを独立に予測し、わずかな誤差が体積を通じて増幅されるためです。物理を意識した損失のMLPでは、平均0.3 kg、p95は1 kg未満。損失由来で約10倍、アーキテクチャではありません。

精度向上の大半は、学習の前に行われました。学習の中ではありません。損失がコツですが、数値をきっちりさせているのは、測定規約や質量計算のような“計測の基礎”として、まず人間工学(anthropometry)を正しく揃えることです。上流の作業がなければ、どんな損失関数でも私たちは救われなかったでしょう。

計測。AnnyもMHRも計測用のライブラリを同梱していません。14〜18Kの頂点を持つメッシュが手に入るだけで、ウエスト周径を抽出する標準的な方法はありません。私たちはISO 8559-1の平面スイープによる周径算出、ランドマーク検出、輪郭の分離を構築しました――clad-body(Apache 2.0)。これが損失が実際に比較する対象です。これがなければ、物理を意識した損失にも“固定点”がありません。

質量。Annyのデフォルトは、インターネット平均の人間密度に相当する単一の密度980 kg/m³を使います。これは、2つの明確な慣習の間に位置しています:全身の密度(約985 kg/m³、肺を含む、タンクに入れて沈めたときに得られるもの)と、組織のみの密度(約1030〜1080 kg/m³、脂肪と筋肉の組成が実際に決めるもの)。私たちは体脂肪率から導出した性別ごとの組織密度に切り替えました。痩せた体は最大で1 kg増え、柔らかい体は最大で2 kg減りました――それは、平均的な体型ではない誰かに対して、スケールを合わせるだけでなく系統的に外してしまっている差です。

正直な限界。約50個の連続ブレンドシェイプから導かれるウエストのMAEの理論的下限は1.3 cmで、確かに可能性があります(ただし入力の連続ブレンドシェイプ数の話に基づく)。統計モデル=入力に対する集団平均の身体であって、あなた自身ではありません。友人たちによる実在人物の検証では、かなり良い結果が得られました。

参考文献と実装:

議論したいです

submitted by /u/clad_you
[link] [comments]