PaddleVideo 中 agcn_fsd.yaml 配置文件代码详解

文件路径: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 用于最终的分类结果处理

  • 使用的是名为 AGCN 的 backbone 和名为 STGCNHead 的 head;
  • num_classes 参数指定了该模型可以对 30 种不同的动作类型进行分类;
  • ls_eps 参数为 0.1,表示当训练时出现 loss 等于 0 的情况时,加上 ls_eps防止梯度消失

数据路径

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
  1. 数据路径
  • 训练数据路径通过 DATASET.train.file_path 字段指定
  • 训练标签路径通过 DATASET.train.label_path 字段指定
  • 测试数据路径通过 DATASET.test.file_path 字段指定

这三个路径需要用户在配置文件 onfigs/recognition/agcn/agcn_fsd.yaml 中手动配置好。本项目中路径示例如上所示。

  1. 批大小 batch_size
    batch_size 代表一个批次的数据大小,即每次送入模型进行训练或测试的样本数。由于每个批次的数据量不同,会对训练速度和模型收敛程度产生影响。
  • 对于训练集,一般设置 batch_size 大于 1,以提高模型训练效率和稳定性,同时能够更好地利用硬件资源。通常,较大的 batch_size 可以带来更快的训练速度,但可能会影响模型的泛化能力和精度,而较小的 batch_size 则可以获得更准确的梯度计算结果,但会导致训练时间延长。
  • 对于测试集,一般设置 batch_size 为 1,以确保每次测试每个视频数据都能够被独立地处理,不会对结果造成影响。
  • 在这个具体的实现中,由于训练集中的数据较多,采用 batch_size 为 16 的方式可以较好地平衡训练速度和稳定性;而对于测试集,则需要每个视频数据都单独处理,因此采用 batch_size 为 1 的方式。
  1. 数据集格式
  • SkeletonDataset 是一种自定义的数据集格式,主要用于存储骨骼点序列数据(例如人体运动序列等),其中包含了每个序列的图像路径、标注坐标等信息。
  • 使用 SkeletonDataset 可以方便地将数据进行读取、预处理与扩增,并能够为深度学习模型提供符合格式要求的训练、验证和测试集数据。

数据处理

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 的优化器,并且还指定了一种学习率衰减方案 CustomWarmupCosineDecayL2 正则化的权重衰减系数。learning_rate 参数用于指定模型在训练过程中的学习率。

  • iter_step=True 表示使用迭代步数自适应的学习率调节方式,可以根据迭代次数动态调整学习率大小
  • 采用了 CustomWarmupCosineDecay 方案,即在前 warmup_epochs 轮内按照 warmup_start_lr 逐渐升高学习率,接着进入余弦退火调节阶段,最终将学习率降到 cosine_base_lr
  • 学习率过大会导致模型权重变化剧烈,从而不稳定甚至发散;学习率过小则需要更多的迭代才能收敛,训练效率较低。

MIXup操作

MIX:
   name: "Mixup"
   alpha: 0.2

Mixup 是一种数据增强技术,可以在训练过程中将两张随机选择的图片按照一定比例进行混合,生成新的训练样本。alpha 是 Mixup 方法中的一个超参数,用于控制两张图片混合的权重

  • 设选中的两张图片为 A 和 B,那么生成的新样本 C 就是 A 和 B 的线性组合,其权重为 alpha 和 (1-alpha)。因此,alpha 的取值范围应该在 [0,1] 之间。
  • 过小的 alpha 值可能会导致样本变化不够明显,从而无法提高模型的泛化性能;而过大的 alpha 值则可能会导致样本生成过于随机,影响模型的训练效果。
  • 建议先尝试一些常规的 alpha 取值(如 0.1、0.2、0.5 等),以及通过交叉验证等方式进行参数调整和优化,以获取最佳的训练效果。
  • 这里,alpha 被设为 0.2,代表着样本生成时主要以其中一个样本为主导进行训练样本的生成。

输出设置

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 进行模型预测,并且定义了几个超参数。

  • num_channels 表示输入数据的 通道数,window_size 表示每次模型预测所需要的数据窗口大小(时间步长),vertex_nums 表示输入数据的节点数,person_nums 表示输入的人数。
  • 通常来说,num_channels 和 vertex_nums 应该与输入数据的维度相匹配
  • window_size 可以根据数据的采样率、模型结构和计算资源等因素进行调整,一般来说,较大的 window_size 可以提高模型对长时序列的建模能力,但也会导致计算复杂度增加;
  • person_nums 则取决于输入数据中的人数,如果只有一个人,则 person_nums 应该设置为 1。

模型简述

model_name: "AGCN"
log_interval: 10 
epochs: 100 #总epochs

model_name 被设置为 AGCN,即使用了 AGCN 模型进行训练和预测。log_interval 表示每隔多少个 batch 输出一次日志信息,epochs 表示总的训练周期数。

  • 在确定 epochs 的取值时,可以通过交叉验证等方式进行参数调整和优化,并监控模型在验证集上的表现,找到最佳的 epoch 取值。

你可能感兴趣的:(深度学习,人工智能)