论文笔记《MotionGPT: Human Motion as a Foreign Language》

论文笔记《MotionGPT: Human Motion as a Foreign Language》

Administrator 7 2025-06-16
  • 论文 - 《MotionGPT: Human Motion as a Foreign Language》
  • 代码 - Github
  • 关键词 - Neurips、运动-语言大模型、多任务、预训练+微调

1 摘要

  • 研究问题
    • 人类运动展现出与语言类似的语义结构,通常被视为一种“身体语言”。
    • 通过将语言数据与大规模运动模型融合,进行能够提升运动相关任务性能的“运动-语言”联合预训练成为可能。
  • 本文工作
    • 提出了 MotionGPT——一个“运动-语言”模型,用于处理多种与运动相关的任务。
    • 具体而言,本文采用离散向量量化方法对人体运动进行编码,将3D运动转化为“运动词元”(motion tokens),类似于文本中词元的生成过程。基于这种“运动词汇表”,在统一框架下对运动和文本进行语言建模,将人体运动视为一种特定的语言。
    • 此外,受 prompt learning 的启发,本文使用运动与语言混合的数据进行预训练,并在基于提示的问答任务上对其进行微调。

2 背景与动机

  • 目前尚未出现一个通用的、能够同时处理人类运动与语言的预训练模型。(注意这是23年的论文)
  • 先前研究的局限性
    • 1)通常将运动与语言视为分离的模态,依赖严格配对的运动与文本数据。
    • 2)由于其监督信号是任务特定的,它们难以有效泛化到未见过的任务或数据,也缺乏对运动与语言之间整体关系的深入理解。
  • 本文动机:致力于构建一个能够广泛适用于多种任务,并能从更丰富的运动与语言数据中学习深层次语义关联的预训练“运动-语言”模型。

3 方法

MotionGPT 框架如图2所示:

  1. 运动分词器 (motion tokenizer):将原始运动数据转换为离散运动词元。
  2. 动作词汇表(motion vocabulary):包含运动和文本Codebook。
  3. 运动感知语言模型:通过文本描述学习理解运动词元。

符号定义:

  • 组成:运动编码器 ​\mathcal{E} 和运动解码器 ​\mathcal{D}
  • 运动序列输入:包含 ​M 帧的运动序列 ​m^{1:M} = \{x^i\}_{i=1}^M
  • 编码:将输入编码为 ​L 个运动词元 ​z^{1:L} = \{z^i\}_{i=1}^L,其中 ​L = M / l​l 表示对运动长度的时间下采样率。
  • 文本输入:长度为 ​N 的句子 ​w^{1:N} = \{w^i\}_{i=1}^N,该句子描述了一个与运动相关的问题或需求
  • 输出:MotionGPT 的目标是生成答案,即长度为 ​L 的词元序列 ​\hat{x}^{1:L} = \{\hat{x}^i\}_{i=1}^L。这些词元可以是人类运动词元 ​\hat{x}_m^{1:L},也可以是文本词元 ​\hat{x}_t^{1:L},最终生成的结果可以是一个运动序列 ​\hat{m}^{1:M} 或一段描述运动的文本 ​\hat{w}^{1:L}
paper78-1.webp

3.1 运动分词器

分词器 ​\mathcal{V} 结构:基于Vector Quantized Variational Autoencoders (VQ-VAE) 架构,由一个编码器 ​\mathcal{E} 和一个解码器 ​\mathcal{D} 组成。编码器生成具有高信息密度的离散运动词元,而解码器能够将这些运动词元重构为运动序列。

分词器运行公式化:运动编码器 ​\mathcal{E} 首先沿时间维度对给定的帧级运动特征 ​m^{1:M} 应用一维卷积,以获得潜在向量 ​\hat{z}^{1:L} = \mathcal{E}(m^{1:M})。接下来,通过离散量化将 ​\hat{z} 转换为一组代码本条目 ​z。可学习的代码本 ​Z = \{z^i\}_{i=1}^K \subset \mathbb{R}^d 包含 ​K 个潜在嵌入向量,每个向量的维度为 ​d。量化过程 ​Q(\cdot) 将每一行向量 ​b 替换为其在代码本 ​Z 中最近邻的条目 ​b_k,公式如下:

