▼ 本次实验:训练方法 / 结果 / 结论(点击折叠)
训练方法
动机
v0 用单帧冻结 YOLO 特征 + 两个独立二分类头,bowling/fielding 严重混淆(单帧 fielding→bowling 误判 0.33)。诊断证实:bowling/fielding/batting 是时序动作,单帧丢掉运动信息是主因,且时序能把混淆砍半。
模型(特征仍是 YOLO,backbone 不变)
- 骨干:冻结 YOLO11n-pose,每帧取 layer-10
GAP 256-d(端侧,与 pose 共享一次前向)
- 输入:固定 1.5s / 12 帧的 GAP 序列(而非单帧)
- 头:1D-CNN 时序头
Conv1d 256→128→128 (k3) + mean/max 池化 + MLP → 4 类 softmax {non_action, batting, bowling, fielding}
- 只训头,骨干全冻结;类平衡交叉熵 + AdamW
数据(仅 CricketVision)
- 来源:
cv_bf_events GT-锚定事件窗(击球GT contact 锚定 + scene-cut + VLM 精修)
- 划分:train P1–P7(9574 clips)/ val P8–P9(1198 clips,跨球员无身份泄漏)
- clip:每个动作窗中点 ±0.75s 取 12 帧;non_action 从窗外采样
推理(端到端)
- 滑窗:8fps 取帧、1.5s 窗、步长 0.25s → 时序头 4 类概率
- bowling/fielding 概率轨 → 时间 NMS 峰(gap 1.5s, thr 0.5)
- 峰帧过 YOLO-pose → 同类匹配参考模板库(bowling 峰匹 9 个 bowling 模板、fielding 峰匹 14 个 fielding 模板)
结果(val 跨球员 P8/P9)
4 类 bal-acc 0.817
3 动作 bal-acc 0.801
v0 单帧探针 0.757
混淆矩阵(行=真值,列=预测)
| non_act | batting | bowling | fielding |
| non_action | 0.86 | 0.01 | 0.08 | 0.05 |
| batting | 0.00 | 0.84 | 0.16 | 0.00 |
| bowling | 0.10 | 0.03 | 0.84 | 0.03 |
| fielding | 0.23 | 0.02 | 0.04 | 0.71 |
对照 v0 单帧:fielding→bowling 高达 0.33。
基本结论
- ✅ 时序把 bowling↔fielding 混淆基本消除:fielding→bowling
0.33 → 0.04,bowling 干净到 0.84。用户抱怨的"无球动作分不开"主要是单帧的锅。
- ✅ 4 类 0.817 明显优于 v0 单帧,non_action 拒识 0.86,推理峰更"干净"(非动作段不再乱 fire)。
- ⚠️ 残留 1:fielding 23% 判 non_action — fielding 窗中位 5s,固定 1.5s 窗易落在"站着等球"段。
- ⚠️ 残留 2:batting 16% 判 bowling — 固定窗把击球前的投手出手也框进来(窗重叠)。
- 特征仍是 YOLO(GAP 序列),骨干不变、端侧友好;pose 模板沿用落地参考库(9+14)。
bowling prob
fielding prob
GT bowling 窗
GT fielding 窗
时间轴纵轴=该类概率;点峰刻度/缩略图→跳视频
点时间轴任意位置或点缩略图 → 视频跳到该时刻播放;黄线=当前播放位置 · 点峰帧/模板图放大
显示: