×

TinyML:使用合成数据的永远在线的音频分类器

消耗积分:0 | 格式:zip | 大小:0.00 MB | 2023-07-13

从未拥有

分享资料个

描述

TinyML是一项尖端技术,它通过支持创建可在微控制器等小型设备上运行的超紧凑、低功耗机器学习模型,彻底改变了机器学习领域。

深度学习最流行的应用之一是音频分类,涉及对声音进行分类并预测其各自类别的任务。这类问题有很多实际应用,例如通过对音乐片段进行分类来识别音乐的流派,或者通过对简短的话语进行分类来根据他们的声音识别各个说话者。借助生成式 AI 和文本转语音技术,我们现在可以使用合成数据来训练这些模型以识别特定模式,例如您的名字。通过使用合成数据,我们可以创建高度真实和多样化的数据集,这些数据集可用于以更高效和更具成本效益的方式训练机器学习模型。

该项目旨在演示如何开发可以区分未知背景噪音人名类别的音频分类系统。为实现这一目标,我们将使用Edge Impulse平台来训练我们的模型,然后将其部署到边缘设备,例如 Arduino Nicla Voice。

用于音频信号处理的机器学习管道

图中所示的音频处理管道是使用机器学习技术分析音频数据的常用方法。通过使用快速傅立叶变换 (FFT) 从音频数据中提取频域特征,可以训练机器学习模型来执行语音识别、音乐分类或音频分割等任务。

poYBAGSBMoGAODSlAACNFA8xkaQ454.jpg
音频处理管道
 

总体而言,此图说明了使用机器学习处理音频数据所涉及的基本步骤,包括数据预处理、特征提取、模型训练和模型推理。

让我们开始吧!

数据集生成

要根据不同的类别对音频进行分类,您需要收集一些未知类、背景噪声类和名称类的样本 WAV 文件。这将使系统能够区分这三个类别。

机器学习模型的数据集生成流程图,该模型使用Google TensorFlow Speech Command数据集、AudioLDM文本转音频生成工具和Piper文本转语音技术生成未知、背景噪声和人名类,可以概括如下:

pYYBAGSBMoSASBF4AABqAVSRSpc862.jpg
 
  • 下载Google TensorFlow Speech Command 数据集,其中包含大量音频样本,以及每个样本的类标签,用于标识声音的类型。这些文件可以作为代表未知类的单独类添加到数据集中
  • 利用ChatGPT背景噪音类别生成不同的文本提示。
  • 生成文本提示后,我们将它们发送到将文本转换为音频的模块。AudioLDM文本转音频生成工具 cat 生成大量音频文件。这些文件可以作为表示背景噪声的单独类添加到数据集中
  • 使用Piper文本转语音技术生成包含人名的音频文件。这些文件可以作为一个单独的类添加到数据集中,代表人或您要分类的其他词。

使用 Text to speech 技术生成高质量的语音数据 - Piper

文本转语音 (TTS) 是一种尖端的语音合成技术,可以将书面文本发声成具有人声的可听语音。TTS 的一个示例是Michael Hansen开发的Piper它可用于从文本输入生成语音数据。

从 Github 存储库下载 Piper TTS 的预编译二进制包。您可以使用 wget 命令通过在终端中运行以下命令来下载程序包:

wget https://github.com/rhasspy/piper/releases/download/v0.0.2/piper_amd64.tar.gz

这将下载适用于 AMD64 架构的 Piper TTS 二进制包。如果您在 Raspberry Pi 或 Nvidia Jetson 等设备上使用不同的架构,例如 ARM64,您应该从piper的 github 存储库下载适当的版本。 提取 tar.gz 文件。

下载英文语言模型,在终端中运行以下命令:

wget https://github.com/rhasspy/piper/releases/download/v0.0.2/voice-en-us-ryan-high.tar.gz

提取您下载的语言模型的 tar.gz 文件。您可以使用以下命令进行提取:

