谷歌 AI 编舞师,连张艺兴最喜欢的 Krump 都不在话下

540 篇文章 14 订阅
9 篇文章 1 订阅

编译 | 禾木木

出品 | AI科技大本营(ID:rgznai100)

舞蹈一直是文化、仪式和庆祝活动的重要组成部分,也是一种自我表达的方式。今天,存在多种形式的舞蹈,从舞厅到迪斯科。然而,舞蹈是一种需要练习的艺术形式。通常需要专业培训才能为具有多种舞蹈动作的舞者创作富有表现力的编舞。虽然这个过程对人们来说很困难,但对于 ML 模型来说要困难得多,因为任务涉及产生具有高电影复杂性的连续运动,以及运动与伴随音乐之间的非线性关系。

这次谷歌用 Transformer 制作了一个会根据音乐跳舞的 AI 。

无论是动作还是风格都能完美驾驭,你 pick 哪个舞种呢

舞蹈风格的由来

谷歌的这项新研究引入了全注意力跨模态 Transformer (FACT) 模型,该模型可以模仿和理解舞蹈动作,甚至可以提高一个人编舞的能力。

除此之外,该团队还发布了 AIST++,这是一个大规模、多模态的 3D 舞蹈动作数据集。该数据集包含 5.2 小时的 3D 舞蹈动作,包含 1408 个序列,涵盖十种舞蹈类型,每一种都有多视图视频和已知的姿势。他们的研究结果表明,在对 AIST++ 的广泛用户研究中,FACT 模型优于当前最先进的方法。

为了创建 3D 运动数据集,研究人员使用了现有的 AIST 舞蹈数据库,这是一组带有音乐伴奏但没有 3D 信息的舞蹈电影。

AIST有十种舞蹈风格:Old School(Break、Pop、Lock和Waack)和New School(Break、Pop、Lock和Waack)(Middle Hip-Hop、LA-style Hip-Hop、House、Krump,街头爵士和芭蕾爵士)。虽然它提供了舞者的多视图视频,但这些相机并没有校准。

他们能够用广泛使用的 SMPL 3D 模型中的参数重建相机校准参数和 3D 人体运动。生成的数据库 AIST++ 是一个大规模的 3D 人类舞蹈动作数据集,具有与音乐匹配的各种 3D 动作。

十种舞蹈风格都均匀地呈现在动作中,涵盖了每分钟节拍数 (BPM) 的各种音乐节奏。每种舞蹈类型都有 85% 的基本动作和 15% 的高级动作(更长的编舞由舞者自由设计)。AIST++数据集还包括多视图同步图片数据,可用于各种研究领域,包括2D/3D、姿态估计。

该模型必须学习音频和运动之间的一对多映射,这在跨模态序列到序列合成中提出了一个独特的问题。他们使用 AIST++ 创建不重叠的训练和测试子集,确保它们之间不会共享编舞或音乐。

FACT 模型

该团队使用 FACT 模型数据集训练,并根据音乐生成 3D 舞蹈。该模型使用独立的运动和音频转换器,首先对种子运动和音频输入进行编码,然后将嵌入连接起来并传送到跨模态转换器,学习两种模态如何对应并生成 N 个未来的运动序列。然后利用这些序列来自我监督模型的训练,端到端,三个变压器都是一起学习的。他们在测试时在自回归框架中使用此模型,并将预期运动作为下一代阶段的输入。因此,FACT 模型可以生成逐帧的远程舞蹈动作。

为了让 AI 生成的舞蹈生动且和音乐风格保持一致,FACT 模型设计主要是以下三个关键设计点:

  • 由于内部 token 可以访问所有输入,因此所有 transformer 都使用全注意mask,这比传统的因果模型更具表现力。

  • 他们不是只预测下一个动作,而是训练模型来预测当前输入之外的 N 个后续动作。这有助于模型关注上下文,避免模型在经过几个生成步骤后出现运动停滞或发散。

  • 此外,在训练过程他们还使用一个 12 层深的跨模态transformer 模块来融合两个embedding(运动和音频)。研究人员表示,这对于训练模型倾听分辨音乐至关重要。

FACT 和三种 SOTA 对比结果

