分享

TensorFlow发布语音识别入门教程,附1GB数据集&代码

 昵称16619343 2017-08-28

机械鸡的鸡友经常问:如何开始入门深度学习语音和其他音频识别,例如关键字检测或语音命令。

虽然有一些伟大的开源语音识别系统,如Kaldi可以使用神经网络作为一个组件,但它们的复杂性,使得它们难以被用来作简单任务的指南。

目前,找不到免费且公开的数据集及教程,让初学者入门(许多需要在神经网络模型可以构建之前进行预处理),或者非常适合简单的关键字检测。

为了解决这个问题,TensorFlow和AIY团队创建了语音命令数据集,并用于将训练*和推理示例代码在TensorFlow中运行。(https://aiyprojects./)

该数据集在AIY网站,由成千上万的用户,上传了包含30个词的65000条语音数据,每条数据长度为一秒。数据集可以为应用程序构建基本但有用的语音界面,其中包含“yes”、“no”,'up'和'left'等常用单词。

想要练手的鸡友,要下载预先构建的TensorFlow Android应用程序演示,并开启“TF语音”。你将被要求访问麦克风的权限,然后查看一个十个单词的列表,每个单词应该对应你说的话。

结果将取决于你的语音模式是否被数据集覆盖,因此可能不完美 - 商业语音识别系统比此教学示例复杂得多。但是,我们希望随着更多的变化被添加到数据集中,随着社区对TensorFlow的改进,我们将继续看到改进和扩展。

教程

本教程将向你展示如何构建识别十个不同单词的基本语音识别网络。

重要的是要知道,真正的语音和音频识别系统要复杂得多,但是像MNIST(入门级的CV数据集)一样,它应该会让你对所涉技术有一个基本的了解。

完成本教程后,你将可以尝试创建一个模型,将一秒钟的音频剪辑去噪,识别单词有“yes”,“no”,“up”,“down”,'left','right','on','off','stop',or 'go'。

你也可以在Android应用程序中运行该模型。

准备

你要确保已经安装了TensorFlow,由于该版本下载了超过1GB的训练数据,因此你需要电脑有足够的内存,另外网速要快,训练过程可能需要几个小时。

训练

要开始训练过程,请访问TensorFlow源代码树并运行:

python tensorflow/examples/speech_commands/train.py

训练过程将从下载“ 语音命令”数据集开始,该数据集由65000个WAVE音频文件组成,其中有30个不同的单词。

这些数据是由Google收集的,并根据CCBY许可证发布。存档超过1GB,所以下载可能需要一段时间,但你应该能看到进度日志,一旦下载完成,你就不用再次执行此步骤了。

下载完成后,你将看到如下所示的日志记录信息:

I0730 16:53:44.766740 55030 train.py:176] Training from step: 1

I0730 16:53:47.289078 55030 train.py:217] Step #1: rate 0.001000, accuracy 7.0%, cross entropy 2.611571

这表明初始化过程已经完成,循环训练已经开始。你会看到它输出每个训练步骤的信息。

步骤分解

Step #1表明我们正在循环训练的第一步。在这种情况下,总共将有18000个步骤,所以你可以查看步骤号码,了解其完成程度有多接近。

rate 0.001000是控制网络权重更新速度的学习率。早期的这个数字是相对较高的(0.001),但是对于后来的训练周期,它会减少10倍到0.0001。

accuracy 7.0%在这个训练步骤中正确地预测了有多少classes。value函数往往波动很大,但随着训练的进行,平均值会增加。该模型输出一个数字数组,每个标签一个,每个数字是该类输入的预测可能性。

通过选择具有最高分数的条目来选择预测的标签,分数总是在零和一之间。

cross entropy 2.611571是我们用来指导培训过程的损失功能的结果。这是通过比较当前训练运动与正确标签的分数向量获得的分数,这在训练期间应该向下倾斜。

经过一百步,你应该看到这样的一行:

I0730 16:54:41.813438 55030 train.py:252] Saving to '/tmp/speech_commands_train/conv.ckpt-100'

这是将当前训练的权重保存到checkpoint文件中。如果你的训练脚本中断,可以查找最后保存的checkpoint,然后:

--start_checkpoint=/tmp/speech_commands_train/conv.ckpt-100使用命令行参数重新

启动脚本, 从那里开始。

混淆矩阵:

四百步后,将记录以下信息:

I0730 16:57:38.073667 55030 train.py:243] ConfusionMatrix:
[[
258 0 0 0 0 0 0 0 0 0 0 0]
[
7 6 26 94 7 49 1 15 40 2 0 11]
[
10 1107 80 13 22 0 13 10 1 0 4]
[
1 3 16163 6 48 0 5 10 1 0 17]
[
15 1 17114 55 13 0 9 22 5 0 9]
[
1 1 6 97 3 87 1 12 46 0 0 10]
[
8 6 86 84 13 24 1 9 9 1 0 6]
[
9 3 32112 9 26 1 36 19 0 0 9]
[
8 2 12 94 9 52 0 6 72 0 0 2]
[
16 1 39 74 29 42 0 6 37 9 0 3]
[
15 6 17 71 50 37 0 6 32 2 1 9]
[
11 1 6151 5 42 0 8 16 0 0 20]]

