跳转至

Generating Human Motion in 3D Scenes from Text Descriptions

Abstract

根据文字描述生成人体动作的研究因其应用范围广泛而日益受到关注。然而,只有少数作品考虑了人与场景的交互以及文本条件,而这对于视觉和物理逼真度至关重要。本文主要研究在三维室内场景中,根据人与场景互动的文字描述生成人体动作的任务。由于文本、场景和运动的多模态性质以及空间推理的需要,这项任务面临着挑战。为了应对这些挑战,我们提出了一种新方法,将复杂的问题分解为两个更易处理的子问题:(1) 目标对象的语言基础和 (2) 以对象为中心的运动生成。在目标对象的语言定位方面,我们利用大型语言模型的强大功能来识别场景中的目标对象。在运动生成方面,我们为生成模型设计了一种以目标对象为中心的场景表示法,使生成模型聚焦于目标对象,从而降低了场景的复杂性,促进了人类运动与对象之间关系的建模。实验证明,与基线方法相比,我们的方法具有更好的运动质量,并验证了我们的设计选择。我们的代码即将发布。

1. Introduction

人体动作生成是一个长期存在的问题,因为它应用广泛,如游戏开发、虚拟现实和电影制作等。最近,这一领域的研究范式发生了转变,从根据丰富的用户输入进行虚拟化身仿真[29],转变为根据高级语言提示(如有关所需动作的文字说明)进行基于学习的动作生成[2, 3, 15, 18, 19, 38, 55, 73, 74]。然而,之前大多数关于文本驱动运动合成的研究都没有考虑人与场景的交互 [38, 55, 73, 74],而场景上下文和环境的物理约束在很大程度上决定了生成的人体运动的保真度。

在本文中,我们的重点是根据三维室内场景中的文字描述生成动作。具体来说,给定目标场景的三维扫描图像和与场景互动的人体动作的文字描述,我们的目标是生成与文字描述一致的自然人体动作。

由于文本、场景和人类移动的多模态性质,这一问题面临着诸多挑战。与之前的方法[2, 3, 55, 73, 74]仅仅依靠文字描述人类如何移动不同,我们的任务还包括额外描述给定场景中空间细节的文字(例如,坐在桌子附近的扶手椅上)。因此,这项任务需要空间推理能力[1],模型应建立文本-物体映射,以便在三维场景中找到与自然语言描述一致的特定物体(三维视觉基础)。此外,生成的动作也应与场景上下文保持一致。

作为一项开创性的工作,HUMANISE[82]建立了一个条件变异自动编码器(cVAE)[40, 68],具有场景和文本的不同速率编码器,用于多模态理解。为了提高空间推理能力,他们引入了直接回归物体中心的辅助任务,以隐含的方式学习三维视觉基础。但他们并没有明确利用预测的中心,因此无法完全纳入视觉接地的诱导偏差。此外,HUMANISE[82] 使用单点变换器[98] 对整个场景进行编码。用这样的模型直接生成运动具有挑战性,因为三维点云本身具有噪声和复杂性[47, 87],导致无法定位目标物体。正如文献[50]所述,并非场景中的每个点都与最终的人体运动相关。因此,有必要开发一种更有针对性的方法,重点关注场景中的相关部分,以提高运动生成的质量。

为了解决上述问题,我们提出了一种利用大型语言模型 (LLM) [6, 41, 51] 的强大功能的新方法。我们的主要想法是将根据文本线索生成场景中的运动这一具有挑战性的任务分解成两个较小的问题:(1) 三维场景中物体的语言基础;(2) 以目标物体为中心生成运动。对于语言基础问题,我们建议将其表述为问题解答,并利用 LLM 的大量先验知识,而不是直接学习文本-对象映射。具体来说,我们首先构建 3D 场景的场景图,并生成其文本描述。然后,我们利用 ChatGPT [51] 来分析场景描述与输入指令之间的关系,并用三维可视化接地回答。实验表明,这种策略能有效提高准确率。

