文件路径:configs/recognition/agcn/agcn_fsd.yaml。
agcn_fsd.yaml 配置文件原码如下:
MODEL: #MODEL field
framework: "RecognizerGCN" #必填选项,指定网络类型, associate to the 'paddlevideo/modeling/framework/' .
backbone: #必填选项,指定骨干网络类型 见'paddlevideo/modeling/backbones/' .
name: "AGCN" #必填选项,骨干网络名称
head:
name: "STGCNHead" #必填选项,用于指定输出层类型 见'paddlevideo/modeling/heads'
num_classes: 30 #选填,分类数(根据问题填写)
ls_eps: 0.1 #表示当训练时出现 loss=0 的情况时,加上 ls_eps,防止梯度消失
DATASET: #DATASET field
batch_size: 64 #必填,每批数据大小
num_workers: 4 #必填,每个 GPU 上用于读取数据的子进程数目
test_batch_size: 1 #表示测试数据集的批次大小和读取数据的子进程数目
test_num_workers: 0
train: #表示训练数据集的配置信息
format: "SkeletonDataset" #必填, 表示当前训练数据集所使用的数据格式类型 'paddlevidel/loader/dateset'
file_path: "train_data.npy" #必填, 训练数据存储路径,其中 ".npy" 表示 NumPy 序列化后的数据格式
label_path: "train_label.npy" #表示训练标签存储路径
test: #表示测试数据集的配置信息
format: "SkeletonDataset" #必填,表示当前测试数据集所使用的数据格式类型'paddlevidel/loader/dateset'
file_path: "test_A_data.npy" #必填,测试数据存储路径,其中 ".npy" 表示 NumPy 序列化后的数据格式
test_mode: True #表示当前处于测试模式,这个选项主要是为了方便模型在测试数据集上进行测试时使用
PIPELINE: #PIPELINE field ,数据处理流程的配置信息
train: #必填,训练数据集处理流程的配置信息 'paddlevideo/loader/pipelines/'
sample:
name: "AutoPadding" # 指定采样方法的名称和参数,这里使用的是自动填充(AutoPadding)的采样方法
window_size: 350 #其窗口大小为 350
transform: #必填,指定数据转换操作的名称和参数,这里使用的是骨骼归一化(SkeletonNorm)的操作
- SkeletonNorm:
test: #必填,表示测试数据集处理流程的配置信息 'paddlevideo/loader/pipelines/'
sample:
name: "AutoPadding" #采样方法的名称和参数,同样自动填充(AutoPadding)
window_size: 350
transform: #必填,指定数据转换操作的名称和参数 骨骼归一化
- SkeletonNorm:
OPTIMIZER: #OPTIMIZER field
name: 'Momentum' #优化器的类型,这里选择的是 Momentum 优化器
momentum: 0.9 #momentum 参数的值,表示更新时动量的比例
learning_rate: #学习率相关参数的配置信息,具体包括:
iter_step: True #是否按迭代次数衰减学习率
name: 'CustomWarmupCosineDecay' #学习率衰减算法的名称
max_epoch: 100 #最大训练轮数,也就是最大的训练 epoch 数目,这里设置为 100
warmup_epochs: 10 #在前几个 epoch 中逐渐增加学习率的训练轮数
warmup_start_lr: 0.005 #warmup 阶段起始的学习率大小
cosine_base_lr: 0.05 #学习率的基础大小
#表示经过 warmup 阶段后学习率会逐渐从 0.005 增加到 0.05,然后在余下的 epoch 中按照 Cosine 函数进行衰减。
weight_decay: #权重衰减相关参数的配置信息,具体包括:
name: 'L2' #指定使用的权重衰减算法,这里使用 L2 范数作为衰减算法
value: 1e-4 #权重衰减系数,也就是模型各参数在更新时需要减去的量
MIX: #数据增强(MIX)的配置信息
name: "Mixup" #指定使用的数据增强方法名称,这里使用的是 Mixup 方法
alpha: 0.2 #Mixup 中的参数 α,表示两张图片的混合度。该参数应取值在 0 到 1 之间
METRIC: #评估指标(METRIC)的配置信息
name: 'SkeletonMetric' #指定使用的评估指标名称,这里使用骨骼关键点检测任务中常用的指标
out_file: 'submission.csv' #指定输出文件的名称和路径,存储评估结果,可提交到评测平台
INFERENCE: #推理(INFERENCE)的配置信息
name: 'STGCN_Inference_helper' #指定使用的推理辅助函数名称,用于将训练好的模型应用于新的数据样本,生成对应的预测结果
num_channels: 2 #输入特征图的通道数
window_size: 350 #输入特征图的滑动窗口大小,即每次取多少帧连续的数据作为一个单位输入到模型中
vertex_nums: 25 #输入图形中顶点的数量,也就是骨骼关键点的数量
person_nums: 1 #输入图形中的人数,多人姿态估计任务可能要修改该值
model_name: "AGCN" #指定使用的模型名称,这里使用的是 AGCN
#模型名称通常是预先定义好的,可以直接调用相应的神经网络结构
log_interval: 10 #可选项,指定日志记录的时间间隔,默认值为 10
#日志记录用于记录模型在训练过程中的参数变化和评估指标的变化情况,方便后续的分析和比较
epochs: 100 #必选项,指定总共要训练的 epoch 数量,即将所有数据都用于训练的次数
#深度学习数据规模庞大,需要对数据多次迭代训练,以使模型能够充分学习到数据的特征和规律
PaddleVideo 通过 yaml 配置文件的方式选择不同的算法和训练参数等,修改后的 configs/recognition/agcn/agcn_fsd.yaml 配置文件(用于完成 AI Studio 平台花滑比赛的 AGCN 模型算法训练)如下所示。
# 检查源代码文件结构
!tree /home/aistudio/work/ -L 2
/home/aistudio/work/
└── PaddleVideo
├── configs
├── data
├── docs
├── __init__.py
├── LICENSE
├── main.py
├── MANIFEST.in
├── output
├── paddlevideo
├── README_cn.md
├── README.md
├── requirements.txt
├── run.sh
├── setup.py
├── submission2.csv
└── tools
MODEL:
framework: "RecognizerGCN"
backbone:
name: "AGCN"
head:
name: "STGCNHead"
num_classes: 30
ls_eps: 0.1
RecognizerGCN 是一个视频分类模型,是 PaddleVideo 工具库中提供的一个基于图卷积网络(GCN)的分类器框架,可以通过定义不同的 backbone 和 head 进行不同的特征提取和分类。其中,backbone 主要用于特征提取,head 用于最终的分类结果处理。
DATASET:
batch_size: 16
num_workers: 0
test_batch_size: 1
test_num_workers: 0
train:
format: "SkeletonDataset"
file_path: "/home/aistudio/data/data104925/train_data.npy" #训练数据集路径
label_path: "/home/aistudio/data/data104925/train_label.npy" #训练数据集路径
test:
format: "SkeletonDataset"
file_path: "/home/aistudio/data/data104924/test_A_data.npy" #测试数据集路径
test_mode: True
这三个路径需要用户在配置文件 onfigs/recognition/agcn/agcn_fsd.yaml 中手动配置好。本项目中路径示例如上所示。
PIPELINE:
train:
sample:
name: "AutoPadding"
window_size: 1000 #baseline是350,这里修改为1000
transform:
- SkeletonNorm:
test:
sample:
name: "AutoPadding"
window_size: 1000 #baseline是350,这里修改为1000
transform:
- SkeletonNorm:
在 train 和 test 两个部分中,都包含了 sample 和 transform 两个步骤,用于对数据进行采样和预处理等操作。window_size 用于指定自动填充补零的窗口大小(单位为帧数),由于不同视频序列的长度可能不同,因此在训练过程中需要将视频序列填充到相同的长度,以便于模型处理。而 window_size 则用于指定填充后的固定长度,同时也影响了模型的输入维度。
因此,在实际应用中,应该结合具体数据集和模型情况,对 window_size 进行调整和优化。
OPTIMIZER: name: 'Momentum'
momentum: 0.9
learning_rate:
iter_step: True
name: 'CustomWarmupCosineDecay'
max_epoch: 100
warmup_epochs: 10
warmup_start_lr: 0.005 #0.005
cosine_base_lr: 0.05 #0.05
weight_decay:
name: 'L2'
value: 1e-4
定义了一个名为 Momentum 的优化器,并且还指定了一种学习率衰减方案 CustomWarmupCosineDecay 和 L2 正则化的权重衰减系数。learning_rate 参数用于指定模型在训练过程中的学习率。
MIX:
name: "Mixup"
alpha: 0.2
Mixup 是一种数据增强技术,可以在训练过程中将两张随机选择的图片按照一定比例进行混合,生成新的训练样本。alpha 是 Mixup 方法中的一个超参数,用于控制两张图片混合的权重。
METRIC:
name: 'SkeletonMetric'
out_file: 'submission2.csv'#这里可以调节输出文件,这样就可以不用覆盖之前预测效果好的文件
INFERENCE:
name: 'STGCN_Inference_helper'
num_channels: 2
window_size: 1000 #baseline是350,这里修改为1000
vertex_nums: 25
person_nums: 1
INFERENCE 部分采用了 STGCN_Inference_helper 进行模型预测,并且定义了几个超参数。
model_name: "AGCN"
log_interval: 10
epochs: 100 #总epochs
model_name 被设置为 AGCN,即使用了 AGCN 模型进行训练和预测。log_interval 表示每隔多少个 batch 输出一次日志信息,epochs 表示总的训练周期数。