我正在开展一个项目,需要创建一个神经网络模型来根据音乐生成舞蹈动作。我努力实现与此视频类似的结果:https://youtu.be/FrA7f5F9TsI
运动文件(.vmd 或 MMD 格式)包含有关身体(骨骼)弯曲的数据。每个骨骼在空间中有3个旋转值(x,y,z)。一个MMD文件一秒包含30帧,每一帧记录所有骰子的值
为了减少数据量,我采取了以下步骤:
- 将音频增加到一整秒 (159.8 -> 160.0)。这样,当去除粉笔频谱图时,步骤在一秒钟内就可以得到清晰的数据。 MMD中也一样。通过在末尾设置空值来扩展
- 将 MMD 骨骼的数量从 100 块减少到 25 块,留下那些产生 90% 运动的骨骼
- 将帧速率从 30 降低至 10。
- 我只使用一个字符
- 这就是所有限制之后的样子

- 声音的。我使用范围从 0 到 5000 Hz 的有限粉笔频谱图。参数:n_mels = 200,n_fft = 4096,hop_length = 735000(每1秒3步)(长度160秒= 480步)

为神经网络生成数据:
为了生成数据,我将训练文件的所有迭代划分为几秒,以便它们适合内存并可以在显卡上同时处理 (4070)
频谱图标准化从 0 到 1。MMD 标准化从 -1 到 1(根据其特征进行调整)
我可以在输入中输入粉笔频谱图的任何部分(例如,过去 2 秒、当前 1 秒和未来 5 秒)。我还可以输入过去几秒的MMD(例如0或3)和任何其他信息(将过去的MMD添加到输入的想法是这样在生成新迭代时,它有一个连接与过去的结果,所以是密不可分的)
在输出中,我输入当前处理的第二个 MMD。这就是我想要得到的
我尝试过LSTM和Attention等模型的各种组合,但模型总是无法学习。可以找到我训练的最新设置和数据。参数 - 1 秒之前的频谱图,1 当前的频谱图;前 1 秒 mmd。在输出中,1 秒是当前秒。 MMD 和音频源 - 如视频中所示
我拥有所有必要的数据,但我无法让模型发挥作用。对于改进模型或学习过程的任何想法和建议,我将不胜感激


您的目标:
问题:
我怎么理解这个问题
根据您的情况,我可以假设您可能根本没有足够的数据来训练召回架构。如果您使用任何自定义架构,最好将其替换为预训练网络的选项,以便您有机会重新训练网络而不是训练它。
一般来说,如果您提供可用于评估网络是否训练过度或训练不足的训练图,则很难评估学习问题的情况。
同样,LSTM 和 GRU 旨在预测数据序列(或根据手头的任务对它们进行分类)。就您的目的而言,生成任务(而不是预测任务)是清晰可见的。
抒情题外话
如果您考虑一下广受好评的图像生成器,例如 Stable Diffusion 或新推出的 SORA(视频生成器),它们很大程度上基于 Unet 方法(久经考验的架构,赢得了 Kaggle 上的医学图像分割竞赛,并开始获得认可)流行度)是基于这些发电机的主要运行原理。图像使用特征(视觉块)进行编码,然后将其解码回图像。因此,它们唯一的不同之处在于隐藏空间发生的情况,即学习过程中的这些视觉斑块。
生成器分为两个组件,其中一个组件进行生成,第二个组件检查数据与实际数据(训练集)的比较情况。第二部分通常是标准编码器分类器。由于误差的减少(通常的损失,如交叉熵),生成器每次迭代后生成的噪声开始越来越类似于我们的图像。
在复杂的架构(稳定扩散)中,存在用于生成的文本提示,附加的编码文本(NLP)被混合到隐藏的噪声空间中。或者他们使用其他技术,例如注意力机制,不生成纯粹的噪声,而是向训练图像添加噪声(扩散),并通过训练网络来清除这种噪声(类似于自动编码器方法)。
当然,GAN 不仅可以用于图像环境,还可以用于任何数值数据(这就是神经网络的美妙之处)。
我提供什么
尽管如此,对于这种情况,从生成坐标角度开始使用 GAN 架构是合适的,这些坐标将被转换为方便您使用的格式 (vmd MMD)。
也就是说,您使用生成器生成噪声张量。然后使用卷积层 (CNN) 对噪声进行编码,从而获得模型(女孩)的隐藏运动空间。在此过程中,您对粉笔频谱图进行编码,从中提取补丁,在训练过程中将其与噪声混合,因此您需要考虑音频成分(一些与节奏相关的符号,这会影响您的运动类型)然后,您使用编码器分类器的第二部分评估生成的数据是否符合您作为示例准备的舞蹈(带有运动坐标的相同 mvd 文件)。您也不必生成零噪声,而是获取训练坐标并为其添加噪声。
无论如何,无论你做什么来解决这样一个具体的问题,你都将需要更大的数据量(现在我的意思不是拉伸你的数据,而是增加多样性,即更多类型的舞蹈、音频伴奏) ),因为所有这些方法都非常耗电。查看 AIST++ 数据集