在运动生成方面,我们设计了一种以物体为中心的表示方法,以帮助生成模型专注于目标物体。具体来说,我们将目标物体周围的点云转换为体积传感器[69],以建立以物体为中心的表征。然后,我们利用扩散模型[56, 74],在以物体为中心的表征和文本中合成人体运动。原始场景点云可能有各种尺度,与之相比,以物体为中心的表征更加紧凑,对尺度也更加稳健,因为同一类别的物体大小相似。因此,这种表示方法降低了场景的复杂性,并有助于运动与物体之间关系的建模。

我们在 HUMANISE 数据集上进行了全面的比较和消融实验。结果表明,我们的方法优于基线方法,体现在更准确的物体定位结果和更符合文本描述和场景的运动。我们进一步证明,我们的方法可以推广到 PROX 数据集[22],无需任何微调。

2.1. Motion synthesis

用于运动合成的深度学习。近年来,用于运动合成的深度学习方法受到越来越多的关注[14, 21, 25, 28, 29, 49, 70, 90]。为完成这项任务,人们采用了多种技术,包括 MLP [29]、专家混合(MoE)[71, 90]和循环神经网络(RNN)[21]。为了生成多样化的运动结果,之前的工作探索了 cVAE [45, 95]、GAN [43, 60]、归一化流 [26] 和扩散模型 [74]。

文本驱动的运动生成。最近,人们对文本驱动的运动生成越来越感兴趣[2, 55, 73]。这项任务以自然语言为输入,合成符合指令的人体动作。KIT-ML [57] 是这项任务的第一个基准。一些研究还进一步为 AMASS 数据集 [48] 添加了动作标签 [58] 和文本 [18]。为了完成这项任务,[2, 15, 73] 提出学习文本和动作的共享潜空间。[55] 采用变换器 VAE [54] 生成不同的结果。[19,92] 通过 VQ-VAE 的离散再呈现[64,77]实现了更好的性能。[12, 38, 74, 93] 成功地将扩散模型应用于这一方向。[5, 42] 进一步探索了潜在扩散模型[66]。在 [74] 的基础上,[37, 84] 引入了稀疏空间控制。[3, 59, 67] 还研究了长序列运动生成。其他现有研究[4, 36, 81, 97]将大型语言模型(LLM)[6, 41, 52, 76]应用于运动领域。[4]通过将不同的身体部位与 LLM 相结合来构建合成运动。[35,97] 将动作视为一种语言,并利用动作标记[19,92] 对 LLM 进行微调[62]。

场景感知运动生成 这个方向是生成三维场景中的人体运动[69, 79]。为了合成行走和坐姿动作,[69] 构建了体积传感器来编码物体信息和人物周围环境。文献[23]对其进行了扩展,以合成具有不同坐姿和躺姿的动作。此外,[94] 还提出通过手部接触来控制坐姿。为了提高性能,[56] 采用了分层框架,按顺序生成目标姿势、里程碑和动作。[72, 83] 用小物体合成全身(身体和手部手指)抓取动作。[16, 44, 70, 85]探索了与动态物体的交互,包括操纵[16, 44]和携带[85]。[8, 24]探讨了与物理模拟角色的人-物互动。这些研究主要集中在一两个物体上,而其他研究[79, 80]则考虑了更复杂的场景输入(如包括墙壁和地板在内的场景点云)。[79、80] 采用分层框架,分别生成轨迹和运动。[102]引入凝视来帮助生成。[33]进一步采用了扩散模型,[50]通过将长序列分割成多个短序列来合成场景中的长期运动。[100] 设计了一个再强化学习管道,以实现在复杂场景中的导航和交互式控制。

文本驱动的场景感知运动生成 只有少数作品同时考虑了文本和场景[37, 82, 100]。虽然[100]通过[99]实现了对坐姿的文本控制,但在我们的设置中,文本描述用于在杂乱的场景中选择对象。[37]可以在行走过程中避开障碍物,而我们的任务需要处理各种动作。与我们最相关的工作是 HUMANISE [82],它采用了一种转换器 VAE 架构,带有文本和场景双流条件模块。为了精确定位目标对象,他们设计了一些辅助任务,如对对象中心进行双向回归。与 HUMANISE 不同的是,我们提出了一个两阶段管道,首先在 ChatGPT [51] 的帮助下定位目标对象,然后使用以对象为中心的表示法生成人体运动。

