2021 CCF BDCI基于飞桨实现花样滑冰选手骨骼点动作识别-第11名方案

赛题介绍

人体运动分析是近几年许多领域研究的热点问题。在学科的交叉研究上,人体运动分析涉及到计算机科学、运动人体科学、环境行为学和材料科学等。随着研究的深入以及计算机视觉、5G通信的飞速发展,人体运动分析技术已应用于自动驾驶、影视创作、安防异常事件监测和体育竞技分析、康复等实际场景人体运动分析已成为人工智能领域研究的前沿课题。目前的研究数据普遍缺少细粒度语义信息,导致现存的分割或识别任务缺少时空细粒度动作语义模型。此类研究在竞技体育、运动康复、日常健身等方面有非常重大的意义。相比于图片的细粒度研究,时空细粒度语义的人体动作具有动作的类内方差大、类间方差小这一特点,这将导致由细粒度语义产生的一系列问题,利用粗粒度语义的识别模型进行学习难得获得理想的结果。

基于实际需求以及图深度学习模型的发展,本比赛旨在构建基于骨骼点的细粒度人体动作识别方法。通过本赛题建立精度高、细粒度意义明确的动作识别模型,希望大家探索时空细粒度模型的新方法。

竞赛数据集

本赛题数据集旨在通过花样滑冰研究人体的运动。在花样滑冰运动中,人体姿态和运动轨迹相较于其他运动呈现复杂性强、类别多的特点,有助于细粒度图深度学习新模型、新任务的研究。

在数据集中,所有的视频素材从2017 到2018 年的花样滑冰锦标赛中采集。源视频素材中视频的帧率被统一标准化至每秒30 帧,并且图像大小是1080 * 720 来保证数据集的相对一致性。之后我们通过2D姿态估计算法Open Pose对视频进行逐帧骨骼点提取,最后以.npy格式保存数据集。

训练数据集与测试数据集的目录结构如下所示:

train_data.npy
train_label.npy
test_A_data.npy
test_B_data.npy  # B榜测试集后续公开

其中train_label.npy通过np.load()读取后会得到一个一维张量,每一个元素为一个值在0-29之间的整形变量代表动作的标签;data.npy文件通过np.load()读取后,会得到一个形状为N×C×T×V×M的五维张量,每个维度的具体含义如下:

维度符号表示维度值大小维度含义补充说明
N样本数代表N个样本
C3分别代表每个关节点的x,y坐标和置信度每个x,y均被放缩至-1到1之间
T1500代表动作的持续时间长度,共有1500帧有的动作的实际长度可能不足1500,例如可能只有500的有效帧数,我们在其后重复补充0直到1500帧,来保证T维度的统一性
V25代表25个关节点具体关节点的含义可看下方的骨架示例图
M1代表1个运动员个数

骨架示例图:

数据集下载

数据集可以从比赛链接处下载,报名成功后,即可获取数据集下载链接。数据集下载完成后,可以将数据集上传到aistudio项目中,上传后的数据集路径在/home/aistudio/data目录下。

如果是直接fork的本项目,在/home/aistudio/data 目录下已经包含了下载好的训练数据和测试数据。

一、方案思路:

1.1 超参数调优:

    通过控制变量的手段,调整MIX UP、WINDOWS SIZE、preciseBN的参数、loss的选择和参数设置:

      

    最终确定为以下参数:

       

1.2 REFINEDMODEL:

    通过大量实验之后,我对AGCN、STGCN模型做出了一些修改:在AGCN与STGCN上均在GCN之后加上了一个模块,实验结果也证明这个模块对预测准确度的提高是有益的。单个REFINEDAGCN模型在A榜测试上达到66.08的准确率。

1.2.1 REFINEDAGCN:

    修改的模块如下图所示

              

    将上图所示的模块加入到每个由GCN-TCN组成的Block中,最终构成REFINEDAGCN模型。

1.2.2 REFINEDSTGCN:

    STGCN模型的修改方式与AGCN模型的修改方式保持一致,由此构成了REFINEDSTGCN模型。

1.2.3 CTRGCN:

    通过参考CTRGCN原文与源码及别人复现的CTRGCN模型完成CTRGCN-paddle模型复现。

              

              

        CTRGCN原文
        CTRGCN源码
        CTRGCN模型

1.3 数据处理:

    分别把训练数据集测试数据集转换成bone、joint_motion、bone_motion的形式,并保存为.npy格式,用于模型训练和预测。

1.4 测试推理:

    集成学习,多个模型共同预测结果。如下图所示:

   为方便结果复现,我已经将训练好的模型上传至AI Studio,可以跳过模型训练直接进行模型测试。

              

TODO:

方案复现中发现的问题:

    在方案复现的过程中,发现训练CTRGCN时把骨骼点间的关系搞错了,没有使用该数据集格式正确的骨骼点间的关系,可能影响了最终的预测结果。

    希望有机会再尝试吧。

二、模型训练:

Note:

    ①模型代码我已经加进了PaddleVideo中,并压缩上传AI Studio。

    ②为方便复现结果,训练好的模型我也已经上传至AI Studio。

Step 1、解压代码和模型文件:

%cd /home/aistudio/work/
!unzip -oq /home/aistudio/data/data118095/PaddleVideo.zip
%cd /home/aistudio/work/PaddleVideo
!unzip -oq /home/aistudio/data/data118094/model.zip

