两条支路完全独立 — 分类支路只看 RGB 像素,biomech 支路只看姿态。它们在 LLM 那里第一次相遇:预测的 stroke 类别决定用哪套 REFERENCE_RANGES。即使分类错了,biomech 的数值依然是真实测量,只是参考区间会按"错误的目标 stroke"判 LOW/HIGH。
| 组件 | 具体 | 设计理由 |
|---|---|---|
| Backbone | timm efficientnet_b0 (1280-d, global avg pool) | ImageNet 预训练的轻量 CNN — 单帧空间特征复用 |
| 时序模块 | 2-layer LSTM (hidden=512, dropout=0.4) | 16 帧序列的时序模式建模 |
| 分类头 | Dropout(0.4) → Linear(512 → 12) | 取 LSTM 顶层最后一帧 hidden,接线性分类 |
| 输入张量 | (B, T=16, C=3, H=W=224) | 16 帧 random temporal crop;EfficientNet 标准 224 + ImageNet normalize |
| 训练 | AdamW 1e-4 / wd 0.01 / label-smooth 0.1 / bs 16 / 50 epoch / AMP | ReduceLROnPlateau patience=5,early stop patience=8 |
| 特征 | 计算 | 含义 |
|---|---|---|
| 关节角 | 3-point: arccos((BA·BC)/(|BA||BC|)) | 肩肘腕髋膝 5 个关节 × T 帧 |
| 段速度 | v(t) = (p(t+1) − p(t−1)) / 2Δt | 中心差分;wrist/elbow/shoulder/hip/knee |
| 球拍速度 | 用 dominant wrist 当 racket tip | 论文同样近似;真 racket 检测需独立模型 |
| 击球点 | argmax(|a(t)|) of racket | 峰值加速度 = impact frame |
| kinetic chain | peak(wrist) − peak(hip) 时延 | 动力链协调性:hip→shoulder→elbow→wrist 应有序 |
| 躯干旋转 | θ(t) = atan2(Δshoulder_y, Δshoulder_x) | 用肩线相对水平的角度近似躯干扭转 |
| 三段相位 | 0-33% prep · 33-67% exec · 67-100% follow-thru | 等分时间窗;论文同设定 |
| 动能 | KE = ½ v² · unit mass | 无质量信息,只能做相对功率比较 |
核心是把 biomech 数字 事先转化为人类可读的偏差描述,再喂给 LLM。LLM 只负责"把这些 fact 串成教练话术",不参与数值推理。
racket_velocity: LOW — 2.23 vs optimal 1.50–3.50 (≈25% below range) 的句子。Overall Score: X/10 → 2-3 句诊断 → 3 条编号 correction → 严格禁止编数字。(frames, joints, 3) 张量,任何复现都必须自补 pose estimator。| 编号 | 方向 | 解决的局限 | 成本 | 预期收益 | 风险 |
|---|---|---|---|---|---|
| T1 | Stratified split 重训(对照论文 79%) | 验证 44.7% vs 79% 差距是 split 而非实现 | 低 1 训练 |
val ≈ 75–80%,定性回答"我们 vs 论文" | 低 — 已知会过拟合 train subject |
| T2 | REFERENCE_RANGES 文献校准 | 诊断"方向对、数值不可信" | 低 2 人天文献调研 |
LLM 反馈数值可信度跃升 | 低 — 文献量充足但需 stroke-specific |
| T3 | 替换 MediaPipe → 真 3D pose(SMPLer-X / 4D-Humans) | 2.5D 关节角不准,trunk arctan2 易在侧视下失真 | 中 1-2 周集成 |
biomech 数值更接近真实 m/s · rad/s | 中 — SMPLer-X 部署 + 速度 |
| T4 | 本 viewer 集成 demo 录制(自传视频) | 当前只能看预制 demo,无法自带 clip 试 | 低 3-5 天前端 + 后端 |
用户可上传训练视频即时拿反馈 | 低 |
| T5 | 加 racket + ball detection(YOLOv8 自训) | 击球点 ±2 帧误差;无真 ball trajectory | 中 2-3 周 |
真 impact frame + ball speed/spin | 中 — racket 反光 / ball 模糊检测难 |
| T6 | 分类 backbone 升级(InternVideo-2 / VideoMAE) | 同 family 内 RGB 混淆严重 | 中 1 周 finetune |
val acc 预期 +10–15 pts | 中 — pretrained ckpt 大 / 推理慢 |
| T7 | 多视角融合(俯视 + 侧视双相机) | 单视角 trunk 旋转难辨 | 高 采集硬件 + 标定 |
biomech 全面 3D 化 | 高 — 数据采集成本 |
| T8 | 跨 stroke 上下文(让 LLM 看历史 N stroke 给训练计划) | 当前反馈孤立,无 progression | 低 2-3 天 prompt + cache |
反馈从"诊断单击"升级为"训练日记" | 低 |
| T9 | 真实物理量化(相机标定 + 人高估计) | 当前 "m/s" 实为归一化单位 | 中 1 周 |
反馈中数字与商业仪表(Trackman / SwingVision)可对比 | 中 — 人高估计误差累积到速度 |
| T10 | stroke 检测 + 切分(rally 视频 → 孤立 stroke clip) | Talking Tennis 假设输入已经切好,现实视频不是 | 中 1-2 周 |
端到端 demo 能直接吃训练视频 | 中 — 边界标注模糊 |
| T11 | 自采业余训练视频 + finetune | THETIS 全是 Kinect 摆拍,与真实训练场景域差 | 高 多月采集 |
真实落地泛化 | 高 — 数据采集 + 标注成本 |
建议优先级:T1 → T2 → T4 → T3 → T8 → 其余。前 4 项 ROI 最高,2-3 周内能把"研究复现"升级为"可演示原型"。