2.2. 3D visual grounding.

近年来,人们对三维场景中的视觉定位进行了探索[1, 11, 75],并在三维问题解答[13, 88]中解决了这一问题。鉴于三维场景的点云,这项任务[1]要求模型根据文本指示定位目标对象。大多数研究采用两阶段方案,首先预测多个边界框 [9, 65, 101] 或分割结果 [31, 89] ,然后根据语言描述选择对象。[32] 引入了多视角输入,而 [87] 则采用了二维语义。[34]结合了自下而上[46]和自上而下[7]的检测方法。[47]通过逐步选择关键点设计了一个单级流水线。[20]在 GPT [6] 的帮助下扩展了[32],以生成多视图文本输入。最近,[30] 提出了一种具有大型语言到代码模型的神经符号框架[10]。大多数作品只能定位单个对象,而 [96] 可以灵活定位多个对象。与以往直接处理点云或多视角图像的工作不同,我们将场景转换为文本描述,并利用大型语言模型来推断目标对象。与文献[30]一样,我们也利用大型语言模型进行物体定位。

3. Problem setup and preliminaries

在本节中,我们将讨论任务的定义和前期准备工作。我们的目标是生成与文本描述和给定场景一致的人体动作。

文本描述。文本描述遵循 Sr3D [1] 中的模板 < 动作 >< 目标类 > [< 空间关系 >< 锚点类 >](例如,"<坐在> <椅子上> [< 位于> <书桌和书架> 的中央>]")。有四个动作(走、坐、站和躺)。目标代表代理需要与之交互的对象,而锚定对象有助于确定目标。某一类型的目标家具通常在一个场景中有很多实例,而锚定家具应该是唯一的。为了确定确切的目标对象,目标对象和锚定对象之间有五种空间关系[1]:水平接近、垂直接近、之间、分配中心和支持。

场景表示法。场景表示为由 N 个点组成的点云: S ∈ RN×6,包含每个点的位置和法线方向信息。

运动表示。SMPL-X 是一个参数化人体模型。在这项工作中,人体参数包括身体形状参数 β∈ R10、全局平移 r∈ R3、6D 全局方向 γ∈ R6 和 J 关节的 6D 姿势参数 θ∈ RJ×6 [103]。根据文献[82],β 被视为模拟身体形状影响的条件,为便于记述,我们省略了它。

diffusion model 略

4. Method

我们的方法概览如图 2 所示。在第 4.1 节中,我们利用 ChatGPT 在三维场景和文本描述中定位目标对象。在精确定位的基础上,我们可以将注意力集中在目标对象上,并采用以对象为中心的生成管道来分别合成轨迹(第 4.2 节)和运动(第 4.3 节)。合成细节将在第 4.4 节中讨论。

4.1. Language grounding of objects in 3D scenes

根据文本描述生成场景感知动作需要具备场景理解能力,并在场景和文本之间建立重新关联。由于指令描述的是角色如何移动并与单个目标对象互动,因此场景的大部分内容可能与最终动作的相关性微乎其微[50]。受此启发,我们建议对目标对象进行定位,以识别最相关的信息。受 LLM [41, 51, 52] 最新进展的启发,我们利用 ChatGPT [51] 来查找给定文本中的特定对象。我们首先通过构建场景图来获取场景的文本描述。然后,我们通过专门设计的提示将文本指令输入 ChatGPT,并解析响应以获取目标对象。

空间场景图提取。要利用 LLM,第一步是将三维场景转换成文本。这可以通过构建空间场景图来实现。我们利用 [46] 中预先训练好的三维物体检测模型来提供三维方框建议。随后,我们采用 [1] 的方法来获取物体之间的关系。具体来说,对于每组两个物体,我们可以从它们的边界框中推断出它们之间的三种关系:水平接近度、垂直接近度和支撑度(如第 3 节所述);对于每组三个物体,我们可以推断出其中一个物体是否位于另外两个物体之间。由于检测结果不包含物体姿态,因此我们不构建分配中心关系(例如 "沙发后面的架子")。然后,我们构建一个场景图,将每个物体指定为图中的一个节点,节点之间的边代表物体之间的关系。通过将三维场景转换为文本,我们可以应用 ChatGPT 从数据中提取有意义的见解。

