TensorFlow Signal Processing

  • Problem Overview
    该项目的目标是评估使用深度学习进行音频效果仿真的有效性。对于音频,有两种主要的工具分类:生成器和效果。生成器是接收非音频输入(物理或midi)并从中创建音频的东西。这将包括乐器,合成器,鼓 - 基本上任何真正突出传统音乐的东西。另一个类别,即效果,是将音频作为输入并将其转换为其他音频输出的元素。这可以是从简单的滤波器到更复杂的效果,如失真或混响;即使通过电话呼叫房间或质量下降也是一种效果。这个项目背后的想法是看我们是否可以使用深度学习训练网络来模拟其中一种效果。
    音频是机器学习的有趣媒介。与图像数据一样,可以定量和定性地判断输出。最重要的是,音频本身具有复杂的结构。波的附加属性可能会导致一些无法预料的结果。最重要的是,数字音频数据固有地被卷积:它被存储为从音频信号本身采样的时间序列的点。只要音频准备好输出,这些点就会快速傅里叶变换回信号。因此,许多受效果影响的信息隐藏在此信号处理问题背后。*
    过去,在机器学习中进行信号处理涉及对输入进行一些手动分解,以抽象出信号处理[1]。通常,音频将被渲染成频谱图的图像,其显示音频的频率分布。虽然这适用于分类问题,但似乎没有必要像本文所关注的端到端问题。为此,我们需要进行实际的信号处理,以便检测重要的特征。

*注意 - 仍然可以进行很多效果,因为转换是作为未转换波的应用程序完成的,但通常情况是在频率空间中完成后效果要容易得多。

  • Sample Types
    之前我曾提到音频是一个概念上复杂的结构。 这是因为音频数据是音频幅度的时间序列数据,然而几乎所有我们认为被“存储”为声音的信息都存储在声音的频率空间中。 通过使用傅里叶变换提取两者之间的关系。 下面是一个例子,左边的时间序列数据会产生右边的频率图表。

    但是,这过于简单化了。 实际上,频率图表正在为数据添加维度,因此在2D空间中表示它意味着上面的频率图仅对音频的小时间横截面有效。 声音的实际频率分布看起来如此。

    事实上,这是大多数机器学习用于训练音频的内容,除了在幅度维度上具有高度之外,他们使用图像的颜色通道和颜色强度来表示它。 这种表示称为谱图。 频谱图实际上存储3维数据,频率显示在垂直方向上,幅度显示为颜色强度,时间沿水平轴显示。 您可以在下面看到一个示例。

这就是为什么这个项目的目标是让网络自己学习频率 - 幅度关系,这样我们就可以跳过手动提取重要特征的步骤。
数字音频数据被存储为来自幅度与时间图的采样点,这是预期的,因为它是直接形式 - 具有傅里叶变换 - 输出需要。 一个基本的例子如下所示。

此项目中使用的音频具有统一的采样率,这使我们可以更轻松地批量处理。

  • The Network
    计划教网络如何解释解决2个主要问题所需的音频数据:首先,它需要能够查看音频并从中提取频率数据,其次需要能够“撤消”这个操作使数据可以转换回音频。
    就第一个问题而言,我们可以将时间作为音频数据的维度添加,类似于上面的频谱图概念。在该模型中,时间通过作为其中一个轴来表示为图像的一部分。以这种方式,二维瞬时频率图变为三维图像。对于我们的数据,我们有一维数据:幅度。通过将时间作为维度添加到此数据中,通过在连续的时间块中对其进行批处理,我们可以尝试将网络暴露给数据中的模式。或者至少这是个主意。
    第二个主要问题涉及使系统端到端。我们希望能够获取网络的输出,将其写入文件,然后播放,而无需采取任何额外步骤。对于线性或非线性网络,这不是一个真正的问题。在任何时候,他们本身都应该能够将结果转换为可读格式。然而,对于在网络中引入额外深度的卷积网络,必须具有卷积转置层。这种类型的层有时被称为“反卷积”层,但重要的是要注意这实际上是用词不当,因为反卷积是一种用于计算机视觉的完全不同的过程。无论术语如何,卷积转置层都允许您获取已经卷积的图层,并尝试将数据转换回更有意义的数据。在我们的例子中,它将输出更改回幅度图。卷积变换层的一个很酷的事情是我们可以从变换层中的原始卷积层重用完全相同的滤波器变量。这显着降低了网络的训练难度。考虑到这一点,我们将继续进行主要设计。

