学生休息室

分享技术和现实生活中的例子,学生如何在他们的日常项目中使用MATLAB和Simulink # studentsuccess金宝app

使用机器学习和音频工具箱构建一个实时音频插件

本周的博客文章的2019枚奖”得主音频工程学会MATLAB插件的学生竞争

介绍

我的名字是基督教斯坦梅茨我目前掌握学生大学Pompeu布拉声音和音乐学习计算。我作为一个有经验音频工程师、工作记录、混合,和掌握音乐,以及研究员、建筑新工具对音乐创作者和音频工程师。我的兴趣在信号处理和机器学习的应用对音乐制作领域的问题。这个项目我将分享在这里,flowEQ是我的最新尝试,利用机器学习现有的音频信号处理工具,参量均衡器,更容易使用。

竞争

这个项目是我的条目音频工程学会MATLAB插件的学生竞争。我提出这个工作147位AES公约在纽约市,以及其他来自世界各地的学生可以找到(所有的条目在这里),我的项目被选为金奖。

竞争的目的是使用音频工具箱建立一个实时音频插件,帮助音频工程师实现一些新的东西。音频工具箱是独特的,因为它允许您编写MATLAB代码定义了音频,你想如何处理,然后自动编译它威仕特/非盟插件,可以使用在大多数数字音频工作站(法)。这使得它相当简单的构建插件,然后我们可以更多地关注发展的算法。

flowEQ

的目标flowEQ是提供一个高级的接口,一个传统的五个带参量均衡器,简化了应用场音色处理的过程(即改变录音声音)为新手用户。为了有效利用参数EQ,音频工程师必须有一个亲密的了解增加,中心频率和Q控制,以及如何使用多个乐队串联来实现所需的场音色调整。业余的音频工程师或音乐家,这常常提出了太多的复杂性,flowEQ旨在解决这个问题通过提供一个智能接口针对这些类型的用户。此外,该接口可以向经验丰富的工程师提供一种新的方法搜索多个场音色资料很快也有可能开启新的创造性的效果。

为了达到这个目标,flowEQ使用变分autoencoder分开(β-VAE)为了构造一个均衡器的参数空间的低维表示。通过遍历这个学会了译码器的潜在空间网络,用户可以更快地搜索的配置五个带参量均衡器。这种方法推广使用一个的耳朵来确定适当的均衡器设置在看着转移函数或特定频率控制。

截图

插件演示

这是一个演示的最后插件行动。你可以看到在左边的滑块移动,所示的频率响应均衡器右上角平滑的方式的变化。五乐队(5 biquad过滤器串联)产生一个总体频率的调整,而一旦需要改变13个参数同时实现,现在可以通过调整两个滑块(在二维模式)。在下面几节中我们将进入背后的细节从高水平这是如何工作的,以及它是如何实现的。(听到这听起来像是查看短住插件示范视频。)

细节

数据集

训练任何类型的模型我们需要的数据。对于这个项目我们使用SAFE-DB均衡器数据集用的全功能的集合设置真正的音频工程师们从五个带参量均衡器,随着语义描述符为每个设置。中的每个样本数据集包含一个均衡器的配置(设置13个参数)以及语义描述符(例如温暖,明亮,夏普,等等)。

在我们的配方,使均衡器的实现,参数空间是非常大的(如果我们说每个参数可能需要在20个不同的值,这将给我们~ 4 e15可能的配置,更比细胞的数量人体中)。然后我们做出的假设数据集的样本代表这个参数空间的一部分,最有可能被利用而音频工程师处理音乐信号。然后我们的目标是建立一个模型,一个结构良好的学习,低维这个空间我们可以组织样本。

模型

为此我们使用变分autoencoder。对于一个好的介绍我推荐这个话题YouTube视频从Arxiv的见解通道。学习的autoencoder是一个独特的配方数据分布在一个无监督的方式。这是通过迫使模型重建自己的输入,经过输入通过一个瓶颈(所以模型不能简单地通过输入输出)。变分autoencoder扩展了通用autoencoder配方提供一些不错的特点对我们的用例。我将提供一个简要的概述我们如何使用这个模型来构建插件的核心。

在培训期间,我们的模型学习重建后的13个参数均衡器通过原始输入通过一个低维瓶颈(1、2、或3维)。我们测量输出和输入之间的误差(重建损失),然后更新权重的编码器和译码器来减少这种错误为当前的例子。