第一部分是混淆矩阵。要了解这是什么意思,你首先需要知道正在使用的标签,在这种情况下,它们分别表示为静音、未知yes、no、up、down、left、right、on、off、stop、go。

第一行是所有的静音剪辑,第二个剪辑是未知的单词,第三个“yes”等。

该矩阵可以比单个准确率得分更有用,因为它可以很好地总结出网络发生的错误。在此示例中,你可以看到除了初始条目之外,第一行中的所有条目都为零。

因为第一行实际上都是静音的片段,所以这意味着它们都没有被错误的标注为文字,所以我们没有任何静音的否定。这表明网络已经越来越好地区分了静音与谈话。

一个完美的模型将产生一个混矩阵,其中所有的条目都是从对角线穿过中心的零点。一旦你确定了可以通过添加更多数据来解决问题,该模型的方差可以帮助你了解模型怎样最容易混淆。

验证

矩阵之后,你会看到如下一行:

I0730 16:57:38.073777 55030 train.py:245] Step 400: Validation accuracy = 26.3% (N=3093)

将数据集分为三类是很好的做法。最大的(大约是数据的80%)用于训练网络,一个较小的集(10% “validation”)被保留用于评估训练中的准确性,另一组10%,“testing”)用于在训练完成后评估准确度。

通过将数据集分类为训练集、验证集、测试集,你可以确保该模型适用于之前从未见过的数据。测试集是一个额外的保障措施,以确保不仅仅是以适用于训练和验证集拟合调整模型。

训练脚本将数据集自动分成这三个类别,上面的记录行显示了在验证集上运行时的模型准确率。理想情况下,这应该与训练准确性相当接近。如果训练准确性增加但验证不是这样,这表明过度拟合正在发生,你的模型只是学习关于训练剪辑的东西,而不是真正的训练模式。

Tensorboard

使用Tensorboard可以看出训练进展。默认情况下,脚本将事件保存到/ tmp / retrain_logs,可以通过运行以下命令来加载它们:

tensorboard --logdir /tmp/retrain_logs

然后在浏览器中导航到 http:// localhost:6006,将看到显示模型进度的图表。

完成训练

经过几个小时的训练(取决于你的电脑快慢),脚本应该已经完成了所有18000个步骤。它将识别出最终的混淆矩阵,以及准确率分数,全部运行在测试集上。使用默认设置,准确率在85%到90%之间。

因为音频识别在移动设备上特别有用,接下来我们将其导出为,在移动平台上易于使用的格式。要执行此操作,请运行以下命令行:

python tensorflow/examples/speech_commands/freeze.py \

--start_checkpoint=/tmp/speech_commands_train/conv.ckpt-18000 \

--output_file=/tmp/my_frozen_graph.pb

创建固定模型后,可以使用label_wav.py 脚本进行测试,如下所示:

python tensorflow/examples/speech_commands/label_wav.py \

--graph=/tmp/my_frozen_graph.pb \

--labels=/tmp/speech_commands_train/conv_labels.txt \

--wav=/tmp/speech_dataset/left/a5d485dc_nohash_0.wav

可以识别出三个标签:

left (score = 0.81477)

right (score = 0.14139)

_unknown_ (score = 0.03808)

跟多内容请查看论文:http:///3PW89b

在Android应用程序中运行模型

查看此模型在真实应用程序中如何工作的最简单的方法是,下载预构建的Android演示应用程序并将其安装在手机上(http:///4n1pym)。

你会看到“TF Speech”出现在应用程序列表中,打开它将显示我们刚刚训练过单词列表,从“yes”和“no”开始。

你还可以自己构建此应用程序,因为它是开源的, 并可作为github上TensorFlow存储库的一部分使用(http:///mfUa8)。默认情况下,它从tensorflow.org下载一个预先训练的模型,但你可以轻松地用自己训练的模型替换它。

这与本教程中的C ++版本非常相似。如果你调整了参数,还可以在SpeechActivity中进行更新,以获得与服务器测试相同的结果。

演示应用程序,根据你在固定模型复制到模型中的标签文本文件,自动更新其用户界面列表,可以轻松地尝试不同的模型,而无需进行任何代码更改。如果你更改路径,需要updaye LABEL_FILENAMEMODEL_FILENAME添加到文件。

用大数据和机器学习揭示十二星座的真实面目!

十图详解tensorflow数据读取机制(附代码)

亚马逊研发了一位 ”AI设计师“

马斯克的Neuralink领衔全球十大脑神经科技公司

专访 ‖ 英特尔&MobileODT宫颈癌筛查比赛第一名团队

这家主宰700亿美元比特币市场的中国公司

正在打造比特币挖矿AI芯片

黑科技!世界上第一支用AI算法酿造的啤酒

长期招聘志愿者

加入「AI从业者社群」请备注个人信息

添加小鸡微信 liulailiuwang

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多