T2M-GPT训练全流程详解:从VQ-VAE到GPT的完整训练步骤

【免费下载链接】T2M-GPT (CVPR 2023) Pytorch implementation of “T2M-GPT: Generating Human Motion from Textual Descriptions with Discrete Representations” 【免费下载链接】T2M-GPT 项目地址: https://gitcode.com/gh_mirrors/t2/T2M-GPT

T2M-GPT是一个基于Pytorch实现的文本到人体运动生成模型,能够将文本描述转化为逼真的3D人体动作序列。本文将详细介绍从数据准备到模型训练的完整流程,帮助新手快速掌握这个CVPR 2023开源项目的核心训练方法。

准备工作:环境配置与数据下载

1. 环境搭建指南

首先需要配置项目所需的运行环境。项目提供了environment.yml文件,包含所有依赖项:

conda env create -f environment.yml
conda activate t2m-gpt

2. 数据集与模型下载

项目需要多种数据和预训练模型支持,可通过dataset/prepare目录下的脚本一键下载:

  • 执行download_extractor.sh获取特征提取工具
  • 运行download_glove.sh下载词向量文件
  • 使用download_model.sh获取预训练基础模型
  • 执行download_smpl.sh下载SMPL人体模型文件

第一阶段:VQ-VAE模型训练

VQ-VAE训练配置

VQ-VAE(Vector Quantized Variational Autoencoder)负责将连续的运动数据转化为离散的token表示。训练配置文件位于options/option_vq.py,可根据需求调整以下关键参数:

  • 量化码本大小(codebook size)
  • 编码器/解码器网络深度
  • 学习率与训练轮次

开始VQ-VAE训练

使用项目根目录下的train_vq.py脚本启动训练:

python train_vq.py --config options/option_vq.py

训练过程中,模型会自动保存到指定路径,并生成运动序列的量化结果,为后续GPT训练提供离散输入。

第二阶段:GPT模型训练

GPT模型架构与配置

T2M-GPT采用Transformer架构,将文本描述映射到VQ-VAE生成的运动token序列。模型定义在models/t2m_trans.py,训练配置文件为options/option_transformer.py,主要参数包括:

  • Transformer层数与注意力头数
  • 文本-运动交叉注意力机制
  • 训练批次大小与学习率调度

启动GPT训练流程

在完成VQ-VAE训练后,使用以下命令训练GPT模型:

python train_t2m_trans.py --config options/option_transformer.py

训练过程中,模型会学习文本与运动序列之间的关联,最终能够根据新的文本描述生成连贯的人体动作。

T2M-GPT文本到运动生成示例 图1:T2M-GPT根据文本描述生成人体运动的效果展示,左侧为真实运动序列,右侧为模型生成结果

模型评估与可视化

评估模型性能

项目提供了两种评估脚本:

  • VQ_eval.py:评估VQ-VAE的重构质量和量化性能
  • GPT_eval_multi.py:评估GPT模型在多个文本描述上的生成效果

执行评估命令:

python GPT_eval_multi.py --model_path <path_to_trained_model>

生成结果可视化

使用visualization/plot_3d_global.py工具可以将生成的运动序列可视化:

from visualization.plot_3d_global import draw_to_batch
draw_to_batch(xyz, text_description, output_file)

不同模型生成效果对比 图2:T2M-GPT与其他方法在"a man steps forward and does a handstand"任务上的对比,红色框标注了其他方法的错误,黄色框显示T2M-GPT的稳定输出

实战演示:文本生成运动示例

以下是一个简单的文本到运动生成示例代码片段,来自项目的可视化工具:

clip_text = ["a person is jumping"]
text = clip.tokenize(clip_text, truncate=True).cuda()
feat_clip_text = clip_model.encode_text(text).float()
index_motion = trans_encoder.sample(feat_clip_text[0:1], False)
pred_pose = net.forward_decoder(index_motion)
pred_xyz = recover_from_ric(pred_pose*std_mean.float(), 22)

运动生成代码与效果演示 图3:文本生成运动的代码示例及可视化结果,展示了"a person is jumping"的生成过程

常见问题与解决方案

训练过程中的显存问题

  • 减少批次大小:修改配置文件中的batch_size参数
  • 降低模型复杂度:减少Transformer层数或隐藏层维度
  • 使用混合精度训练:在配置文件中启用fp16选项

生成结果不连贯

  • 增加训练轮次:确保模型充分收敛
  • 调整学习率:尝试较小的学习率或使用学习率调度策略
  • 检查VQ-VAE质量:确保量化过程保留足够的运动细节

通过以上步骤,你可以完整复现T2M-GPT的训练流程,从数据准备到模型评估,最终实现文本到人体运动的高质量生成。项目代码结构清晰,主要模块包括models/目录下的网络定义、dataset/目录下的数据处理脚本以及utils/中的辅助工具函数,便于进一步扩展和优化。

【免费下载链接】T2M-GPT (CVPR 2023) Pytorch implementation of “T2M-GPT: Generating Human Motion from Textual Descriptions with Discrete Representations” 【免费下载链接】T2M-GPT 项目地址: https://gitcode.com/gh_mirrors/t2/T2M-GPT

更多推荐