*Layer Design
直观地说,线性网络很可能无法正确地模拟这个问题。数据可能太复杂,线性模型无法解释它。但是,我仍然希望形成一个基线,以了解我们通过迁移到更高级的网络将获得什么样的好处。
首先,我使用了一个标准的完全连接的线性回归神经网络,改变隐藏层的深度,找到一些似乎合理训练的东西。这个网络的目标是试图过度训练训练数据,以表明它至少可以被强制逼迫。通过我使用的标准训练集,这些网络需要超过4,000个时期来训练。
移过基本网络,似乎有点直观,卷积网络可以很好地代表这个问题,因为它能够尝试在数据的各个部分上训练过滤器。如果这些滤波器足够大以检测完全振荡,则它可能能够提取一些相关的频率数据。如前所述,每当我们使用卷积层时,我们将不得不在输出上使用卷积转置层。卷积变换层的一个很酷的事情是我们可以从变换层中的原始卷积层重用完全相同的滤波器变量,这将显着降低网络的训练难度。
因此,目前我们已经建立了一个系统,该系统应该能够以一种可能更加真实的数据频率空间的方式查看数据。现在,我们需要做的就是完成这个基本设置,就是在卷积和卷积转置层之间放置一个完全连接的层

  • Sampling and Batching
    查看数据本身,wav文件是立体声16位PCM整数文件。首先,我将数据转换为32位浮点wav文件,并将音频标准化以符合该标准。我将每个文件拆分为单声道音轨,因为它允许我们更快地尝试不同的网络设计。但是,有些滤波器在立体声声道中有不同的效果,因此我们现在将失去训练它们的能力。
    我们正在训练的音频是一组正弦波,方波和锯波,它们在一系列频率上变化。虽然这些波是非常基本的,但这个想法是这些更简单的音频样本可能有助于训练网络更容易理解频率分析。验证数据与训练数据集分开,但测试数据完全不同。虽然测试数据使用相同的过滤器,但它正在测试网络在遇到更困难的问题时的表现:钢琴。这个想法是,它具有更复杂的波形,因此它将更好地测试网络对问题的理解程度。

因为它是时间序列数据,所以批处理过程有点棘手。 虽然数据需要保持在连续的块中,但我们仍然可以提取它的较小部分以进行独立训练,以确保网络统一训练。 为此,我实现了一个批处理系统,该系统在离散时间段内对音频进行滚动窗口选择,然后我为每个时期对这些批次进行随机播放。 如果我们将每个窗口的偏移设置为旁边的偏移量小于每个窗口的长度,那么我们可以在窗口中获得一些重叠以进一步增加可用批次的数量。

旁注 - 起初看起来我们可能希望以足够小的间隔获取数据的一部分,以便仅允许数据中的少数振荡。 这可以确保网络能够了解瞬时频率数据。 但实际上这不起作用。 问题在于振荡的长度直接是音调的结果,因此如果音调改变,则窗口可能会切断提取数据所需的部分。 这是我们必须依靠卷积滤波器为我们切片数据的另一个原因。

