FineDance:细粒度编舞3D数据集 学习笔记

目录

关于数据集

创新点

数据处理:

motion可视化代码


FineDance:细粒度编舞数据集用于 3D 全身舞蹈生成

关于数据集

目前,最流行的 3D 编舞数据集是 AIST++ [24],它提供 5 小时的舞蹈,但没有手部动作。AIST++通过多视角视频进行重构。因此,由于重建误差,生成的3D舞蹈动作与真实动作之间不可避免地存在偏差

FineDance 是最大的音乐-舞蹈配对数据集,拥有最多的舞蹈流派

创新点

提出一个 Genre&Coherent aware 检索模块。此外,我们提出了一种新的指标,称为流派匹配分数

最近的方法采用了生成网络,如VAE[37]、GAN[33]、归一化流网络[44]、扩散[42]。但他们只关注身体部位,而忽略了手部动作,导致不自然或单调的手部动作,即使用注释良好的身体和手部标签进行训练。此外,基于生成的方法受到网络长期建模能力的限制,使其难以生成长期的舞蹈序列。

因此,我们提出了FineNet,一个两阶段的生成合成网络,解决了以前舞蹈生成方法的局限性。在第一阶段,我们提出了一个基于扩散的全身舞蹈生成网络(FDGN)。FDGN的关键是设计两个专家网络,专门用于生成身体和手部动作,并使用Refine Net将它们协调组装。在第二阶段,我们提出了一个类型与连贯感知检索模块(GCRM)这确保了舞蹈片段的连贯性

长时:生成长期的新运动具有挑战性,因为神经网络往往会随着时间的推移而累积错误。为了解决这些问题,我们提出了FineNet,它包括一个基于扩散的全身多样化舞蹈生成网络(FDGN)和一个流派和连贯感知检索模块(GCRM)。FDGN专注于创造具有表现力的动作的细节舞蹈,而GCRM则考虑舞蹈的整体编排。FineNet巧妙地结合了生成和合成方法,使它们互补,就像人类编舞的过程一样。此外,FineNet允许通过在初始时间步选择不同的舞蹈片段来生成多个不同的舞蹈片段。此功能为用户提供了广泛的创意可能性。

我们方法的整体框架如图3所示。首先,将输入音乐 X 拆分为 4 秒的片段 {X},不重叠,N 是给定音乐的片段数。对于每个 X,我们使用 Librosa 工具箱 [30] 提取时间特征 ̄X∈ R 和 mel-spectrogram 图像 eX∈ R,其中 T 是剪辑的时间长度,Cis 通道维度。W 和 H 分别是图像的宽度和高度,3 表示 RGB 通道数。FineNet在每个时间步生成并检索最佳舞蹈片段,

在 FDGN 中,我们构建了 3 个 MLP 层来编码音乐和身体特征。我们使用变压器层作为身体/手专家网络的骨干。细化网络由一维卷积层和可学习的权重参数组成。总纪元、学习率和批处理大小设置为 200、2e、2048。在 GCRM 中,α、β分别设置为 1.0 和 0.5。评估指标。(1)FID评分。Fr'echet成立

数据处理:

标签motion数据集,312维,转成smplx格式数据集,319维。

SMPL学习笔记_smplx 如何描述人体-CSDN博客

motion可视化代码

 

