基于飞桨实现乒乓球时序动作定位大赛-baseline
发布时间:2025-07-17 编辑:游乐网
时序动作定位(提案生成)是计算机视觉和视频分析领域一个具有的挑战性的任务。本次比赛不同于以往的ActivityNet-TAL,FineAction等视频时序检测动作定位比赛,我们采用了更精细的动作数据集--乒乓球转播画面,该数据集具有动作时间跨度短,分布密集等特点,给传统模型精确定位细粒度动作带来了很大挑战。
基于飞桨实现乒乓球时序动作定位大赛-baseline
基于飞桨实现乒乓球时序动作定位大赛:baseline模型现已开放,采用PaddleVideo中的BMN模型。欢迎开发者贡献更好的作品~
赛题介绍
时序动作定位(提案生成)是计算机视觉和视频分析领域一个具有的挑战性的任务。本次比赛不同于以往的ActivityNet-TAL,FineAction等视频时序检测动作定位比赛,我们采用了更精细的动作数据集--乒乓球转播画面,该数据集具有动作时间跨度短,分布密集等特点,给传统模型精确定位细粒度动作带来了很大挑战。本次比赛的任务即针对乒乓球转播画面视频面对镜头的运动员定位其挥拍动作(时序动作提案生成)。
视频来源:2020东京奥运会乒乓球男单决赛
竞赛数据集
数据集包含了19-21赛季兵乓球国际(世界杯、世锦赛、亚锦赛,奥运会)国内(全运会,乒超联赛)比赛标准单机位高清转播画面特征信息。其中包含912条视频特征文件,每个视频时长在0~6分钟不等,特征维度为2048,以pkl格式保存。我们对特征数据中面朝镜头的运动员的回合内挥拍动作进行了标注,单个动作时常在0~2秒不等,训练数据为729条标注视频,A测数据为91条视频,B测数据为92条视频,训练数据标签以json格式给出
训练数据集与测试数据集的目录结构如下所示:| - data| - data123004| - Features_competition_test_A.tar.gz| - data122998| - Features_competition_train.tar.gz| - label_cls14_train.json登录后复制本次比赛最新发布的数据集共包含训练集、A榜测试集、B榜测试集(第二阶段公布)三个部分,其中训练集共729个样本(视频),A榜测试集共91个样本,B榜测试集共92个样本;Features目录中包含912条ppTSM抽取的视频特征,特征保存为pkl格式,文件名对应视频名称,读取pkl之后以(num_of_frames, 2048)向量形式代表单个视频特征,如下示例
{'image_feature': array([[-0.00178786, -0.00247065, 0.00754537, ..., -0.00248864, -0.00233971, 0.00536158], [-0.00212389, -0.00323782, 0.0198264 , ..., 0.00029546, -0.00265382, 0.01696528], [-0.00230571, -0.00363361, 0.01017699, ..., 0.00989012, -0.00283369, 0.01878656], ..., [-0.00126995, 0.01113492, -0.00036558, ..., 0.00343453, -0.00191288, -0.00117079], [-0.00129959, 0.01329842, 0.00051888, ..., 0.01843636, -0.00191984, -0.00067066], [-0.00134973, 0.02784026, -0.00212213, ..., 0.05027904, -0.00198008, -0.00054018]], dtype=float32)}登录后复制训练标签见如下格式:
# label_cls14_train.json{ 'fps': 25, #视频帧率 'gts': [ { 'url': 'name_of_clip.mp4', #名称 'total_frames': 6341, #总帧数(这里总帧数不代表实际视频帧数,以特征数据集维度信息为准) 'actions': [ { "label_ids": [7], #动作类型编号 "label_names": ["name_of_action"], #动作类型 "start_id": 201, #动作起始时间,单位为秒 "end_id": 111 #动作结束时间,单位为秒 }, ... ] }, ... ]}登录后复制
数据集下载
数据集可以从比赛链接处下载,报名成功后,即可获取数据集下载链接。数据集下载完成后,可以将数据集上传到aistudio项目中,上传后的数据集路径在/home/aistudio/data目录下。
如果是直接fork的本项目,在/home/aistudio/data 目录下已经包含了下载好的训练数据和测试数据。
# 检查数据集所在路径!tree -L 3 /home/aistudio/data登录后复制
创建训练和测试特征数据集存放文件夹,并解压缩相应数据到其中:
In [14]%cd /home/aistudio/data# 创建特征数据集存放目录%mkdir Features_train Features_test# 分别解压缩训练和测试特征数据到各自目录下,解压完成后删除原压缩文件,节省空间!tar -xf data122998/Features_competition_train.tar.gz -C /home/aistudio/data/Features_train --strip-components 1 && rm -rf data122998/Features_competition_train.tar.gz!tar -xf data123004/Features_competition_test_A.tar.gz -C /home/aistudio/data/Features_test --strip-components 1 && rm -rf data123004/Features_competition_test_A.tar.gz # 复制训练标签到data目录下%cp data122998/label_cls14_train.json /home/aistudio/data登录后复制
Baseline模型BMN介绍
BMN模型是百度自研,2019年ActivityNet夺冠方案,为视频动作定位问题中proposal的生成提供高效的解决方案,在PaddlePaddle上首次开源。此模型引入边界匹配(Boundary-Matching, BM)机制来评估proposal的置信度,按照proposal开始边界的位置及其长度将所有可能存在的proposal组合成一个二维的BM置信度图,图中每个点的数值代表其所对应的proposal的置信度分数。网络由三个模块组成,基础模块作为主干网络处理输入的特征序列,TEM模块预测每一个时序位置属于动作开始、动作结束的概率,PEM模块生成BM置信度图。
具体模型设计可参考原论文,BMN: Boundary-Matching Network for Temporal Action Proposal Generation, Lin et al., Baidu Inc.
基于PaddleVideo的BMN模型训练
本项目基于PaddleVideo项目完成识别网络训练:
PaddleVideo "develop" branch githubPaddlePaddle-gpu==2.1.2下载PaddleVideo代码
In [1]%cd ~/work/# 从Github上下载PaddleVideo代码#!git clone https://github.com/PaddlePaddle/PaddleVideo.git# 若网速较慢,可使用如下方法下载!git clone https://hub.fastgit.org/PaddlePaddle/PaddleVideo.git登录后复制In [11]
# 进入到PaddleVideo目录下%cd ~/work/PaddleVideo/登录后复制In [12]
# 检查源代码文件结构!tree /home/aistudio/work/ -L 2登录后复制
配置代码环境,安装依赖库
In [13]# 配置PaddleVideo环境!python3.7 -m pip install --upgrade pip!python3.7 -m pip install --upgrade -r requirements.txt# 配置BMN前处理环境# %cd ~/work/BMN/ # !python3.7 -m pip install --upgrade -r requirements.txt登录后复制
注:可忽略这里兼容性报错的报错
BMN训练数据处理
运行脚本get_instance_for_bmn.py,提取二分类的proposal,windows=8,根据gts和特征得到BMN训练所需要的数据集:
#数据格式{ "5679b8ad4eac486cbac82c4c496e278d_133.56_141.56": { #视频名称_片段起始时间_片段结束时间(s) "duration_second": 8.0, "duration_frame": 200, "feature_frame": 200, "subset": "train", "annotations": [ { "segment": [ 6.36,#动作起始时间 8.0 #动作结束时间 ], "label": "11.0", "label_name": "普通" } ] }, ...}登录后复制
运行前更改输入输出路径:
dataset = "/home/aistudio/data"feat_dir = dataset + '/Features_train'out_dir = dataset + '/Input_for_bmn'label_files = { 'train': 'label_cls14_train.json', 'validation': 'label_cls14_val.json' }登录后复制In [15]
# 数据预处理%cd /home/aistudio/work/PaddleVideo/applications/TableTennis/# 生成验证集!python3.7 val_split.py# 生成bmn训练数据和标签!python3.7 get_instance_for_bmn.py登录后复制
完成该步骤后,数据存储位置/home/aistudio/data/Input_for_bmn/
In [16]# 存放地址检查 -- BMN训练输入数据和标签!tree /home/aistudio/data/Input_for_bmn/ -L 1登录后复制
训练BMN前矫正标签和数据是否一一对应,数据中一些无对应标签的feature将不参与训练; 运行前修改输入输出路径:
###url = '/home/aistudio/data/Input_for_bmn/feature/'######with open('/home/aistudio/data/Input_for_bmn/label.json') as f: data = json.load(f)######jsonFile = open('/home/aistudio/data/Input_for_bmn/label_fixed.json', 'w')###登录后复制In [17]
# 运行标签修正脚本!python3.7 fix_bad_label.py登录后复制
BMN训练
数据准备完毕后,可以通过如下方式启动训练:
#4卡训练%cd ~/work/PaddleVideo/export CUDA_VISIBLE_DEVICES=0,1,2,3python -B -m paddle.distributed.launch --gpus="0,1,2,3" --log_dir=log_bmn main.py --validate -c /home/aistudio/work/PaddleVideo/applications/TableTennis/configs/bmn_tabletennis.yaml登录后复制
这里我们使用单卡训练:
python -B main.py --validate -c /home/aistudio/work/PaddleVideo/applications/TableTennis/configs/bmn_tabletennis.yaml登录后复制
训练前修改配置文件/home/aistudio/work/PaddleVideo/applications/TableTennis/configs/bmn_tabletennis.yaml中特征和标签的地址
###DATASET: #DATASET field batch_size: 4 #single card bacth size test_batch_size: 1 num_workers: 8 train: format: "BMNDataset" file_path: "/home/aistudio/data/Input_for_bmn/label_fixed.json" subset: "train"######PIPELINE: #PIPELINE field train: #Mandotary, indicate the pipeline to deal with the training data load_feat: name: "LoadFeat" feat_path: "/home/aistudio/data/Input_for_bmn/feature"###登录后复制In [ ]
# 回到PaddleVideo主目录下%cd ~/work/PaddleVideo/ # 运行训练脚本!python3.7 -B main.py --validate -c /home/aistudio/work/PaddleVideo/applications/TableTennis/configs/bmn_tabletennis.yaml# !python3.7 -B main.py --validate -c /home/aistudio/work/BMN/configs/bmn_tabletennis_v2.0.yaml登录后复制
训练完毕后,参数模型可以在 /home/aistudio/work/PaddleVideo/output/BMN 中找到。
BMN预测推理
完成训练后,将训练好的BMN模型转为预测模式:
注:大家可以选择效果最佳的模型进行输出,我们也提供训练好的模型供大家下载测试,下载后直接替换-p后面的模型即可
# -c 指定配置文件,-p 指定训练好的模型参数, -o 指定模型输出目录 !python3.7 tools/export_model.py -c /home/aistudio/work/PaddleVideo/applications/TableTennis/configs/bmn_tabletennis.yaml -p /home/aistudio/work/PaddleVideo/output/BMN/BMN_epoch_00001.pdparams -o inference/BMN登录后复制
在PaddleVideo/applications/TableTennis/目录下找到推理预测脚本:
In [ ]# 跳转到脚本目录下%cd /home/aistudio/work/PaddleVideo/applications/TableTennis/extractor/登录后复制
修改脚本extract_bmn_for_tabletennis.py中输入及输出路径:
###sys.path.append( "/home/aistudio/work/PaddleVideo/applications/TableTennis/predict/action_detect/")###### dataset_dir = '/home/aistudio/data/Features_test/' output_dir = '/home/aistudio/data'###登录后复制
修改推理配置文件configs/configs.yaml中导出的预测模型路径:
###BMN: name: "BMN" model_file: "/home/aistudio/work/PaddleVideo/inference/BMN/BMN.pdmodel" params_file: "/home/aistudio/work/PaddleVideo/inference/BMN/BMN.pdiparams"###登录后复制In [ ]
# 运行推理预测脚本!python3.7 extract_bmn_for_tabletennis.py登录后复制
将推理结果转换为比赛指定提交格式:
In [ ]# 跳转至脚本目录下%cd /home/aistudio/work/PaddleVideo/applications/TableTennis/datasets/script/登录后复制
修改脚本submission_format_transfer.py中输入及输出路径:
###with open('/home/aistudio/data/Output_for_bmn/prop.json') as f: data = json.load(f)######jsonFile = open('/home/aistudio/data/Output_for_bmn/submission.json', 'w')###登录后复制In [ ]
# 运行脚本!python3.7 submission_format_transfer.py登录后复制
相关阅读
MORE
+- 【第五期论文复现赛-语义分割】ENCNet 07-17 百度网盘AI大赛:手写文字擦除(赛题二)Baseline 07-17
- 如何让豆包AI生成Python机器学习模型 07-17 ftp扫描工具免安装 ftp扫描工具绿色版推荐 07-17
- DeepSeek运行时老是报错怎么办 常见报错类型及修复建议 07-17 AI Overviews如何导出项目配置 AI Overviews设置备份与迁移方法 07-17
- 用AI语言实现语音转视频输出,打造多平台内容通用格式 07-17 豆包AI编程功能教学 豆包AI自动编程说明 07-17
- mobi怎么提取文本_mobi如何提取文本 07-17 deepseek华为手机使用 deepseek怎么优化搜索体验 07-17
- 百度网盘AI大赛:文档图像阴影消除参赛方案 AB榜第二名 07-17 【飞桨打比赛】同花顺-文档图片表格结构识别算法官方baseline迁移版 07-17
- 怎么在Excel中制作对比柱状图_双柱图绘制教程 07-17 Excel怎么导入外部数据 Excel外部数据导入的教程 07-17
- mac系统内存怎么清理详细步骤 07-17 豆包AI代码生成指南 豆包AI编程应用方法 07-16
- Deepseek 满血版联合 Scribble Diffusion,实现草图快速上色 07-16 苹果用户DeepSeek轻松上手操作指南 07-16