文章内容参考 PaddleVideo ,其对 ST-GCN 模型进行了优化,实现了精度更高的 AGCN 模型。
比赛官方基线讲解 详见博文:官方 baseline 讲解
比赛基线讲解—飞桨高层API版本 Demo
PaddleVideo 是飞桨视频模型开发套件,旨在帮助开发者更好的进行视频领域的学术研究和产业实践。
GitHub地址:https://github.com/PaddlePaddle/PaddleVideo
PaddleVideo 各文件夹的默认存储路径如下:
PaddleVideo
├── paddlevideo
├── ... #other source codes
├── output #ouput 权重,优化器参数等存储路径
| ├── example
| | ├── example_best.pdparams #path_to_weights
| | └── ...
| └── ...
├── log #log存储路径
| ├── worker.0
| ├── worker.1
| └── ...
└── inference #预测文件存储路径
├── example.pdiparams file
├── example.pdimodel file
└── example.pdiparmas.info file
训练 Epoch (回合)默认从1开始计数,模型参数文件的保存格式为 ModelName_epoch_00001.pdparams,优化器参数文件的保存格式为 ModelName_epoch_00001.pdopt ,命名中的数字对应 Epoch 编号(第几个训练回合)。
本篇文章针对 AI Studio 的 花样滑冰比赛。
在本次比赛最新发布的数据集中,所有视频素材均从 2017-2020 年的花样滑冰锦标赛中采集得到。源视频素材中视频的帧率被统一标准化至每秒 30 帧,图像大小被统一标准化至 1080 * 720 ,以保证数据集的相对一致性。之后通过 2D 姿态估计算法 Open Pose,对视频进行逐帧骨骼点提取,最后以 .npy 格式保存数据集。
|–train.zip
|–train_data.npy
|–train_label.npy
|–test_A.zip
|–test_A_data.npy
|–test_B.zip
|–test_B_data.npy
置信度是指一个人体关键点被正确预测的程度。它用来代表特征点的识别准确程度和可信度,通常表示为0到1之间的数值。如果置信度越高,说明该关节点被正确识别的概率越大,反之则说明该关节点可能被错误识别或者无法识别。
在计算机视觉任务中,对于人体关键点检测问题,C_conf 通常表示检测算法对于该特定关键点的预测可信度。例如,如果一个人体姿态估计算法可以正确地检测出某个人的肘部关键点,则这个肘部关键点的 C_conf 值应该是比较高的。
骨架示例图:
项目见:https://aistudio.baidu.com/aistudio/projectdetail/5832220?contributionType=1
# 检查数据集所在路径
!tree -L 3 /home/aistudio/data
下载的数据集按照下图路径树所示建立文件夹并上传数据集文件:
# 进入到gitclone 的PaddleVideo目录下
%cd ~/work/
# 从Github上下载PaddleVideo代码
#!git clone https://github.com/PaddlePaddle/PaddleVideo.git
# 若网速较慢,可使用如下方法下载
#!git clone https://hub.fastgit.org/PaddlePaddle/PaddleVideo.git
# 这里已经下载好了
# 检查源代码文件结构
!tree /home/aistudio/work/ -L 2
输出如下:
# 进入到gitclone 的PaddleVideo目录下
%cd ~/work/PaddleVideo/
!python3.7 -m pip install --upgrade pip
!python3.7 -m pip install --upgrade -r requirements.txt
# 使用 GPU 版本
!python3.7 main.py -c configs/recognition/agcn/agcn_fsd.yaml
PaddleVideo 通过 yaml 配置文件的方式选择不同的算法和训练参数。等训练脚本完成后,会在 /home/aistudio/work/PaddleVideo/output/AGCN 文件夹下得到 AGCN_epoch_00001.pdparams ~ AGCN_epoch_00100.pdparams 文件和 AGCN_epoch_00001.pdopt ~ AGCN_epoch_00100.pdopt 文件。
因为共有 100 个 epoch,每一个 epoch 都会生成一个 .pdparams 和 .pdopt 文件。
!python3.7 main.py --test -c configs/recognition/agcn/agcn_fsd.yaml -w /home/aistudio/work/PaddleVideo/output/AGCN/AGCN_epoch_00100.pdparams
测试可以看哪一个 epoch 效果好用哪一个 epoch 的模型参数文件 AGCN_epoch_00×××.pdparams,此处用的是第100个 epoch。测试脚本运行完成后,可以在当前目录中得到 submission.csv 文件,将该文件提交至评测官网,即可以查看在 A 榜得分。
花样滑冰比赛数据集使用单卡训练,启动命令如下:
python3.7 main.py -c configs/recognition/agcn/agcn_fsd.yaml
python 3.7
解释器运行一个名为 main.py
的脚本,并将 agcn_fsd.yaml 配置文件作为参数传递给脚本。-c
用于指定配置文件的路径。main.py
脚本会根据该配置文件中的参数进行相应的操作,比如启动一个动作识别模型的训练或测试过程等。可通过配置文件修改相关训练配置信息,也可以通过添加 -o
参数来更新配置。
-o DATASET.batch_size=16
表示更改 batch_size
大小为16。如果训练任务终止,可以加载断点权重文件(优化器-学习率参数,断点文件)继续训练。 需要指定 -o resume_epoch
参数,该参数表示从 resume_epoch
轮开始继续训练。
-o resume_epoch=5
表示从第5轮开始继续训练。由于赛事未提供验证集数据,因此训练时不做 valid。
你可以自定义修改参数配置,以达到在不同的数据集上进行训练/测试的目的。
模型测试的启动命令如下:
python3.7 main.py --test -c configs/recognition/agcn/agcn_fsd.yaml -w output/AGCN/AGCN_epoch_00100.pdparams
--test
表示要进行模型测试,而非训练。-c configs/recognition/agcn/agcn_fsd.yaml
表示使用位于 configs/recognition/agcn/agcn_fsd.yaml 文件中的参数配置进行测试。-w output/AGCN/AGCN_epoch_00100.pdparams
表示使用位于 output/AGCN/AGCN_epoch_00100.pdparams 文件中保存的模型参数进行测试。AGCN_epoch_00100.pdparams
是一个训练好的模型参数文件,是该程序在训练时生成的,存储了训练后模型的所有参数信息。该文件名中的 “AGCN” 表示模型名称,“epoch_00100” 表示模型训练了 100 个 epoch 时的参数文件,“.pdparams” 则表示 PaddlePaddle 框架使用的模型参数文件扩展名。-c
参数指定配置文件,通过 -w
指定参数存放路径进行模型测试。评估结果保存在 submission.csv 文件中。
通过导出inference模型,PaddlePaddle支持使用预测引擎进行预测推理。
首先,对训练好的模型进行转换:
python3.7 tools/export_model.py -c configs/recognition/agcn/agcn_fsd.yaml -p data/AGCN_fsd.pdparams -o inference/AGCN
-c
参数加载配置文件;-p
参数加载模型权重,-p data/AGCN_fsd.pdparams
表示需要导出的参数位于 data/AGCN_fsd.pdparams 文件中;-o
用于指定转换后模型的存储路径,-o inference/AGCN
表示导出的模型保存在 inference/AGCN 目录中。上述命令将生成预测所需的模型结构文件 AGCN.pdmodel 和模型权重文件 AGCN.pdiparams。
python3.7 tools/predict.py --input_file data/fsd10/example_skeleton.npy \
--config configs/recognition/agcn/agcn_fsd.yaml \
--model_file inference/AGCN/AGCN.pdmodel \
--params_file inference/AGCN/AGCN.pdiparams \
--use_gpu=True \
--use_tensorrt=False
--input_file data/fsd10/example_skeleton.npy
表示要预测的输入数据文件位于data/fsd10/example_skeleton.npy,该文件存储了身体骨架动作数据。--config configs/recognition/agcn/agcn_fsd.yaml
表示使用位于 configs/recognition/agcn/agcn_fsd.yaml 文件中的参数配置进行预测。--model_file inference/AGCN/AGCN.pdmodel
表示使用位于 inference/AGCN/AGCN.pdmodel 文件中保存的 PaddlePaddle 模型进行预测。--params_file inference/AGCN/AGCN.pdiparams
表示使用位于 inference/AGCN/AGCN.pdiparams 文件中保存的 PaddlePaddle 模型参数进行预测。--use_gpu=True
表示使用 GPU 进行预测。--use_tensorrt=False
表示不使用 Tensorrt 进行加速。benchmark 预测速度结果由 tools/predict.py 进行评测。
参见博文:PaddleVideo 的配置系统
文件路径:configs/recognition/agcn/agcn_fsd.yaml。
详解参见博文:PaddleVideo 中 agcn_fsd.yaml 配置文件代码详解
文件路径:PaddleVedio/paddlevideo/modeling/framework//recognizers/recognizer_gcn.py。
详解参见博文:PaddleVideo 中 recognizer_gcn.py 源码详解
文件路径:PaddleVideo/paddlevideo/modeling/backbones/agcn.py。
详解参见博文:PaddleVideo 中 agcn.py 代码详解
文件路径:PaddleVideo/paddlevideo/modeling/heads/stgcn_head.py。
详解参见博文:PaddleVideo 中 stgcn_head.py 源代码详解