import argparse
import os
from pathlib import Path
import smplx, pickle
import torch
import sysfrom pytorch3d.transforms import rotation_6d_to_matrix, matrix_to_quaternion
from tqdm import tqdm
import glob
import numpy as npsys.path.append(os.getcwd()) 
from dataset.quaternion import ax_to_6v, ax_from_6v
from dataset.preprocess import Normalizer, vectorize_manyimport numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from matplotlib.animation import FuncAnimationconnections = [(0, 1),  # 头部到颈部(1, 2), (2, 3), (3, 4),  # 右臂(1, 5), (5, 6), (6, 7),  # 左臂(1, 8),  # 颈部到身体中心(8, 9), (9, 10), (10, 11),  # 右腿(8, 12), (12, 13), (13, 14),  # 左腿(11, 15),  # 右脚到右脚尖(14, 16),  # 左脚到左脚尖
]def motion_feats_extract(inputs_dir, outputs_dir):device = "cuda:0"print("extracting")raw_fps = 30data_fps = 30data_fps <= raw_fpsos.makedirs(outputs_dir,exist_ok=True)# All motion is retargeted to this standard model.motions = sorted(glob.glob(os.path.join(inputs_dir, "*.npy")))for motion in tqdm(motions):name = os.path.splitext(os.path.basename(motion))[0].split(".")[0]print("name is", name)data = np.load(motion, allow_pickle=True)print(data.shape)pos = data[:,:3]   # length, cq = data[:,3:]root_pos = torch.Tensor(pos).to(device) # T, 3length = root_pos.shape[0]local_q_rot6d = torch.Tensor(q).to(device)    # T, 312print("local_q_rot6d", local_q_rot6d.shape)local_q = local_q_rot6d.reshape(length, 52, 6).clone()mat = rotation_6d_to_matrix(local_q)quaternions=matrix_to_quaternion(mat)norms = torch.norm(quaternions[..., 1:], p=2, dim=-1, keepdim=True)half_angles = torch.atan2(norms, quaternions[..., :1])angles = 2 * half_angleseps = 1e-6small_angles = angles.abs() < epssin_half_angles_over_angles = torch.empty_like(angles)sin_half_angles_over_angles[~small_angles] = (torch.sin(half_angles[~small_angles]) / angles[~small_angles])sin_half_angles_over_angles[small_angles] = (0.5 - (angles[small_angles] * angles[small_angles]) / 48)# 这里返回规范化的旋转轴向量rotation_axis_normalized = quaternions[..., 1:] / sin_half_angles_over_angles# norms = torch.norm(quaternions[..., 1:], p=2, dim=-1, keepdim=True)# half_angles = torch.atan2(norms, quaternions[..., :1])# angles = 2 * half_angles# eps = 1e-6# small_angles = angles.abs() < eps# sin_half_angles_over_angles = torch.empty_like(angles)# sin_half_angles_over_angles[~small_angles] = (torch.sin(half_angles[~small_angles]) / angles[~small_angles])# # for x small, sin(x/2) is about x/2 - (x/2)^3/6# # so sin(x/2)/x is about 1/2 - (x*x)/48# sin_half_angles_over_angles[small_angles] = (0.5 - (angles[small_angles] * angles[small_angles]) / 48)# local_q= quaternions[..., 1:] / sin_half_angles_over_angles# local_q = ax_from_6v(local_q).view(length, 156)           # T, 156rotation_axis_normalized=rotation_axis_normalized.cpu().numpy()*10def update_pose(frame, pose,lines):pose=rotation_axis_normalized[frame]# pose[:, 1] = pose[:, 1] + np.sin(frame / 10.0) * 0.02  # 左右摆动# 更新线段以连接关键点for line, (i, j) in zip(lines, connections):line.set_data([pose[i, 0], pose[j, 0]], [pose[i, 1], pose[j, 1]])line.set_3d_properties([pose[i, 2], pose[j, 2]])return lines# 创建动画fig = plt.figure()ax = fig.add_subplot(111, projection='3d')# 设置坐标轴的显示范围ax.set_xlim((0, 10))ax.set_ylim((-6, 6))ax.set_zlim((-5, 20))# pose = np.asarray(init_poses).astype(np.float32)pose = rotation_axis_normalized[0]lines = [ax.plot([pose[s, 0], pose[e, 0]], [pose[s, 1], pose[e, 1]], [pose[s, 2], pose[e, 2]])[0] for s, e in connections]ani = FuncAnimation(fig, update_pose, frames=np.arange(0, rotation_axis_normalized.shape[0]), fargs=(pose,lines), interval=20)plt.show()if __name__ == "__main__":in_dir=r"E:\迅雷下载\data\finedance\motion"out_dir=r"E:\迅雷下载\data\finedance\/motion_fea319"motion_feats_extract(in_dir, out_dir)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/721402.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vulhub中Wordpress 4.6 任意命令执行漏洞复现