tar -zxvf voice-en-us-ryan-high.tar.gz

使用以下代码片段通过 Piper TTS 生成 WAV 音频文件。将model_path变量替换为您下载的语言模型的路径,并将text变量替换为您要转换为语音的文本。该代码将在输出目录中生成 904 个音频文件,每个文件都有不同的扬声器。

import subprocess
text = "Your name"
model_path = "./en-us-libritts-high.onnx"
for i in range(0, 904):
    output_file = f'./output/{i}.wav'
    cmd = f'echo "{text}" | ./piper/piper --model {model_path} --output_file                {output_file} --speaker {i}'
    subprocess.run(cmd, shell=True, check=True)

此外,您还可以使用为您准备的 Google Colab 笔记本。该笔记本包含使用Piper TTS生成音频文件的所有必要步骤和代码

poYBAGSBMoiARx4BAAS6mnW2EQI908.png
谷歌 Colab 笔记本
 

您可以通过提供给您的链接访问笔记本

默认运行时使用 CPU,但您可以将运行时更改为 GPU。

poYBAGSBMo2AfLVVAARt5E1l_M4985.png
 

为了在笔记本上使用 GPU,请选择运行时 > 更改运行时类型菜单,然后将硬件加速器下拉菜单设置为 GPU

pYYBAGSBMpKAMJz9AAOXNA1w6NY250.png
 

Piper TTS 无需 GPU 即可运行,而AudioLDM文本到音频生成工具需要 GPU 激活。以下是通过AudioLDM生成音频的步骤

使用 AudioLDM 生成高质量的合成音频数据集

要从文本生成音频文件,下一步涉及使用名为AudioLDM的文本到音频生成工具。该工具利用潜在扩散模型从文本生成高质量音频。要使用 AudioLDM,您需要一台配备强大 GPU 的独立计算机。

要使用文本提示生成音频文件,您有两种选择:您可以在自己的计算机上使用 GPU 安装 audioldm,或者使用我为您准备的Google Colab 。

首先,您需要通过运行以下命令使用 pip 安装 PyTorch

pip3 install torch==2.0.0

接下来,您可以通过运行命令来安装 audioldm 包

pip3 install audioldm

安装必要的包后,您可以使用 GitHub 部分中提供的代码片段从文本提示生成音频文件。为此,只需运行命令

python3 generate.py

这将启动生成过程,您应该会看到类似于以下内容的输出:

genereated: A hammer is hitting a wooden surface
genereated: A noise of nature
genereated: The sound of waves crashing on the shore
genereated: A thunderstorm in the distance
genereated: Traffic noise on a busy street
genereated: The hum of an air conditioning unit
genereated: Birds chirping in the morning
genereated: The sound of a train passing by

一旦收集了 wav 音频样本,就可以将它们输入神经网络以启动训练过程。

就这样。现在我们可以简单地将这些 wav 文件上传到Edge Impulse Studio以训练我们的模型。

使用 Edge Impulse 平台进行模型训练

对于模型训练、测试和部署,可以使用Edge Impulse Studio平台。它是一个几乎不提供代码解决方案的 TinyML 框架,您无需具备良好的机器学习专业知识即可构建您的 TinyML 模型。

首先,创建一个帐户并登录然后创建一个新项目。将样本加载到 Edge Impulse 中的最简单方法是使用上传数据选项。

选择数据采集选项卡并选择上传数据选项,将出现以下窗口。

pYYBAGSBMpaAGFpQAADZ2luL6w8448.png
 

确保在标签选项下,您在输入标签选项下提到了标签名称上传您的 wav 文件。

对上传其他班级的音频样本重复相同的过程。您应该确保每个音频样本都被正确标记并分组到各自的类别中,以避免在训练期间出现任何混淆。

poYBAGSBMpqAO8VzAAL-u-_NJYM486.png
 