z_i = Q(\hat{z}^i) := \arg\min_{z_k \in Z} \|\hat{z}_i - z_k\|_2. \tag{1}

量化完成后,运动解码器 ​\mathcal{D}​z^{1:L} = \{z^i\}_{i=1}^L 投射回原始运动空间,生成包含 ​M 帧的运动序列 ​\hat{m}^{1:M}

分词器训练方法:为了训练这个运动分词器,遵循 [12, 59] 的方法,使用三种不同的损失函数来训练和优化运动分词器:重构损失 ​\mathcal{L}_r、嵌入损失 ​\mathcal{L}_e 和 commitment 损失 ​\mathcal{L}_c,即 ​\mathcal{L}_{\mathcal{V}} = \mathcal{L}_r + \mathcal{L}_e + \mathcal{L}_c。为了进一步提升生成的运动质量,参考 [59] 的方法,在重构损失中引入 L1 平滑损失和速度正则化,并采用指数移动平均(EMA)和代码本重置技术 [39] 来增强训练期间的代码本利用率。


3.2 运动感知语言模型

为了实现语言与运动的统一建模,作者将运动词元 ​z^{1:L} 表示为索引序列 ​s^{1:L},并与基于 WordPiece 的文本词元融合。传统方法分别使用不同模块处理文本和运动,而本文提出将文本词汇表 ​V_t 与运动词汇表 ​V_m 合并为一个统一的“文本-运动”词汇表 ​V。其中 ​V_m 对应运动代码本 ​Z,并加入特殊标记如 <som><eom> 来表示运动起止。

这样,各种运动相关任务(如运动生成、描述、预测)都可以以统一格式建模,输入输出均来自同一词汇表 ​V,支持自然语言、运动或两者混合的表达。MotionGPT 基于 T5 架构,采用 Transformer 模型进行条件生成:源输入 ​X_s 经编码器处理,解码器自回归生成目标序列 ​X_t,通过最小化负对数似然优化模型参数:

\mathcal{L}_{LM} = -\sum_{i=0}^{L-1} \log p_\theta \left( x_t^i \mid x_t^{<i}, x_s \right) \tag{2}

在推理阶段,通过递归采样从分布中生成目标词元,直到遇到结束标记,从而逐步构建完整输出序列。


3.3 训练策略

由于 T5 模型仅在文本数据上进行训练,其词汇表为 ​V_t,因此需要通过学习运动词汇表 ​V_m 来将运动与语言联系起来,并使该语言模型能够理解人体运动概念。如图 3 所示,本文训练方案包括三个阶段:

  1. 运动分词器训练:专注于学习运动Codebook以将人体运动表示为离散词元。
  2. 运动-语言预训练阶段:包含无监督和有监督的目标,用于学习运动与语言之间的关系。
  3. 指令微调阶段:基于不同运动相关任务的提示指令对模型进行调整。
paper78-2.webp

3.3.1 运动分词器训练

使用公式 (1) 中定义的目标来训练运动分词器。一旦优化完成,运动分词器在整个后续管道阶段中保持不变。


3.3.2 运动-语言预训练阶段

在T5模型的基础上,使用混合的语言与运动数据对MotionGPT进行进一步预训练,包含两种训练方式:

  1. 无监督目标:沿用T5的去噪目标,随机将输入词元中15%替换为哨兵标记,并构建输出序列以恢复被掩码的内容,提升模型泛化能力。
  2. 有监督目标:利用成对的文本-运动数据集 [11, 33],在翻译任务上训练模型理解语言与运动之间的关联。

3.3.3 指令微调阶段

基于HumanML3D和KIT等数据集构建了一个多任务指令数据集,定义了15类核心运动任务(如运动生成、描述、预测等),并为每个任务设计多种指令模板,共生成上千种任务形式。例如:

  • 运动生成:“Can you generate a motion sequence that depicts ‘a person emulates the motions of a waltz dance’?”
  • 运动描述:“Provide an accurate caption describing the motion of <motion_tokens>”

通过指令微调,MotionGPT在多个任务上表现出色,并展现出对新任务和提示的良好适应能力。


4 实验(略)