CVPR 2022 Oral | Bailando: 基于编舞记忆和Actor-Critic GPT的3D舞蹈生成

news/2024/7/12 2:34:31 标签: gpt, 人工智能

目录

测试结果:

02 提出的方法


测试结果:

预测有3个步骤,速度比较慢

02 提出的方法


1. 针对舞蹈序列的VQ-VAE和编舞记忆

与之前的方法不同,我们不学习从音频特征到 3D 关键点序列的连续域的直接映射。相反,我们先让神经网络“观看”大量的舞蹈数据,自己从里面“总结”出有意义的舞蹈元素,并且记录下来成为“编舞记忆”。

编舞记忆中,每个元素都是从专业舞蹈中提取的符合空间要求的标准舞姿。具体来说,我们设计了一个针对人体姿态序列的VQ-VAE(Vector Quantized Variational Auto-Encoder)网络,对舞蹈数据的姿态序列进行编码和量化到一个编码本Z中。

Z表示VQ-VAE的量化编码本,即“编舞记忆”,其中每一个元素都代表着一个标准的舞姿。为了使舞蹈记忆能涵盖更广泛的舞蹈动作,我们对舞蹈动作的上下身用独立的VQ-VAE进行学习,分别得到上下半身的编码本,并对上下半身进行组合式的拼接。我们还单独学习一个网络分支Dv,用于预测人体关键点的整体位移。

训练VQ-VAE的损失函数分为:

其中,重构函数不仅考虑到对关键点位置P的重构,还考虑到对一阶(速度)和二阶(加速度)导数的重构。

2. 动作GPT (motion GPT)

在我们从舞蹈数据中总结出了标准的舞姿库“编舞记忆”后,编舞的任务就变成了对音乐的每一时刻,选择一个合适的舞姿与之对应。这一步我们用到了GPT(Generative Pretrained Transformer)。

对于每一时刻t,GPT根据0到t-1时刻的音乐(m)、上半身(u)和下半身(l)信息来预测t时刻的上、下半身舞姿,并对每一个存在编舞记忆中的舞姿计算一个概率。而GPT的学习则是通过对预测的概率与真实动作之间的Cross-Entropy损失函数进行优化。

3. “演员-评论家”(Actor-Critic)学习

GPT的训练是直接而有效的。然而,这个框架有一个弊端,即很难向损失函数中加入一些人工定义的正则化项(比如希望让生成的舞蹈更加符合音乐节拍),因为GPT的学习的对象是舞姿在编舞记忆中的编号。

为了解决这个问题,我们采用了一种名为“演员-评论家”的强化学习框架。具体来说,我们把GPT前3层视作一个表示当前状态的“状态网络”,后几层视作一个产生“动作”的“演员网络”,并单独引入一个新的GPT分支作为“评论家网络”。评论家网络的打分和人工设计的奖励函数R,将决定GPT生成的舞蹈是好的(应该鼓励),还是不好的(应该避免),并通过对相应损失函数的优化提升GPT的效果。

03 实验结果

1. 对比实验


http://www.niftyadmin.cn/n/5418898.html

相关文章

蓝桥杯python常用内置函数

一、 abs() #返回数字的绝对值 例: 二、 all() #判断给定的可迭代参数中的所有元素是否都为True,若是则返回True,反之返回False 例: 三、 any() #判断给定的可迭代参数是否都为False,全为False则返回False&am…

Linux 进程状态环境变量

目录 一、操作系统的进程状态 二、Linux内核的进程状态 1、S、R状态 2、前后台进程 3、可中断睡眠(S>>T状态) 4、D状态(不可中断睡眠) 5、僵尸进程(Z状态) 三、孤儿进程 四、优先级 1、概念 2、PRI and NI 3、查看进程优先级 五、其他概念 六、环境…

每天学习一个Linux命令之grep

每天学习一个Linux命令之grep 在Linux系统中,grep是一个非常强大的命令行工具,用于在文本文件中查找指定的字符串或者匹配某种模式的行。本篇博客将详细介绍grep命令的使用方法及相关选项。 命令选项 grep命令有很多选项,以下是常用的选项…

【脚本玩漆黑的魅影】全自动丢球

文章目录 原理全部代码 原理 启动后截图。 丢球以后再截图。 如果两图一致,说明没成功,读档重来。 如果两图不一致,说明成功了。 while True:press(A)time.sleep(2)if is_same_img(ImageGrab.grab(), data_img):press(save2)else:break全部…

BSD-3-Clause是一种开源软件许可协议

BSD-3-Clause是一种开源软件许可协议,也称为BSD三条款许可证。它是BSD许可证家族中的一种,是一种宽松的许可证,允许软件自由使用、修改和重新分发,同时也保留了一些版权和责任方面的规定。 BSD-3-Clause许可证的主要特点包括以下…

【C/C++ 学习笔记】数组

【C/C 学习笔记】数组 视频地址: Bilibili 一维数组 数据类型 数组名[数组长度];数据类型 数组名[数组长度] { 值1, 值2, … }数据类型 数组名[] { 值1, 值2, … } 特点: 放在一块连续的内存空间数组中每个元素都是相同数据类型 数组名: 可以统计整个数组在内存中的长…

服务中心选址问题

服务中心选址问题 题目描述题目分析代码实现 题目描述 服务中心的位置记为location&#xff0c;区域由[left,right]表示&#xff0c;服务中心到区域的距离为&#xff1a; 如果right < location&#xff0c;则距离为location - right如果location < left&#xff0c;距离…

Linux系统安装及简单操作

目录 一、Linux系统安装 二、Linux系统启动 三、Linux系统本地登录 四、Linux系统操作方式 五、Linux的七种运行级别&#xff08;runlevel&#xff09; 六、shell 七、命令 一、Linux系统安装 场景1&#xff1a;直接通过光盘安装到硬件上&#xff08;方法和Windows安装…