基于 YOLOv8-Pose、CBAM 注意力机制与运动学特征分析,六分类击球动作识别 + 0~100 质量评分,单条多任务流水线一步到位。
羽毛球击球动作的自动识别与质量评估,在智能训练辅助、比赛战术分析等场景中具有明确应用价值。然而目前该领域存在三方面瓶颈:
BSDPose 在此基础上提出了一套完整的端到端方案,同时在两个子任务上验证了方法有效性。
整体流水线如下:
VideoBadminton (.mp4) │ ▼ 16帧滑动窗口采样 ┌───────────────────────────────┐ │ YOLOv8-Pose + CBAM │ ← 关键点估计(17点 COCO 格式) │ PAN FPN 的 P3/P4/P5 注入 │ mAP@0.5:0.95 = 83.46% │ Channel + Spatial Attention │ └───────────────────────────────┘ │ ▼ 每帧 17 个关键点 (x, y, conf) ┌───────────────────────────────────┐ │ 运动学特征提取 │ │ 15 维逐帧特征 → 16 帧窗口聚合 │ │ → 62 维特征向量 (mean/std/max/min) │ │ 含:关节角度 / 躯干倾角 / 手腕速度 │ │ / 质心位移 / 肢体长度比 等 │ └───────────────────────────────────┘ │ ▼ ┌───────────────────────────────────┐ │ 多任务预测头 │ │ Shared Encoder: 62 → 128 → 64 │ │ ┌────────────────┬──────────────┐ │ │ │ 分类分支 64→32→6 │ 回归分支 │ │ │ │ Softmax (6类) │ 64→32→1 │ │ │ │ │ Sigmoid×100 │ │ │ └────────────────┴──────────────┘ │ │ L = CrossEntropy + 0.5 × MSE │ └───────────────────────────────────┘ │ ▼ [击球类别 (0~5)] + [质量评分 (0~100)]
在 YOLOv8-Pose 的 PAN FPN 结构中,对 P3、P4、P5 三个尺度的输出特征图注入 CBAM(Convolutional Block Attention Module)——依次施加通道注意力与空间注意力,使网络在运动模糊场景下更聚焦于人体关键区域,关键点定位精度提升 +1.00 pp(82.46% → 83.46%)。
从 COCO-17 格式的关键点坐标中手工提取 15 个运动学指标,覆盖三个维度:
| 类别 | 特征示例 |
|---|---|
| 关节角度 | 右肘角、右肩角、右膝角、右髋角 |
| 姿态几何 | 躯干倾角、两肩连线水平角 |
| 运动学量 | 手腕合速度、质心位移、肢体长度比 |
以 16 帧为窗口,逐窗口计算均值、标准差、最大值、最小值四种聚合统计量,最终得到 62 维固定长度特征向量。相比直接使用关键点坐标(34 维),手工特征具有更强的物理可解释性和更低的纬度。
设计共享编码器 + 双分支结构:
L = L_CE + 0.5·L_MSE多任务学习不仅统一了流水线,质量回归的辅助任务还产生了正则化效果——在消融实验中,加入回归分支后分类准确率从 53.48% 提升至 57.78%(+4.30 pp)。
| 编号 | 英文 | 中文 |
|---|---|---|
| 0 | Forehand Clear | 正手高远球 |
| 1 | Backhand Clear | 反手高远球 |
| 2 | Forehand Smash | 正手杀球 |
| 3 | Backhand Smash | 反手杀球 |
| 4 | Forehand Net Lift | 正手网前挑球 |
| 5 | Backhand Net Lift | 反手网前挑球 |
| 模型 | mAP@0.5:0.95 (%) |
|---|---|
| YOLOv8-Pose (baseline) | 82.46 |
| + SE Attention | 82.19 |
| + CBAM (ours) | 83.46 |
SE 注意力未能在该任务上带来增益(82.19% vs. 82.46%),CBAM 的空间注意力分支在运动模糊场景下更具优势。
| 方法 | Accuracy (%) | Precision (%) | Recall (%) | F1 (%) |
|---|---|---|---|---|
| OpenPose + LSTM | 45.79 | 44.00 | 45.79 | 43.49 |
| YOLOv8-Pose + LSTM | 46.15 | 44.00 | 46.15 | 43.29 |
| YOLOv8-Pose + Kinematic + MLP | 56.78 | 57.80 | 56.78 | 57.11 |
| YOLOv8-Pose + CBAM + Kinematic + Multi-Task (ours) | 57.78 | 58.80 | 57.78 | 58.11 |
| Pose Model | CBAM | Kinematic | Multi-Task | Accuracy (%) | Quality MAE |
|---|---|---|---|---|---|
| YOLOv8-Pose | ✗ | ✗ | ✗ | 46.15 | — |
| YOLOv8-Pose | ✓ | ✗ | ✗ | 44.50 | — |
| YOLOv8-Pose | ✗ | ✓ | ✓ | 53.48 | 2.41 |
| YOLOv8-Pose | ✓ | ✓ | ✓ | 57.78 | 2.20 |
bash# 1. 克隆仓库
git clone https://github.com/lechan775/BSDPose.git
cd BSDPose
pip install -r requirements.txt
# 2. 准备 BSD 数据集(需先下载 VideoBadminton)
python scripts/prepare_bsd.py \
--source-root data/pose \
--output-root data/bsd \
--window-size 16 --seed 42
# 3. 训练姿态估计(三种变体)
python train/train_pose.py --variant all --epochs 200 --batch 16
# 4. 训练分类器
python train/train_classifier.py --variant cbam_kinematic_multitask
# 5. 评估
python eval/eval_pose.py
python eval/eval_classifier.py
python eval/eval_ablation.py
依赖:torch>=2.0 / ultralytics>=8.0 / opencv-python / pyyaml / numpy
BSDPose/ ├── models/ # CBAM/SE 模块 & YOLOv8-Pose 注入逻辑 ├── features/ │ └── kinematic.py # 15维逐帧特征 → 62维窗口聚合 ├── classifier/ │ ├── multi_task_head.py # 多任务头、损失函数、MLP/LSTM基线 │ └── dataset.py # 特征数据加载器 ├── train/ # 训练脚本(姿态估计 & 分类器) ├── eval/ # 评估脚本(mAP / Acc / MAE / 消融) ├── scripts/ │ └── prepare_bsd.py # VideoBadminton → BSD 数据集构建 ├── configs/config.yaml # 超参数 & 实验矩阵 └── paper/journal_draft.md # 论文手稿(Markdown)
本项目配套论文发表于《湖南理工学院学报(自然科学版)》(2026):
bibtex@article{bsdpose2026, title = {{基于YOLOv8-Pose与运动学特征分析的羽毛球击球动作识别与质量评估研究}}, author = {胡竞文 and 罗正 and 潘润杭 and 范飞豪}, journal = {湖南理工学院学报(自然科学版)}, year = {2026}, note = {Submitted} }
Written on 2026-05-25 by 探微 (Hanako AI Agent)


本文作者:williams
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!