我总共收集了 1 小时 19 秒的数据,这些数据可以分为三个不同的类别。

  • 未知类
  • 背景噪音等级
  • Shakhizat班(我的名字)

一旦你设置了所有的类并且对你的数据集感到满意,就可以训练模型了。在左侧导航菜单中导航至 Impulse Design。

poYBAGSBMpyAJNlHAAHaSHGsaLI029.png
 

选择Add a processing block并添加Audio(Syntiant) ,因为它非常适合基于Syntiant NDP120 Neural Decision Processor 的人声应用。它会尝试将音频转换成某种基于时间和频率特征的特征,这将有助于我们进行分类。然后选择添加学习块并添加分类。

最后,点击Save Impulse

然后导航到Syntiant 在此步骤中,您将从输入数据生成特征。特征是分类算法用来对音频进行分类的独特属性。

pYYBAGSBMqGAVmawAAHcGJy5MW0591.png
 

将特征提取器设置为log-bin(NDP120/200) ,然后单击保存参数。

poYBAGSBMqSAC6KEAAFpmosd1_o660.png
 

接下来,单击生成特征并使用特征资源管理器检查生成的特征。每个数据样本将根据其标签在图中着色。

使用完功能浏览器后,单击左侧导航菜单中的分类器项。

pYYBAGSBMqeAYyhgAABou4cU57U379.png
 

对于此项目,训练周期数设置为200 ,学习率设置为0.0005

该模型具有以下结构:

pYYBAGSBMqqAbPQQAAES0NRwzkE197.png
 

接下来,单击Start training以训练机器学习模型,这可能需要一些时间才能完成,具体取决于数据集的大小。

训练完成后,Edge Impulse Studio 将显示模型的性能、混淆矩阵、特征资源管理器和设备上的性能细节。

poYBAGSBMqyAZPYDAAF9pqQzh9s091.png
 

对我来说,准确率为 96.2%,损失为 0.12。训练集的准确性非常好。

您可能会看到以下日志消息:

| | Total MACs: 284736                                                                                   | | Total Cycles: 24762 (time=0.0011515066964285713s @ 21.504 MHz)                                       | | Total Parameter Count: 948                                                                           | | Total Parameter Memory: 1.4375 KB out of 640.0 KB on the NDP120_B0 device.                           | | Estimated Model Energy/Inference at 0.9V: 5.56237 (uJ)

此信息很重要,因为它表明模型的内存效率以及它是否可以部署在 Arduino Nicla Voice 等资源有限的设备上。

一旦您对模型的性能感到满意,就可以将它部署到您的 Arduino Nicla Voice 中了。为此,单击 Edge Impulse Studio 中的 Deployment 菜单项,然后单击 Arduino Nicla Voice 按钮。

pYYBAGSBMrCAOUkVAAITRVG3D4Q981.png
 

选择模型后,单击构建

 

打开 Arduino IDE 串行监视器。将波特率设置为 115200。如果一切正常,您应该会看到以下内容:

 

如您所见,我们的模型表现非常好。尽管有一些错误分类,但我觉得它的结果非常棒。该系统能够将每个说出的词分类为“未知”类别。此外,它还能将口语单词“我的名字”正确识别为已知单词,并将其分配到适当的类别。另一方面,系统将背景中的噪音识别为噪音类别并相应地分配。

总之,该项目演示了如何使用 Edge Impulse 平台构建音频分类系统并将其部署在 Arduino Nicla Voice 等边缘设备上。通过使用包含未知声音、背景噪声和人名的多样化数据集来训练模型,我们可以创建一个强大的系统,可以实时准确地对音频样本进行分类。

我已经让公众可以访问一个项目。有关此项目的更多详细信息,请访问 Edge Impulse。并且可以通过此链接访问它

感谢您的阅读!如果您有兴趣了解有关音频识别中机器学习的更多信息,我强烈建议您查看下面这篇文章中提到的参考资料

参考


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !