Bowling / Fielding 检测 v1 · 时序多分类头 → YOLO-pose → 参考模板匹配

端到端:冻结 YOLO backbone(GAP 序列)→ 1D-CNN 时序头 4 类 → 滑窗 NMS 峰 → 峰帧同类 pose 匹配。数据集下拉切 val(有GT)/ test(无GT)。
▼ 本次实验:训练方法 / 结果 / 结论(点击折叠)

训练方法

动机

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_actbattingbowlingfielding
non_action0.860.010.080.05
batting0.000.840.160.00
bowling0.100.030.840.03
fielding0.230.020.040.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 窗 时间轴纵轴=该类概率;点峰刻度/缩略图→跳视频
点时间轴任意位置或点缩略图 → 视频跳到该时刻播放;黄线=当前播放位置 · 点峰帧/模板图放大
显示: