目标:学一个 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@1 | v3 R@5 | v3 mAP |
|---|---|---|---|---|---|---|
| 20° | 0.444 | 0.654 | 0.549 | 0.938 | 1.000 | 0.969 |
| 40° | 0.094 | 0.212 | 0.160 | 0.938 | 1.000 | 0.969 |
| 60° | 0.026 | 0.076 | 0.056 | 0.938 | 1.000 | 0.969 |
| 90° | 0.003 | 0.019 | 0.015 | 0.936 | 1.000 | 0.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 把它们映到同一处。
视角不变只测了"同姿态不同视角"。这里测更难的"异姿态按相似度排序":GT = val 姿态的视角规范化 3D 距离,看 embedding 能否召回同一批 3D-近邻(Recall@K)。
| 表征 | R@5 | R@10 | R@20 |
|---|---|---|---|
| random | 0.005 | 0.011 | 0.024 |
| handcrafted | 0.300 | 0.307 | 0.332 |
| v3 (仅视角正样本) | 0.066 | 0.064 | 0.075 |
| v4 (+3D 距离匹配) | 0.116 | 0.121 | 0.145 |
v4 把 v3 的 0.066 抬到 0.116(1.75×)且视角不变保持 0.936。但仍低于手工 0.300。 ⚠ 重要:这个 3D-距离 GT 对手工自利——GT 与手工都是几何坐标距离,本质在量同一个东西,让学习 embedding 复现手工度量,手工必赢。 且 val 视角接近,学习的视角不变在此无红利。故 3D-auto-GT 不是"看上去相似"的合格裁判,真正裁判 = VLM/人判三元组(见 ⑥)。 学习 embedding 已证明的真红利是视角不变(手工 @90° 归零)。
query 姿态 → top-5 最近邻骨架。标注为 Phase/StrokeType(仅供参考,未参与训练)。v3 召回构型连贯,证明 embedding 没坍缩。


Phase(构型阶段)在 v3 空间里分得开;StrokeType(语义)混杂——符合预期,语义本就没参与训练,且单帧静态信息有限。
语义 form 检索 harness(StrokeType / Phase,跨球员):
| 表征 | StrokeType P@1 | StrokeType mAP | Phase P@1 | Phase mAP |
|---|---|---|---|---|
| 手工基线 | 0.343 | 0.192 | 0.769 | 0.474 |
| v1 (SupCon×Phase + 自监督) | 0.301 | 0.191 | 0.794 | 0.509 |
| v2 (纯自监督 β=0) | 0.266 | 0.182 | 0.678 | 0.405 |
天花板诊断(监督线性探针 balanced-acc):
| 标签 | 原始关键点 | 学习 emb | 随机先验 |
|---|---|---|---|
| StrokeType (6类) | 0.314 | 0.358 | 0.167 |
| Phase (3类) | 0.758 | 0.830 | 0.333 |
结论:单帧静态 pose 的 StrokeType 上限仅 ~0.35(信息限,非调参)——语义需时序。 故放弃 StrokeType 当训练目标,转纯自监督的姿态视觉相似,语义只留评测探针。
单帧 COCO-17 → graph-transformer → embedding,纯自监督对比,正样本 = "我认定的同一姿态":
| 正样本源 | 给的不变性 | 状态 |
|---|---|---|
| 2D 增广(镜像/尺度/抖动/骨长) | nuisance 不变 | 已用 |
| 3D 重投影多视角(MediaPipe 3D) | 视角不变 | 已用 (v3/v4) |
| 3D 姿态距离匹配(轨道间度量) | 异姿态按相似度排序 | 已用 (v4) |
| 时序相邻帧 | 异姿态相似(运动连续性) | 待办 |
v4 — 时序相邻正样本 下一步
稠密时序抽帧(CricketVision phase segment 内原生帧率 + tracking)→ 时序相邻帧当正样本,补"异姿态按相似度排序"这一环(轨道间度量)。预留指标位:
| 指标 | 手工 | v3 | v4 (待填) |
|---|---|---|---|
| 时序一致性 R@1 | — | — | ▢ |
| between-posture mAP | — | — | ▢ |
VLM 三元组 between-posture 评测 下一步(已升级为关键)
3D-auto-GT 偏袒几何基线,不能判定 learned 是否在"看上去相似"上胜过手工。Qwen 判 "query 跟 A 还是 B 更像姿态" → "看上去相似"的真 GT。预留:handcrafted / v3 / v4 三元组准确率对比。
| 三元组准确率 vs Qwen | handcrafted | v3 | v4 |
|---|---|---|---|
| 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 生成