poseclip — 单帧姿态相似 embedding

目标:学一个 pose embedding,让看上去相似的姿态互相召回(action-agnostic,不要语义)。 数据 = CricketVision(206 视频 / 9 球员),跨球员评测:gallery=P1–P7,query=P8/P9。

更新于 2026-06-15 · 训练 GPU 4–7 · v3 视角不变已达成轨道间相似 / 时序 待办

① 头条结果:视角不变检索

从每个 val 3D 姿态绕垂直轴旋转出两个视角(MediaPipe 单图 3D 重投影),看 embedding 能否把"同姿态不同视角"判为最近邻。v3 用 3D 重投影正样本训练

视角差 Δ 手工基线 R@1手工 R@5手工 mAP v3 R@1v3 R@5v3 mAP
20°0.4440.6540.549 0.9381.0000.969
40°0.0940.2120.160 0.9381.0000.969
60°0.0260.0760.056 0.9381.0000.969
90°0.0030.0190.015 0.9361.0000.968

手工欧氏随视角崩塌(0.44→0.003);v3 跨所有角度持平在 R@1≈0.94 / R@5=1.0。 val=P8/P9 训练从未见过 → 真泛化;R@1 0.94(非随机 0.001)→ 视角不变但未坍缩

可视化:同一姿态绕垂直轴旋转的骨架(2D 画面差异很大)——v3 把它们映到同一处。

view panel 0 view panel 1 view panel 2

①·b 轨道间相似(between-posture, vs 3D 姿态 GT)

视角不变只测了"同姿态不同视角"。这里测更难的"异姿态按相似度排序":GT = val 姿态的视角规范化 3D 距离,看 embedding 能否召回同一批 3D-近邻(Recall@K)。

表征R@5R@10R@20
random0.0050.0110.024
handcrafted0.3000.3070.332
v3 (仅视角正样本)0.0660.0640.075
v4 (+3D 距离匹配)0.1160.1210.145

v4 把 v3 的 0.066 抬到 0.116(1.75×)且视角不变保持 0.936。但仍低于手工 0.300。 ⚠ 重要:这个 3D-距离 GT 对手工自利——GT 与手工都是几何坐标距离,本质在量同一个东西,让学习 embedding 复现手工度量,手工必赢。 且 val 视角接近,学习的视角不变在此无红利。故 3D-auto-GT 不是"看上去相似"的合格裁判,真正裁判 = VLM/人判三元组(见 ⑥)。 学习 embedding 已证明的真红利是视角不变(手工 @90° 归零)。

② 检索示例(v3 vs 手工,同视角下)

query 姿态 → top-5 最近邻骨架。标注为 Phase/StrokeType(仅供参考,未参与训练)。v3 召回构型连贯,证明 embedding 没坍缩。

retrieval 0 retrieval 1 retrieval 2 retrieval 3

③ Embedding 结构(v3 val, t-SNE)

tsne phase
tsne stroke

Phase(构型阶段)在 v3 空间里分得开;StrokeType(语义)混杂——符合预期,语义本就没参与训练,且单帧静态信息有限。

④ 背景:为什么放弃语义监督

语义 form 检索 harness(StrokeType / Phase,跨球员):

表征StrokeType P@1StrokeType mAPPhase P@1Phase mAP
手工基线0.3430.1920.7690.474
v1 (SupCon×Phase + 自监督)0.3010.1910.7940.509
v2 (纯自监督 β=0)0.2660.1820.6780.405

天花板诊断(监督线性探针 balanced-acc):

标签原始关键点学习 emb随机先验
StrokeType (6类)0.3140.3580.167
Phase (3类)0.7580.8300.333

结论:单帧静态 pose 的 StrokeType 上限仅 ~0.35(信息限,非调参)——语义需时序。 故放弃 StrokeType 当训练目标,转纯自监督的姿态视觉相似,语义只留评测探针。

⑤ 方法概览

单帧 COCO-17 → graph-transformer → embedding,纯自监督对比,正样本 = "我认定的同一姿态":

正样本源给的不变性状态
2D 增广(镜像/尺度/抖动/骨长)nuisance 不变已用
3D 重投影多视角(MediaPipe 3D)视角不变已用 (v3/v4)
3D 姿态距离匹配(轨道间度量)异姿态按相似度排序已用 (v4)
时序相邻帧异姿态相似(运动连续性)待办

⑥ 后续迭代(placeholder)

v4 — 时序相邻正样本 下一步

稠密时序抽帧(CricketVision phase segment 内原生帧率 + tracking)→ 时序相邻帧当正样本,补"异姿态按相似度排序"这一环(轨道间度量)。预留指标位:

指标手工v3v4 (待填)
时序一致性 R@1
between-posture mAP

VLM 三元组 between-posture 评测 下一步(已升级为关键)

3D-auto-GT 偏袒几何基线,不能判定 learned 是否在"看上去相似"上胜过手工。Qwen 判 "query 跟 A 还是 B 更像姿态" → "看上去相似"的真 GT。预留:handcrafted / v3 / v4 三元组准确率对比。

三元组准确率 vs Qwenhandcraftedv3v4
same-view
cross-view

其它待探索

· 域差排查:v3 训练于 MP 重投影 2D,真实 YOLO 2D 上的表现
· 俯仰角/滚转增广(目前只绕垂直轴)
· 更大 pose 池(web_data / yt_data 无序图)做自监督预训练
· 下游:把 embedding 接入高光检索,对比 CLIP-only

poseclip · CricketVision 数据 · 脚本:cv_build_labeled_poses_v1 / cv_mp3d_v1 / pose_encoder_v3_view / pose_view_eval_v1 / build_poseclip_viewer · 资产由 build_poseclip_viewer.py 生成