基于 PaddleVideo 的骨骼行为识别模型 AGCN(一)

文章内容参考 PaddleVideo ,其对 ST-GCN 模型进行了优化,实现了精度更高的 AGCN 模型。

比赛官方基线讲解 详见博文:官方 baseline 讲解
比赛基线讲解—飞桨高层API版本 Demo

PaddleVideo

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
  • 本次比赛最新发布的数据集共包含30个类别训练集共2922个样本A 榜测试集共628个样本,B 榜测试集共634个样本;
  • train_label.npy 文件通过 np.load() 读取后,会得到一个一维张量,张量中每一个元素为一个值在0-29之间的整形变量,代表动作的标签
  • data.npy 文件通过 np.load() 读取后,会得到一个形状为 N×C×T×V×M 的五维张量,每个维度的具体含义如下:
    基于 PaddleVideo 的骨骼行为识别模型 AGCN(一)_第1张图片
    其中,C 可表示为(C_x + C_y + C_conf),分别表示每个关节点的横坐标、纵坐标和置信度,置信度是指该关节点被正确预测的程度

置信度是指一个人体关键点被正确预测的程度。它用来代表特征点的识别准确程度和可信度,通常表示为0到1之间的数值。如果置信度越高,说明该关节点被正确识别的概率越大,反之则说明该关节点可能被错误识别或者无法识别。

在计算机视觉任务中,对于人体关键点检测问题,C_conf 通常表示检测算法对于该特定关键点的预测可信度。例如,如果一个人体姿态估计算法可以正确地检测出某个人的肘部关键点,则这个肘部关键点的 C_conf 值应该是比较高的。

骨架示例图:

基于 PaddleVideo 的骨骼行为识别模型 AGCN(一)_第2张图片

paddlepaddle 完整过程

项目见:https://aistudio.baidu.com/aistudio/projectdetail/5832220?contributionType=1

  1. 数据集下载
# 检查数据集所在路径
!tree -L 3 /home/aistudio/data 

下载的数据集按照下图路径树所示建立文件夹并上传数据集文件:

基于 PaddleVideo 的骨骼行为识别模型 AGCN(一)_第3张图片

  1. 下载PaddleVideo代码
# 进入到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

输出如下:

基于 PaddleVideo 的骨骼行为识别模型 AGCN(一)_第4张图片

# 进入到gitclone 的PaddleVideo目录下
%cd ~/work/PaddleVideo/
  1. 配置代码环境,安装相应的依赖包
!python3.7 -m pip install --upgrade pip
!python3.7 -m pip install --upgrade -r requirements.txt
  1. 训练脚本
# 使用 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 文件。

  • ".pdparams"文件是训练好的模型参数文件,是该程序在训练时生成的,存储了训练后模型的所有参数信息
  • “.pdopt” 文件用于保存模型训练过程中的优化器参数

因为共有 100 个 epoch,每一个 epoch 都会生成一个 .pdparams 和 .pdopt 文件

  1. 测试脚本
!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 榜得分。

AGCN 模型分步讲解

模型训练

启动模型训练

花样滑冰比赛数据集使用单卡训练,启动命令如下:
python3.7 main.py -c configs/recognition/agcn/agcn_fsd.yaml

  • 这是一个命令行指令,用于运行名为 agcn_fsd.yaml 的配置文件中定义的 AGCN 模型。具体来说是使用 python 3.7 解释器运行一个名为 main.py 的脚本,并将 agcn_fsd.yaml 配置文件作为参数传递给脚本。
  • -c 用于指定配置文件的路径。
  • main.py 脚本会根据该配置文件中的参数进行相应的操作,比如启动一个动作识别模型的训练或测试过程等。

配置文件的修改

可通过配置文件修改相关训练配置信息,也可以通过添加 -o 参数来更新配置

  • -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支持使用预测引擎进行预测推理。

先导出inference模型

首先,对训练好的模型进行转换:
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:参数配置文件,--config configs/recognition/agcn/agcn_fsd.yaml 表示使用位于 configs/recognition/agcn/agcn_fsd.yaml 文件中的参数配置进行预测。
  • model_file:模型结构文件路径,--model_file inference/AGCN/AGCN.pdmodel 表示使用位于 inference/AGCN/AGCN.pdmodel 文件中保存的 PaddlePaddle 模型进行预测。
  • params_file:模型权重文件路径,--params_file inference/AGCN/AGCN.pdiparams 表示使用位于 inference/AGCN/AGCN.pdiparams 文件中保存的 PaddlePaddle 模型参数进行预测。
  • --use_gpu=True 表示使用 GPU 进行预测。
  • --use_tensorrt=False 表示不使用 Tensorrt 进行加速。

benchmark 预测速度结果由 tools/predict.py 进行评测。

参数配置

参见博文:PaddleVideo 的配置系统

配置文件详解

agcn_fsd.yaml

文件路径:configs/recognition/agcn/agcn_fsd.yaml。

详解参见博文:PaddleVideo 中 agcn_fsd.yaml 配置文件代码详解

recognizer_gcn.py

文件路径:PaddleVedio/paddlevideo/modeling/framework//recognizers/recognizer_gcn.py。

详解参见博文:PaddleVideo 中 recognizer_gcn.py 源码详解

agcn.py

文件路径:PaddleVideo/paddlevideo/modeling/backbones/agcn.py。

详解参见博文:PaddleVideo 中 agcn.py 代码详解

stgcn_head.py

文件路径:PaddleVideo/paddlevideo/modeling/heads/stgcn_head.py。

详解参见博文:PaddleVideo 中 stgcn_head.py 源代码详解

你可能感兴趣的:(#,花样滑冰骨骼点识别,python,深度学习,人工智能)