由于Mysql初始化需要一段时间&#xff0c;所以请等待。成功运行后&#xff0c;访问http://your-ip:8080/打开站点&#xff0c;初始化管理员用户名和密码后即可使用&#xff08;数据库等已经配置好&#xff0c;且不会自动更新&#xff09;。 发送如下数据包&#xff0c;可见/tmp…

计网面试题整理上

1. 计算机网络的各层协议及作用&#xff1f; 计算机网络体系可以大致分为一下三种&#xff0c;OSI七层模型、TCP/IP四层模型和五层模型。 OSI七层模型&#xff1a;大而全&#xff0c;但是比较复杂、而且是先有了理论模型&#xff0c;没有实际应用。TCP/IP四层模型&#xff1a…

【三维重建】相移法+格雷码

本篇文章介绍一种稠密点云的获取方式——条纹结构光三维重建算法。 在学习此算法前&#xff0c;我们需要对基于视觉的三维重建算法有一定了解。 需要了解什么是相机模型、相机标定以及三角化的相关知识。 【三维重建】摄像机几何-CSDN博客 【三维重建】摄像机标定&#xff…

PHPInfo()信息泄漏原理以及修复方法

漏洞名称&#xff1a;PHPInfo信息泄漏、phpinfo()函数信息泄漏 漏洞描述&#xff1a; phpinfo()函数返回的信息中包含了服务器的配置信息&#xff0c;包括&#xff1a; 1&#xff09;PHP编译选项以及文件扩展名的相关信息&#xff1b; 2&#xff09;php的版本信息 3&#…

微信小程序-2