研究人员根据三个指标评估模型的性能:

  • 动作质量:为了确定运动质量,他们计算了 Frechet 起始距离 (FID),即 AIST++ 测试集的真实舞蹈运动序列与 40 个模型生成的运动序列之间的距离,每个序列具有 1200 帧(20 秒)。

  • 动作多样性:他们计算了 AIST++ 测试集上 40 个创建的运动的特征空间中的平均欧式距离。分别用几何特征空间Distg和动力学特征空间k来检验模型生成各种舞蹈动作的能力。

  • 动作与音乐的相关性:他们提出了一种称为 Beat Alignment Score 的新指标,用于评估输入音乐(音乐节拍)和输出 3D 运动(运动节拍)之间的关联,因为不存在设计良好的指标 (BeatAlign)。

他们将 FACT 和三种 SOTA 模型的对比结果:

图片

结果表明,与之前的方法(如 DanceNet 和 Li 等人)相比,使用 FACT 模型生成的 3D 舞蹈更逼真,并且与输入音乐的关联性更好。

图片

对于此项研究,你怎么看呢?

你更喜欢哪个舞种呢?

Paper: 

https://arxiv.org/abs/2101.08779

Project: 

https://google.github.io/aichoreographer/

GitHub: 

https://github.com/google-research/mint

Dataset: 

https://google.github.io/aistplusplus_dataset/

Model: 

https://github.com/google-research/mint

Source: 

https://ai.googleblog.com/2021/09/music-conditioned-3d-dance-generation.html

参考链接:

https://www.marktechpost.com/2021/09/15/google-ai-introduces-full-attention-cross-modal-transformer-fact-model-and-a-new-3d-dance-dataset-aist/

本文由AI科技大本营翻译,转载请注明出处。

好的,根据您的要求,我来为您回答这个问题。 首先,我们需要使用 Python 的 sqlite3 模块来创建一个名为 commoditty 的数据库,并在其中创建一个名为 info 的表,包含 num、cname、brand、price 和 spokesman 五个字段,其中 num 字段设为主键。 以下是创建数据库和表并插入 5 条记录的代码: ```python import sqlite3 # 创建数据库和表 conn = sqlite3.connect('commoditty.db') c = conn.cursor() c.execute('''CREATE TABLE info (num INT PRIMARY KEY, cname TEXT, brand TEXT, price REAL, spokesman TEXT)''') # 插入 5 条记录 c.execute("INSERT INTO info VALUES (1, '手机', '华为', 3999, '李易峰')") c.execute("INSERT INTO info VALUES (2, '电视', '小米', 2999, '吴京')") c.execute("INSERT INTO info VALUES (3, '冰箱', '海尔', 1999, '李宇春')") c.execute("INSERT INTO info VALUES (4, '洗衣机', '格力', 2999, '周杰伦')") c.execute("INSERT INTO info VALUES (5, '空调', '美的', 3999, '张艺兴')") # 将最后一条记录的 spokesman 字段设置为你的姓名 c.execute("UPDATE info SET spokesman='[你的姓名]' WHERE num=5") # 提交更改并关闭数据库连接 conn.commit() conn.close() ``` 接下来,我们来完成查询和删除操作。 查询操作,根据题目的要求,我们需要查询 info 表中 cname 字段为“冰箱”并且 price 大于 2000 的所有记录,并输出相关记录信息。以下是相应的代码: ```python import sqlite3 # 连接数据库 conn = sqlite3.connect('commoditty.db') c = conn.cursor() # 查询操作 c.execute("SELECT * FROM info WHERE cname='冰箱' AND price>2000") result = c.fetchall() if len(result) == 0: print("没有找到符合条件的记录") else: print("符合条件的记录信息如下:") for row in result: print(row) # 关闭数据库连接 conn.close() ``` 删除操作,根据题目的要求,我们需要删除 info 表中 price 字段值大于 5000 的所有记录,并显示出删除的记录数量。以下是相应的代码: ```python import sqlite3 # 连接数据库 conn = sqlite3.connect('commoditty.db') c = conn.cursor() # 删除操作 c.execute("DELETE FROM info WHERE price>5000") delete_count = c.rowcount if delete_count == 0: print("没有符合条件的记录被删除") else: print(f"共删除了 {delete_count} 条记录") # 提交更改并关闭数据库连接 conn.commit() conn.close() ``` 综上所述,以上就是完整的代码,您可以根据需要进行修改和运行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值