利用 ChatGPT 定位目标对象。一种简单的方法是直接将整个场景图输入 ChatGPT,然后让它选择目标对象。然而,场景中可能包含许多物体,从而导致纹理描述过长。我们观察到,在这种情况下,Chat-GPT 经常会感到困惑,无法给出正确的答案。为了缩小搜索空间,我们首先使用 ChatGPT 来识别与所提供文本相关的对象。然后,我们从场景图中排除无关的对象,只关注具有相关信息的对象,从而有效地确定目标对象。这种方法的优点是减少了需要考虑的对象数量,使 ChatGPT 更容易识别目标对象。

如图 3 所示,我们以序列的方式构建两个提示。以 "坐在黑板和末端桌子中间的椅子上 "为例,我们首先需要缩小对象类别搜索空间。为了找到我们关心的对象类型,我们构建了第一个提示,要求 ChatGPT 找出目标对象和陪衬对象。目标对象是指我们希望代理与之交互的最终对象,在本例中就是 "桌子"。锚点对象是帮助确定目标对象的对象,因为一个场景中可能有很多椅子。根据目标对象 "椅子 "以及锚定对象 "木板 "和 "桌子",我们可以过滤掉场景中所有不相关的对象,在场景图中只保留椅子、木板和桌子。接下来,根据简化后的场景图,我们可以用文字描述对象之间的关系:场景图中的每一条边都可以转换成类似 "椅子 4 离末端的桌子 0 很远 "这样的边句子。将所有的边转换成这样的边句子,就可以完整地描述当前场景。最后,我们通过要求 ChatGPT 从积累的边缘句中推断出目标对象来构建第二个提示。更多详情,请参阅补充材料。

4.2. Diffusion-based trajectory generation

给定 ChatGPT 定位的对象后,我们首先根据指令生成轨迹,然后合成本地人的姿势。轨迹被定义为人物的平移和方向序列。正如文献[50]所述,并非场景中的每个点都与最终的人体动作相关。受 NSM [69] 和 ManipNet [91] 的启发,我们采用目标物体周围的体积传感器(如图 4 所示)来表示场景。

以物体为中心的场景表示法。将目标物体中心位置记为 (cx,cy,cz)。我们将场景 S 的点云转换为以 (cx, cy, cz) 为中心的物体中心坐标轴。为了识别目标物体周围的几何尺寸,我们创建了名为 "环境传感器 "和 "目标传感器 "的体积传感器。

环境传感器以(cx, cy, cz)为中心,呈立方体形状,体积为 4 × 4 × 4 m3,包含 8×8×8 立方体体素,如图 4 ©所示。与文献[69]一样,根据给定的场景网格定义每个体素中的场景占位os∈R1:

其中,ds 是场景网格与体素中心之间的符号距离,as 是体素边长,nv 是距离体素中心最近的场景点的法线方向。环境传感器提供目标物体周围的粗略场景几何测量。

为了捕捉目标物体的详细几何形状,我们进一步构建了另一个名为 "目标传感器"(Target Sen-sor)的体积传感器。由于我们在第 4.1 节中已经获得了目标物体的三维边界框,因此我们根据边界框裁剪点云,并构建一个覆盖边界框的 8 × 8 × 8 立方体体积,如图 4 (b) 所示。目标传感器 T 与环境传感器 E 的形式相同,只是目标传感器的体素大小不同,如图 4 (b) 和 © 所示。 鉴于所构建的以对象为中心的表示法,我们遵循文献[56],采用变压器解码器架构[78],该架构可实现任意长度的运动。至于文本输入,我们使用 CLIP [61] 文本编码器将输入文本编码为文本特征 L。总之,这种生成模型的条件是

Ct = {L, E, T },