机器学习之------信号处理(入门原理)相关推荐

  1. 机器学习的前期入门汇总

    机器学习机器学习是近20多年兴起的一门多领域交叉学科,涉及概率论.统计学.逼近论.凸分析.算法复杂度理论等多门学科.机器学习理论主要是设计和分析一些让计算机可以自动"学习"的算法. ...

  2. 信号处理深度学习机器学习_机器学习和信号处理如何融合?

    信号处理深度学习机器学习 As a design engineer, I am increasingly exposed to more complex engineering challenges ...

  3. Python 基础 之 jupyter notebook 中机器学习的简单入门书写数字识别 demo 操作学习

    Python 基础 之 jupyter notebook 中机器学习的简单入门书写数字识别 demo 操作学习 目录 Python 基础 之 jupyter notebook 中机器学习的简单入门书写 ...

  4. 机器学习极简入门课程

    开篇词 | 入门机器学习,已迫在眉睫 大家好,我是李烨.现就职于微软(Microsoft),曾在易安信(EMC)和太阳微系统(Sun Microsystems)任软件工程师.先后参与过聊天机器人.大数 ...

  5. 机器学习——Google 快速入门课程(综合版)

    前言 本文参考 Google 谷歌官网机器学习的快速入门课程,整体课程比较好理解,供大家学习参考:文章也会结合自己的理解进行优化.看到官网的消息2021/7之后就不提供中文版的机器学习快速入门课程了, ...

  6. 机器学习 鸢尾花分类的原理和实现(一)

    机器学习 鸢尾花分类的原理和实现(一) 前言: 鸢尾花数据集是机器学习中的经典小规模数据集.通过查阅资料和视频进行学习,将整个实验的学习心得和实验过程分享,希望对喜爱机器学习并入门的新手提供帮助,同时 ...

  7. 机器学习该怎么入门?(绝对干货)

    知乎上有一个关于"机器学习该怎么入门"的火热问题,在从事机器学习研究两年之际,分享一下我的看法.绝对干货哈! 本文的宗旨是:1.指出一些自学误区 2.推荐近年精品资料 3.分享切实 ...

  8. 机器学习该怎么入门?

    阿猫Knight ,Perfekt 张逸萌 等 432 人赞同 我也谈谈自己的经验. 机器学习说简单就简单,说难就难,但如果一个人不够聪明的话,他大概很难知道机器学习哪里难.基本上要学习机器学习,先修 ...

  9. 大数据面试通关手册 | Kylin入门/原理/调优/OLAP解决方案和行业典型应用

    Kylin入门/原理/调优/OLAP解决方案和行业典型应用一网打尽. 一:背景历史和使命 背景和历史 现今,大数据行业发展得如火如荼,新技术层出不穷,整个生态欣欣向荣.作为大数据领域最重要的技术的 A ...

  10. 为 AI 初学者打造的《机器学习极简入门》面世了!

    随着人工智能技术的发展,机器学习已成为软件 / 互联网行业的常用技能,并开始向更多行业渗透.对越来越多的 IT 技术人员及数据分析从业者而言,机器学习正在成为必备技能之一. 今天我们就来聊聊机器学习的 ...

最新文章

  1. QT的QCameraImageCapture类的使用
  2. [BUUCTF-pwn]——bjdctf_2020_router
  3. matlab imcrop 对应python函数_Python精讲Numpy基础,大牛笔记详细解释
  4. Abp vNext 切换MySql数据库
  5. ORA-19809: limit exceeded for recovery files问题解决
  6. 让网站和APP更具动感的几点建议
  7. 整理 被appstore 拒绝审核通过的原因
  8. HCIE Security 防火墙URL过滤技术 备考笔记(幕布)
  9. esri开发大赛项目总结
  10. Java虚拟机(JVM)字节码指令表
  11. 如何使用u深度启动u盘清除系统登录密码
  12. arm板配置ssh服务
  13. csgo靠谱的开箱网站有哪些?csgo开箱网站大全
  14. Python 小程序:计算24点
  15. Java问卷调查管理系统(附数据库)
  16. 深度神经网络分析,神经网络 炒股
  17. python如何用macd选股_使用MACD指标进行选股的四种方法
  18. opcode php 5.4,为PHP5.4开启Zend OPCode缓存
  19. 虚拟主机3种方式nginx/apache+跨域知识点整理
  20. Linux 文件打包(tar命令——怎么使打包后的文件夹里只有想要的文件而不是有多一个原目录)

热门文章

  1. 华为手机Android studio 配置ADB wifi 调试
  2. 【读书笔记】重新定义团队
  3. python统计数据指标的常见方法
  4. 迅雷“去中心化”再升级 转型中All in 区块链
  5. vim中使用color_coded为c/cpp文件配色
  6. matlab中princ,主成分分析matlab源程序代码(最新整理)
  7. Android之常见UI控件
  8. restful风格的接口设计
  9. 简单理解聚集索引和非聚集索引
  10. mysql怎么把两个表格的数据合并成一行_mysql中将多行数据合并成一行数据