Step 2、数据预处理:

%cd /home/aistudio/work/PaddleVideo/data/
!python3 Gen_data.py

Step 3、分别训练模型:

%cd /home/aistudio/work/PaddleVideo/
!python3.7 -m pip install --upgrade pip
!python3.7 -m pip install --upgrade -r requirements.txt

REFINEDAGCN模型训练:

%cd /home/aistudio/work/PaddleVideo/
!python3.7 main.py -c configs/recognition/agcn/refined_agcn_joint.yaml

!python3.7 main.py -c configs/recognition/agcn/refined_agcn_bone.yaml

!python3.7 main.py -c configs/recognition/agcn/refined_agcn_bone_motion.yaml

!python3.7 main.py -c configs/recognition/agcn/refined_agcn_joint_motion.yaml

REFINEDSTGCN模型训练:

%cd /home/aistudio/work/PaddleVideo/
!python3.7 main.py -c configs/recognition/stgcn/refined_stgcn_bone_motion.yaml

!python3.7 main.py -c configs/recognition/stgcn/refined_stgcn_joint.yaml

!python3.7 main.py -c configs/recognition/stgcn/refined_stgcn_bone.yaml

!python3.7 main.py -c configs/recognition/stgcn/refined_stgcn_joint_motion.yaml

CTRGCN模型训练:

%cd /home/aistudio/work/PaddleVideo/

!python3.7 main.py -c configs/recognition/ctrgcn.yaml

三、模型测试:

1、直接使用我训练好的模型进行测试:

%cd /home/aistudio/work/PaddleVideo/
!python3.7 main.py --test -c configs/recognition/ctrgcn.yaml -w model/CTRGCN_epoch_00061.pdparams

!python3.7 main.py --test -c configs/recognition/agcn/refined_agcn_joint.yaml -w model/AGCN_100_╩╡╤щ23_SASA_jointdata.pdparams

!python3.7 main.py --test -c configs/recognition/agcn/refined_agcn_bone.yaml -w model/AGCN_100_╩╡╤щ23_SATA_bonedata.pdparams

!python3.7 main.py --test -c configs/recognition/agcn/refined_agcn_joint_motion.yaml -w model/AGCNJOINTMOTION_epoch_00100.pdparams

!python3.7 main.py --test -c configs/recognition/agcn/refined_agcn_bone_motion.yaml -w model/AGCNBONEMOTION_epoch_00100.pdparams

!python3.7 main.py --test -c configs/recognition/stgcn/refined_stgcn_bone.yaml -w model/STGCNBONE_epoch_00100.pdparams

!python3.7 main.py --test -c configs/recognition/stgcn/refined_stgcn_bone_motion.yaml -w model/STGCNBONEMOTION_epoch_00100.pdparams

!python3.7 main.py --test -c configs/recognition/stgcn/refined_stgcn_joint.yaml -w model/STGCNJOINT_epoch_00100.pdparams

!python3.7 main.py --test -c configs/recognition/stgcn/refined_stgcn_joint_motion.yaml -w model/STGCNJOINTMOTION_epoch_00100.pdparams
%cd /home/aistudio/work/PaddleVideo/submission_pro/
!python Merger.py
#最后生成的文件submissionB_Fianl.csv用于提交

2、使用新训练好的模型进行测试:

%cd /home/aistudio/work/PaddleVideo/
!python3.7 main.py --test -c configs/recognition/ctrgcn.yaml -w model/CTRGCN_epoch_00061.pdparams

!python3.7 main.py --test -c configs/recognition/agcn/refined_agcn_joint.yaml -w output/AGCNJOINT/AGCNJOINT_epoch_00100.pdparams

!python3.7 main.py --test -c configs/recognition/agcn/refined_agcn_bone.yaml -w output/AGCNBONE/AGCNBONE_epoch_00100.pdparams

!python3.7 main.py --test -c configs/recognition/agcn/refined_agcn_joint_motion.yaml -w output/AGCNJOINTMOTION/AGCNJOINTMOTION_epoch_00100.pdparams

!python3.7 main.py --test -c configs/recognition/agcn/refined_agcn_bone_motion.yaml -w output/AGCNBONEMOTION/AGCNBONEMOTION_epoch_00100.pdparams

!python3.7 main.py --test -c configs/recognition/stgcn/refined_stgcn_bone.yaml -w output/STGCNBONE/STGCNBONE_epoch_00100.pdparams

!python3.7 main.py --test -c configs/recognition/stgcn/refined_stgcn_bone_motion.yaml -w output/STGCNBONEMOTION/STGCNBONEMOTION_epoch_00100.pdparams

!python3.7 main.py --test -c configs/recognition/stgcn/refined_stgcn_joint.yaml -w output/STGCNJOINT/STGCNJOINT_epoch_00100.pdparams

!python3.7 main.py --test -c configs/recognition/stgcn/refined_stgcn_joint_motion.yaml -w output/STGCNJOINTMOTION/STGCNBONE_epoch_00100.pdparams
%cd /home/aistudio/work/PaddleVideo/submission_pro/
!python Merger.py
#最后生成的文件submissionB_Fianl.csv用于提交
Logo

学大模型,用大模型上飞桨星河社区!每天8点V100G算力免费领!免费领取ERNIE 4.0 100w Token >>>

更多推荐