其中,L 是文本特征,E 是环境传感器,T 是目标传感器。所有条件通过 MLP 投影到同一维度 D = 512,并与位置嵌入相加形成词块。我们使用公式 2 中描述的简单目标来训练轨迹生成模型 Gr,以生成长度为 N 的轨迹 r1:N。

4.3. Diffusion-based motion completion

有了第 4.2 节中的运动轨迹,下一步就是完成整个运动。根据生成的运动轨迹,我们构建了一个轨迹传感器 O,用于明确推理角色与场景之间的交互。 轨迹传感器 如图 4 (d) 所示,轨迹传感器也是一种体积传感器,其形式与环境传感器类似,但设计用于以自我为中心的感知[94]。具体来说,轨迹传感器被放置在每个帧中人物的周围。传感器 Oi 以第 i 帧的预测根位置为中心,面向第 i 帧的预测根方向,包含 8 × 8 × 8 立方体,用于存储场景占用率。占用率计算与公式 3 相同。 另一个基于变换器的条件扩散模型用于沿轨迹合成局部姿态。条件扩散模型的定义如下

Cm = {L, E, T, O1, ..., ON },

其中 L、E 和 T 与公式 4 中的含义相同。公式 2 中描述的简单目标用于训练运动生成模型 Gm,以生成长度为 N 的全局方向 γ1:N 和局部姿态 θ1:N。

4.4. Implementation details

根据文献[37, 56, 79, 80],我们在轨迹生成和运动生成中分别使用不同的扩散模型。由于 HUMANISE 数据集[82]与 AMASS 数据集(3772 分钟)[48]相比只包含相对较少(51 分钟)的纯运动样本,因此我们首先在整个 AMASS 数据集上对模型进行 200 个历时的预训练,然后在 HUMANISE 数据集上进行 200 个历时的微调以提高运动质量。在预训练期间,文本特征 L 被设置为全零。两个模型都使用 AdamW 优化器[39]进行训练,在一个 Nvidia RTX 3090 GPU 上使用 0.0001 的学习率。批量大小设置为 128。更多详情请参见补充材料。

5. Experiments

5.1. Evaluation metrics

这项任务要求生成的动作不仅要自然、可信,还要与场景和文本输入一致。因此,我们从三个方面对生成的动作进行评估:场景条件动作质量、动作条件动作质量和纯动作质量。 场景条件运动质量。为了评估生成的动作与场景的一致性,我们计算了 [82] 提出的身体到目标的距离(goal dist.) 虽然目标距离测量的是与目标对象的接近程度,但它并不考虑整个动作与场景的一致性(例如,坐在沙发上但口型不正确)。为了弥补目标距离的不足,对每个模型随机抽取 20 个场景进行人类感知研究(以场景评分表示),每个样本需要 10 名工作人员进行评分。详情请参见补充材料。 动作条件运动质量。为了衡量生成的动作与文本的一致性,我们按照 [17] 的方法来评估动作识别的准确性(准确率)、多样性和结果的多模态性。计算这些指标依赖于预先训练的动作识别模型[86],我们在 HUMANISE 数据集上训练识别模型。 纯动作质量。我们使用 [17] 提出的指标,即 Frechet Inception Distance (FID) 来评估生成动作的逼真度。FID 越小,说明生成的运动越接近地面真实运动。我们还进行了人类感知研究(以质量分数表示),以衡量纯运动质量。详情请参见补充材料。

5.2. Generating human motion from text and scene

