https://blog.tensorflowcn.cn/2020/08/creating-sounds-of-india-with-tensorflow.html
https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhI1Y1U1afI-lbo3knQ2ueDztsZ3KMgbIr0AKgWci_lJPwbvznsW6_TinX1VOdhnqenda0Kn-0HElcETSPQExbVud0oEh1RvVJqAmCQC6iC0AHKP4CWVVe1KO0bwC1qKd2sSLk2UlF4v30/s1600/Sounds+of+India-2.gif
发布者:Anusha Ramesh,TFX 产品经理;David Zats,TFX 软件工程师;Ping Yu,TensorFlow.js 软件工程师;Lamtharn (Hanoi) Hantrakul,Magenta AI 驻地人员
简介
印度之声 是一款独特且有趣的互动音乐体验,以印度传统为灵感,并由机器学习提供支持,将在印度第 74 个独立日推出。当印度各地(以及世界各地)的用户通过移动设备的麦克风演唱印度国歌时,机器学习模型将实时将他们的声音转换为一系列古典印度乐器的声音,直接在浏览器中呈现。整个体验的创建过程仅用了 12 周,这表明开发人员如何利用 TensorFlow 生态系统快速地将模型从研究阶段扩展到生产阶段。
研究:Magenta 的可微分数字信号处理 (DDSP)
Magenta 是 Google AI 内的一个开源研究项目,探索机器学习在创意过程中的作用。
可微分数字信号处理 或
DDSP 是一个新的开源库,将现代机器学习与可解释的信号处理相结合。与训练纯深度学习模型(例如
WaveNet)逐样本渲染波形不同,我们可以训练轻量级模型,这些模型会输出时变控制信号到这些可微分 DSP 模块(因此 DDSP 中多了“D”),这些模块会合成最终的声音。结合 TensorFlow Keras 层中的 DDSP 的循环模型和卷积模型可以有效地生成音频,速度是其较大的自回归对应物的 1000 倍,模型参数和训练数据需求减少 100 倍。DDSP 的一个特别有趣的应用是
音调转换,它将声音转换为乐器。首先在 15 分钟的目标萨克斯管上训练 DDSP 模型来试用它。然后,您可以唱一个旋律,经过训练的 DDSP 模型会将其重新渲染为萨克斯管。对于印度之声,我们将这项技术应用于三种古典印度乐器:
班苏里、
谢赫奈 和
萨朗吉。
使用 TFX 训练,使用 TensorFlow.js 部署到浏览器
TFX
TensorFlow Extended (TFX) 是用于生产级 ML 的端到端平台,包括在生产环境中准备数据、训练、验证和部署模型。TFX 用于训练负责将用户声音转换为乐器之一的模型,然后将这些模型转换为
TensorFlow.js 以部署到标准 Web 浏览器。
部署到浏览器为用户提供与机器学习模型互动的无缝体验:只需单击一个超链接并加载页面,就像访问任何其他网站一样。无需复杂的安装。通过在浏览器中执行客户端操作,我们能够在传感器数据源处执行推理,从而最大程度地减少延迟并降低与大型显卡、CPU 和内存相关的服务器成本。此外,鉴于应用程序使用您的语音作为输入,用户隐私非常重要。由于整个端到端体验都在客户端和浏览器中进行,因此绝对不会将任何传感器或麦克风数据发送到服务器端。
基于浏览器的机器学习模型通常经过优化以尽可能小,以最大限度地减少使用的带宽。在这种情况下,每种乐器的理想超参数也可能差异很大。我们利用 TFX 对数百个模型进行大规模训练和调整,以确定每种乐器的最小尺寸。因此,我们能够显著减少它们的内存占用。例如,班苏里乐器模型的磁盘大小减少了约 20 倍,而声音质量没有明显影响。
TFX 还使我们能够对不同的模型架构(GRU、CNN)、不同的输入类型(响度、RMS 能量)和不同的乐器数据源进行快速迭代。每次我们都能够快速有效地运行 TFX 管道,以生成具有所需特性的新模型。
TensorFlow.js
创建 TensorFlow.js DDSP 模型具有独特的挑战性,因为需要满足严格的性能和模型质量目标。我们需要该模型在执行音调转换方面具有很高的效率,以便能够有效地在移动设备上运行。同时,任何模型质量的下降都会迅速导致音频失真和糟糕的用户体验。
我们首先探索了各种 TensorFlow.js 后端和模型架构。
WebGL 后端 是优化程度最高的,而
WebAssembly 后端 在低端手机上运行良好。考虑到 DDSP 的计算需求,我们选择了一个基于 Convnet 的 DDSP 模型,并利用 WebGL 后端。
为了最大限度地减少模型下载时间,我们研究了模型的拓扑结构,并使用 Fill/ZeroLike 操作压缩了一组大型常量张量,将大小从 10MB 减少到 300KB。
我们还专注于三个关键领域,使 TensorFlow.js 模型准备好用于设备上的生产规模部署:推理性能、内存占用和数值稳定性。
推理性能优化DDSP 模型包含神经网络和信号合成器。合成器部分包含许多信号处理操作,这些操作需要大量的计算。为了提高移动设备上的性能,我们使用特殊的 WebGL 着色器重写了几个内核,以充分利用 GPU。例如,累加运算的并行版本将推理时间减少了 90%。
减少内存占用我们的目标是能够在尽可能多的移动设备类型上运行该模型。由于许多手机的 GPU 内存非常有限,因此我们需要确保模型的内存占用最小。我们通过处置中间张量并添加一个新标志来实现这一点,该标志允许提前处置 GPU 纹理。通过这些方法,我们能够将内存大小减少 60%。
数值稳定性DDSP 模型需要非常高的数值精度才能生成美妙的音乐。这与典型的分类模型截然不同,在典型的分类模型中,一定程度的精度损失不会影响最终的分类。此体验中使用的 DDSP 模型是生成模型。任何精度损失和音频输出中的不连续性都会被我们敏感的耳朵轻易察觉。我们在 float16 WebGL 纹理中遇到了数值稳定性问题。因此,我们重写了一些关键操作,以减少输出的溢出和下溢。例如,在累加操作中,我们确保累加在着色器中以完全浮点精度完成,并在将输出写入 float16 纹理之前应用模运算,以避免溢出。
亲自尝试!
您可以在移动电话上
g.co/SoundsofIndia 上尝试该体验 - 如果您愿意,请与我们分享您的结果。我们很想看看您用自己的声音创作了什么。
如果您对机器学习如何增强创造力和创新感到兴奋,您可以通过团队的
博客 了解更多关于 Magenta 的信息,并为他们的开源
github 做贡献,或者查看
#MadeWithTFJS,以获取更多来自 TensorFlow.js 社区的基于浏览器的机器学习示例。如果您有兴趣使用 ML 最佳实践在生产规模上训练和部署模型,请查看 Tensorflow Extended
博客。
鸣谢
如果没有 Miguel de Andrés-Clavera、Yiling Liu、Aditya Mirchandani、KC Chung、Alap Bharadwaj、Kiattiyot (Boon) Panichprecha、Pittayathorn (Kim) Nomrak、Phatchara (Lek) Pongsakorntorn、Nattadet Chinthanathatset、Hieu Dang、Ann Yuan、Sandeep Gupta、Chong Li、Edwin Toh、Jesse Engel 的辛勤付出,以及 Michelle Carney、Nida Zada、Doug Eck、Hannes Widsomer 和 Greg Mikels 的额外帮助,这个项目将无法实现。非常感谢 Tris Warkentin 和 Mitch Trott 的大力支持。