虽然这看上去不像是一个有用的任务时,我们发现,如果我们使用译码器部分的模型,将低维向量作为输入,我们可以重建一个广泛的平衡曲线只使用一个非常少量的旋钮(1、2或3取决于潜在的空间的维数)。下图演示了这个操作。这里我们有丢弃的编码器和采样点的二维平面和饲料这些点到解码器。然后解码器试图重建完整的13个参数。这个低维潜在的空间提供了一个简单的方法来搜索整个空间可能的均衡器参数。

译码器操作

译码器操作

为用户提供更大的灵活性和试验潜在空间的复杂性,我们训练模型与不同的潜在空间维度(1、2和3)。在插件,用户可以选择其中,这将改变滑块的数量需要更改为了控制整个均衡器。例如,在一维情况下,用户只需要一个移动滑块来控制均衡器。

我们进一步扩展这个通过引入变分autoencoder分开(β-VAE),这使得一个轻微的损失函数(参见修改详情)。重要的一点是这为我们提供了一个新的hyperparameter,β,修改当我们训练改变什么样的表示模型将学习。因此,我们火车总共12模型,在不同的β值和不同的潜在的空间维度。然后我们提供这些模型的每个插件,用户可以选择中,通过听和评估。

表

现在我们了解高水平的模型我们将简要复习的一些实现细节。编码器和译码器都有一个完全连接1024台和ReLU激活隐藏层。中央瓶颈层,1、2或3隐藏的单位有一个线性激活。最终的输出层的解码器是一个完全连接层与13个单位和乙状结肠激活函数(所有输入规范化在0和1之间)。这是一个很小的模型(约30 k参数),但由于我们可以学习一个强大的非线性映射(更强大的比主成分分析,例如)。一个小模型是好的,我们可以训练它更快,而且推理时间要快得多。提出通过译码器网络只需要大约300μs秒CPU。

网络体系结构

网络体系结构

和训练实现的模型Keras框架,你可以看到所有的代码训练模型的最终权重火车目录的GitHub库。这些模型后来被在MATLAB中实现,这样他们就可以被包含在插件。有关详细信息,请参阅下面的挑战部分对于我们如何实现。

插件

插件可以分为两个主要部分:过滤器和训练有素的解码器。我们实现一个基本的五个带参量均衡器,它是由五个biquad过滤器放置在系列(这反映了建筑的均衡器用于构建原始训练数据)的过程。最低和最高的乐队是搁置过滤器,中心三个乐队过滤器达到顶峰。为更多的细节在看到经典的滤波器实现音频EQ食谱。搁置过滤器有两个控制:增益和截止频率,而峰值过滤器有三个:增益,截止频率,问:这些控件的13个参数均衡器。我们使用这些参数的值和上述滤波器公式计算系数的所有过滤器每当他们然后使用基本的改变过滤器在MATLAB函数将过滤器应用到音频。

现在我们在MATLAB实现译码器,其输出连接到控制的均衡器。当用户移动x, y, z的潜在空间滑动条,这些值通过译码器来生成相应的均衡器参数,和新的过滤器系数计算。主要有两种操作模式:遍历语义

遍历模式允许用户自由调查的潜在空间模型。在这种模式下的三个x, y, z滑块可以用来遍历解码器的潜在空间。每个潜在的矢量解码一组13个参数的值在5波段均衡器。

语义模式允许不同的抽样方法的潜在空间。x, y, z释放滑块,和嵌入,嵌入B使用组合框,插入滑块。训练后,语义标签用于识别相关的集群内的潜在空间。这些集群代表地区的潜在空间,与特定的语义描述符。插入控制允许用户无缝移动两个语义描述符之间的空间。

插件框图

插件框图

上面的框图中概述了到目前为止我们已经提到过的所有元素。最上面部分显示音频信号处理路径的5级联biquad过滤器。中央部分显示译码器,其输出连接到过滤器的参数。在底部,我们看到的控件,用户可以调整插件接口(详细如下所示)。12种不同的训练有素的解码器之间的调优参数选择模型不考虑模式,和参数遍历语义模式显示。在手册模式最初的13个参数显示底部的接口控制均衡器是活跃的,而不是使用译码器。

截图

完整的插件接口

评价

这种性质的评价模型是具有挑战性的,因为我们没有一个客观的衡量一个‘好’潜在的表示。不一定记住,我们的目标是创建一个模型,该模型可以完全重建任何设置的参数,而是有一个很好地结构化潜伏表示,允许用户搜索空间迅速找到他们正在寻找的声音。因此,我们的第一个衡量评价是通过人工检查的多方面的潜在空间。我们将做二维可视化模型,因为这是最好的。