我们的实验是在 HUMANISE 数据集 [82] 上进行的。按照之前的设置[82],我们使用 543 个场景中的 16.5k 个运动序列进行训练,并使用 100 个场景中的 3.1k 个运动序列进行测试。我们将我们的方法与四种基线方法进行比较:(1) MDM∗: MDM [74] 是一种基于扩散的运动生成器。与 HUMANISE 类似,我们使用点变换器为 MDM 提供场景特征。(2) GMD∗:在 MDM 的基础上,GMD[37] 提出了各种技术来增强 MDM 的控制和质量。我们采用 GMD∗ 的单阶段设置。场景信息的给出形式与 MDM∗ 和 HUMANISE 相同。(3) GMDHC:我们提供由 HUMANISE 预测的物体中心(用 HC 表示),通过增加接近损失来鼓励运动靠近预测的物体中心,从而指导 GMD 的运动生成过程。接近损失的定义是,在交互帧中,HC 与预测的人体骨盆之间的距离。(4) HUMANISE:HUMANISE 是一种基于 cVAE 的方法,可根据三维场景中的文字生成人体动作。我们直接使用其发布的模型。详情请参见补充材料。 定量结果如表 1 所示。1. 我们的方法在目标距离、场景得分、准确率、FID 和质量得分方面都优于基线方法,并在多样性和多模态方面取得了有竞争力的结果。定量结果表明,我们的方法可以生成更高质量的图像,并且在所有条件下都更加一致。图 5 展示了定性结果。我们的管道可以生成与场景和文本一致的更自然的动作。更多可视化效果请参阅补充材料。

5.3. Ablation study

主要部件的烧蚀。为了探索我们的设计选择所产生的效果,我们设计了四种变体。(1) "无定位":去掉定位模块,直接使用场景点云生成轨迹和运动。与 HUMANISE 一样,通过固定的点变换器提取场景特征。(2) "不以物体为中心":我们去掉了以物体为中心的表征,以场景坐标预测运动。我们仍然使用传感器的场景特征。(3) "不含两阶段":同时生成轨迹和运动。(4) "无扩散":采用 cVAE 代替扩散模型作为架构。(5)"w/o pretrain":不在 AMASS 数据集上对模型进行预训练。如表 2 所示 如表 2 所示,定位增强了精确交互能力,而以物体为中心的表示则提高了运动质量。更多结果请参阅补充材料。 物体定位的设计选择。在物体定位方面,我们将我们的方法与两种基线和三种变体进行了比较。(1) BUTD-DETR:BUTD-DETR [34] 是一种现有的 3D 视觉定位方法。(2) HUMAN-ISE:HUMANISE 在辅助任务中预测物体中心。(3) "我们使用 LLaMA": 用 LLaMA 取代 ChatGPT。(4) "ours w/o two-stage":我们采用单阶段问答流程,而不是两阶段方式。(5) "ours w/o few-shot":ChatGPT 不提供 few-shot 示例。我们在两种情况下对这些变体进行了评估:预测检测[46]和地面实况检测。评估指标包括对象校准的准确度(acc.)和预测中心到对象中心的距离(center dist.)。表 3 表 3 显示,与其他变体相比,我们的方法在所有情况下都能以更高的精度和更低的中心距定位目标对象。我们的定位模块的两阶段设计对最终性能有很大帮助。可以看出,如果提供地面实况检测,我们的方法可以取得更好的效果。

5.4. Generalization

为了验证我们方法的泛化能力,我们在未进行微调的情况下,直接在未见过的 PROX 数据集 [22] 上运行我们的方法。我们在图 6 中进行了说明。有了基于 ChatGPT 的定位方法和基于体积传感器的运动生成方法,我们的方法可以很容易地推广到其他数据集。更多结果请参阅补充材料。

6. Discussion

我们已经证明,与所有基线方法相比,我们的方法可以合成质量更好、互动更精确的动作。不过,受数据集的限制,动作的持续时间相对较短(60% 约为 1-3s),而且大多数文本都是按照模板 [1] 制作的,没有详细描述。我们也承认 ChatGPT 的行为受提示[36]的制约,而且 ChatGPT 偶尔会犯错。未来工作的一个潜在方向是探索 ChatGPT 的自动更正。 此外,我们只处理了静态场景,因此有兴趣将我们的方法扩展到与动态元素的交互,例如搬运任务中的移动物体。

7. Conclusion

在这项工作中,我们介绍了一种从场景中的文本生成运动的新方法。为了解决这个具有挑战性的问题,我们提出了一种分两步走的方法。第一步涉及三维视觉基础,即识别场景中的物体。第二步,针对目标对象,我们建立了一种基于扩散的运动生成方法。与现有方法相比,我们的方法具有多项优势,包括提高了三维视觉定位精度和运动质量。