数据绑定 index.js Page({data: {info: hello world,randomNumber: Math.random() * 10,imgSrc:http://www.itheima.com/images/logo.png} })index.wxml <view>{{ info }}</view><view>{{ randomNumber > 5 ? 随机数大于等于5 : 随机数小于5 }}</v…

【c++】引用的本质

引用的本质&#xff1a;引用实际上是给变量“起别名”&#xff0c;而其底层本质上是一个常量指针 int x 0; int& y x;在上述代码中&#xff0c;当执行第二句时&#xff0c;底层在做如下的转换 int* const y &x;相当于y是一个int型的常量指针&#xff0c;指向x的地…

低密度奇偶校验码LDPC(七)——SPA和积译码算法的简化

往期博文 低密度奇偶校验码LDPC&#xff08;一&#xff09;——概述_什么是gallager构造-CSDN博客 低密度奇偶校验码LDPC&#xff08;二&#xff09;——LDPC编码方法-CSDN博客 低密度奇偶校验码LDPC&#xff08;三&#xff09;——QC-LDPC码概述-CSDN博客 低密度奇偶校验码…

神经网络推理优化方法总结

&#x1f380;个人主页&#xff1a; https://zhangxiaoshu.blog.csdn.net &#x1f4e2;欢迎大家&#xff1a;关注&#x1f50d;点赞&#x1f44d;评论&#x1f4dd;收藏⭐️&#xff0c;如有错误敬请指正! &#x1f495;未来很长&#xff0c;值得我们全力奔赴更美好的生活&…

Jenkins 的安装(详细教程)

文章目录 一、简介二、安装前准备三、windows 安装与启动1. 方式一2. 方式二3. 方式三 四、创建管理员用户五、常用设置1. 配置镜像地址2. 更改工作目录3. 开启可注册用户4. 全局变量配置 一、简介 官网&#xff1a;https://www.jenkins.io 中文文档&#xff1a;https://www.j…

【MGR】MySQL Group Replication快速开始

目录 17.2 Getting Started 17.2.1 Deploying Group Replication in Single-Primary Mode 17.2.1.1 Deploying Instances for Group Replication 17.2.1.2 Configuring an Instance for Group Replication Storage Engines Replication Framework Group Replication Sett…

分享一个AI工程师从入门到精通学习路径

学习AI工程师的路径可以分为以下几个阶段&#xff1a; 学习基础知识&#xff1a;首先&#xff0c;你需要掌握数学、统计学和线性代数的基本概念。这些基础知识是理解AI算法和模型的基础。 学习编程&#xff1a;你需要掌握至少一门编程语言&#xff0c;如Python、Java或C。这些…

Java基础概念 1-6注释关键字字面量变量-基本用法变量-使用方式和注意事项变量练习-计算公交车的人数

Java基础概念 1-注释 单行注释 // 多行注释 /* */ 文档注释 /** */ --暂时不用 例: public class HelloWorld{ //main方法,表示程序的主入口.public static void main (String[] args){/*输出语句(打印语句)会把小括号内的内容进行输出打印.*/System.out.…

如何理解MySQL的计算层做的很差,但innodb则非常优秀

在MySQL中&#xff0c;计算层通常指的是查询优化器和执行引擎&#xff0c;负责解析查询语句、生成执行计划&#xff0c;并执行实际的查询操作。而InnoDB则是MySQL的存储引擎之一&#xff0c;负责管理数据的存储和检索。 理解MySQL计算层较差但InnoDB优秀的情况可能涉及到以下几…

Ethersacn的交易数据是什么样的(2)

分析 Raw Transanction RLP&#xff08;Recursive Length Prefix&#xff09;是一种以太坊中用于序列化数据的编码方式。它被用于将各种数据结构转换为二进制格式&#xff0c;以便在以太坊中传输和存储。RLP 是一种递归的编码方式&#xff0c;允许对复杂的数据结构进行编码。所…

鸿蒙实战应用开发:【拨打电话】功能

概述 本示例通过输入电话&#xff0c;进行电话拨打&#xff0c;及电话相关信息的显示。 样例展示 涉及OpenHarmony技术特性 网络通信 基础信息 拨打电话 介绍 本示例使用call相关接口实现了拨打电话并显示电话相关信息的功能 效果预览 使用说明 1.输入电话号码后&#…

EIP-1559

EIP EIP是以太坊改进提案&#xff08;Ethereum Improvement Proposal&#xff09;的缩写。它是一种标准化的提案制度&#xff0c;用于描述和讨论对以太坊区块链网络的改进和升级。EIP的目的是提供一个开放的、透明的过程&#xff0c;让社区成员、开发者和其他利益相关者能够共同…

paypal绑卡教程

绑定信用卡到PayPal账户的流程可能会有轻微变化&#xff0c;具体步骤可能根据您所在的地区和PayPal的最新政策而有所不同。以下是一般的流程&#xff1a; 登录PayPal账户&#xff1a; 打开PayPal的官方网站或应用程序&#xff0c;使用您的账户登录凭据登录。 导航至钱包&#…

简单的进制数的转换

简单的进制数的转换 二进制转十进制 1000001 0 ( 2 ) ⇒ 13 0 ( 10 ) 10000010_{(2)}\rArr130_{(10)} 10000010(2)​⇒130(10)​ 二进制转八进制 010 ‾ 000 ‾ 010 ‾ ( 2 ) ⇒ 20 2 ( 8 ) \underline{010}\underline{000}\underline{010}_{(2)}\rArr202_{(8)} 010​000​010…

Kafka面经

1.Kafka如何保证消息不丢失 生产者&#xff1a; 1.Producer 默认是异步发送消息&#xff0c;这种情况下要确保消息发送成功&#xff0c;有两个方法 a. 把异步发送改成同步发送&#xff0c;这样 producer 就能实时知道消息发送的结果。 b. 添加异步回调函数来监听消息发送的结…

redis02 安装

官网下载 传送门https://redis.io/download/#redis-downloads 安装Redis mac m1安装 下载你需要版本的软件包放到指定的目录下进行解压 cd 到解压好的redis目录 运行下面的命令进行编译测试 sudo make test 中途可能会提示你安装make工具&#xff0c;按提示安装即可&…