图像

2 d潜在空间集合管

这里显示了频率响应曲线(轴增益-20分贝至20 dB和轴与20 kHz频率从20 Hz)为每个点在二维潜在的空间从2到2 x和y的维度,这给了我们网格的例子。我们这样做对每个二维模型我们训练的β的值。这将让我们看到β的影响以及每个模型的潜在空间的结构。

我们观察到随着β增加,潜在的空间变得越来越正规化,β= 0.020的情况,似乎解码的观点有许多相同的均衡器传递函数,我们不希望这种行为。这是一个可能被视为over-regularization的例子。因此模型与β= 0.001,可能是最好的选择,因为它显示了伟大的多样性,同时保持一个连贯的和光滑的结构。这意味着,当用户搜索整个空间听起来会有些可判断的改变也会改变,不是太突然。简而言之,使用更大的β值力模型结构的空间形状的单元高斯,因此失去一些的表达能力。

最好的方法来评估这些不同的模型是进行用户研究音频工程师们盲目地给予不同的模式和要求实现一个特定的目标。模型中,用户可以找到自己所需的目标最快的将是最好的模型。出于这个原因,我们包括所有12模型的插件,希望我们可以得到用户反馈的模型工作最好的。

挑战

当前挑战之一,实现深度学习模型开发的常用的开源框架(例如Keras)在音频软件(如音频插件或嵌入式软件)是缺乏一个自动化的方法将这些网络转移到C或c++。MATLAB提供了一个自动化的方法来构建和运行Keras模型importKerasNetwork函数的深度学习工具箱。这将加载HDF5模型重量和架构在Keras实施培训后作为一个模型DAGNetwork对象。不幸的是,目前这些对象不支持自动生成通用的c++代码(虽然其他类型的网络体系结构和层深度学金宝app习工具箱可以生成优化的CUDA和C代码运行在gpu,胳膊,或英特尔核心)。对于我们的音频插件我们最终需要独立于目标c++代码运行在不同的CPU跨操作系统的目标。

为了解决这个问题,我们自己在纯MATLAB代码实现网络。这是相当简单的,因为我们的网络是相对较小的。我们第一次转换。h5文件保存的重量从Keras。文件,然后加载这些权重矩阵(W1W2译码器隐藏层和输出层)。预测函数如下所示,由几个矩阵运算与潜变量的输入z和层权重,再加上激活功能。看到整个看到的实现模型译码器我们建立了。

函数y_hat =预测(obj, z)%潜伏向量z与适当的维度%的输出是一个13 x1向量归一化(0,1)均衡器参数。z1 = (z * obj.W1) + obj.b1;a1 = obj.ReLU (z1);z2 = (a1 * obj.W2) + obj.b2;a2 = obj.sigmoid (z2);y_hat = a2;结束

顺便说一句,我还遇到一个工具由MathWorks开发内部,能够自动生成低级MATLAB代码类似于上面的代码片段从高层深网络对象。对于这个项目,这将进一步简化了从训练Keras模型过渡到插件实现。我知道目前没有发布任何官方MATLAB工具附加产品,但是您可能想接触MathWorks如果你感兴趣。

实现深度学习模型实时音频插件仍相对未开发的领域。我们仍没有明确的方法实现这一以最小的摩擦,不管使用什么框架。实时音频应用程序也严格运行时限制,这意味着我们的深度模型必须足够快,以免导致音频流中断,或者一个糟糕的用户体验与声音延迟用户更改参数。

未来的发展方向

flowEQ仍然是一个概念验证,和当前实现MATLAB框架比较有限的。以下是一些未来的发展进一步提高插件和扩展其功能。

  • Meta-parameters链接手动均衡器的潜在空间均衡器控制
  • 自适应潜在空间(即条件VAE)条件在音频内容
  • 找到与语义描述符/收集更多数据,扩大潜在空间的多样性
  • 进一步hyperparameter优化确定培训时间,β,网络体系结构等。

资源

如果你发现这个项目有趣的跟我在Twitter上的@csteinmetz1最新更新我的项目,也检验其他项目我从事与MATLAB +深度学习+音频,NeuralReverberator,综合使用卷积autoencoder新的混响效果。

|

评论

留下你的评论,请点击在这里MathWorks账户登录或创建一个新的。