使用 Amazon Rekognition PlatoBlockchain 数据智能检测音频事件。 垂直搜索。 哎。

使用 Amazon Rekognition 检测音频事件

当大多数人想到对音频数据使用机器学习 (ML) 时,通常会想到的用例是 转录,也称为语音到文本。 但是,还有其他有用的应用程序,包括使用 ML 来检测声音。

使用软件检测声音称为 音频事件检测, 它有许多应用程序。 例如,假设您想要监控嘈杂的工厂车间发出的声音,并聆听指示机器出现问题的警铃。 在医疗保健环境中,您可以使用音频事件检测来被动地聆听患者发出的表示急性健康问题的声音。 媒体工作负载非常适合这种技术,例如检测体育视频中裁判何时吹哨。 当然,您可以在各种监视工作负载中使用这种技术,例如从安装在城市街道上方的麦克风中收听枪声或车祸的声音。

这篇文章描述了如何检测音频文件中的声音,即使同时有重要的背景声音发生。 更重要的是,也许令人惊讶的是,我们使用基于计算机视觉的技术进行检测,使用 亚马逊重新认识.

将音频数据与机器学习结合使用

检测音频事件的第一步是了解音频数据的表示方式。 出于本文的目的,我们只处理录制的音频,尽管这些技术适用于流式音频。

录制的音频通常存储为一系列声音样本,这些样本随时间测量在录制期间撞击麦克风的声波强度。 存储这些样本的格式多种多样,但一种常见的方法是每秒存储 10,000、20,000 甚至 40,000 个样本,每个样本是 0 到 65535(两个字节)之间的整数。 由于每个样本仅测量特定时刻的声波强度,因此声音数据通常对 ML 过程没有帮助,因为它在原始状态下没有任何有用的特征。

为了使这些数据有用,声音样本被转换成一个图像,称为 频谱,它是音频数据的表示,它显示了不同频带随时间变化的强度。 下图显示了一个示例。

该图像的 X 轴代表时间,这意味着图像的左边缘是声音的开始,图像的右边缘是结束。 图像中的每一列数据代表不同的频带(由图像左侧的刻度表示),每个点的颜色代表该频率在那个时刻的强度。

频谱图的垂直缩放可以更改为其他表示。 例如,线性缩放意味着 Y 轴在频率上均匀划分,对数缩放使用对数缩放,等等。 使用这些表示的问题在于声音文件中的频率通常不是均匀分布的,因此我们可能感兴趣的大部分信息最终都聚集在图像底部附近(较低的频率)。

为了解决这个问题,我们的示例图像是一个示例 梅尔谱图,它被缩放以接近人类感知声音的方式。 注意图像左侧的频率指示器——它们给出了它们如何垂直分布的概念,很明显它是一个非线性比例。

此外,我们可以按时间按频率修改强度测量,以增强被测量音频的各种特征。 与由梅尔谱图实现的 Y 轴缩放一样,其他人强调诸如用于研究音乐的 12 个独特音高等级的强度(色度)等特征。 另一类强调水平(谐波)特征或垂直(冲击)特征。 被检测的声音类型应该驱动用于检测系统的频谱图类型。

前面的示例频谱图表示刚刚超过 2 分钟的音乐剪辑。 放大显示更多细节,如下图所示。

使用 Amazon Rekognition PlatoBlockchain 数据智能检测音频事件。 垂直搜索。 哎。

图像顶部的数字显示从音频文件开始的秒数。 您可以清楚地看到似乎每秒重复四次以上的声音序列,由图像底部附近的亮色表示。

如您所见,这是将音频转换为频谱图的好处之一——肉眼通常很容易看到不同的声音,即使不是,也可以使用计算机视觉对象检测算法经常检测到它们。 事实上,这正是我们为了检测声音而遵循的过程。

在频谱图中寻找离散的声音

根据我们正在搜索的音频文件的长度,找到仅持续一两秒的离散声音是一项挑战。 请参阅我们共享的第一个频谱图——因为我们正在查看整个 3:30 分钟的数据,仅持续一秒左右的细节是不可见的。 我们放大了很多,以查看第二张图片中显示的节奏。 显然,对于更大的声音文件(因此更大的频谱图),除非我们使用不同的方法,否则我们很快就会遇到问题。 这种方法称为 窗口化.

窗口化是指使用在整个频谱图上移动的滑动窗口,一次隔离几秒钟(或更少)。 通过重复隔离整个图像的各个部分,我们可以获得更小的图像,这些图像可以搜索到要检测的声音的存在。 因为每个窗口可能只导致我们正在寻找的图像的一部分(例如在搜索不完全在窗口开始处开始的声音的情况下),所以通常在随后的窗口重叠的情况下执行窗口。 例如,第一个窗口从 0:00 开始并延长 2 秒,然后第二个窗口从 0:01 开始并延长 2 秒,第三个窗口从 0:02 开始并延长 2 秒,以此类推。

窗口化将频谱图图像水平分割。 我们可以通过裁剪或仅搜索图像的某些垂直部分来隔离某些频带,从而提高检测过程的有效性。 例如,如果您知道要检测的警铃发出的声音范围从一种特定频率到另一种频率,则可以修改当前窗口以仅考虑这些频率范围。 这大大减少了要操作的数据量,并导致更快的搜索。 它还提高了准确性,因为它消除了在所需范围之外的频带中可能发生的误报匹配。 下图比较了完整的 Y 轴(左)和有限的 Y 轴(右)。

全 Y 轴

全 Y 轴

有限的 Y 轴

有限的 Y 轴

现在我们知道如何使用窗口方法迭代频谱图并过滤到某些频带,下一步是对声音进行实际搜索。 为此,我们使用 Amazon Rekognition自定义标签. Rekognition 自定义标签功能建立在 Amazon Rekognition 的现有功能之上,该功能已经在许多类别的数千万张图像上进行了训练。 无需上传数千张图像,您只需上传一小组训练图像(通常为几百张图像,但应根据特定用例通过实验得出最佳训练数据集大小,以避免模型训练不足或过度训练) 通过 Rekognition 自定义标签控制台特定于您的用例。

如果您的图像已标记,只需单击几下即可访问 Amazon Rekognition 培训。 或者,您可以直接在 Amazon Rekognition 标记界面中标记图像,或使用 亚马逊SageMaker地面真相 为您贴上标签。 当 Amazon Rekognition 从您的图像集开始训练时,它会在几个小时内为您生成一个自定义图像分析模型。 在后台,Rekognition 自定义标签会自动加载和检查训练数据、选择正确的 ML 算法、训练模型并提供模型性能指标。 然后,您可以通过 Rekognition 自定义标签 API 并将其集成到您的应用程序中。

组装训练数据并训练 Rekognition 自定义标签模型

与这篇文章相关的 GitHub 存储库,您会发现代码显示如何监听烟雾警报器的声音,而不管背景噪音如何。 在这种情况下,我们的 Rekognition 自定义标签模型是一个二元分类模型,这意味着结果要么是“检测到烟雾警报声”,要么是“未检测到烟雾警报声”。

要创建自定义模型,我们需要训练数据。 该训练数据由两种主要类型组成:环境声音和您希望检测的声音(如烟雾警报器响起)。

环境数据应代表您想要检测声音的环境中典型的各种音景。例如,如果您想检测工厂环境中的烟雾报警器声音,请从在该工厂环境中录制的声音开始各种情况(当然,没有烟雾警报器响起)。

如果可能的话,您要检测的声音应该被隔离,这意味着录音应该只是声音本身,没有任何环境背景声音。 对于我们的示例,这是烟雾警报器响起的声音。

收集完这些声音后,GitHub 存储库中的代码显示了如何以各种方式将环境声音与烟雾报警器声音结合起来(然后将它们转换为频谱图),以创建许多代表环境声音的图像有和没有烟雾报警器的声音覆盖在他们身上。 下图是一些环境声音的示例,上面覆盖了烟雾警报声音(明亮的水平条)。

使用 Amazon Rekognition PlatoBlockchain 数据智能检测音频事件。 垂直搜索。 哎。

训练和测试数据存储在一个 亚马逊简单存储服务 (Amazon S3) 存储桶。 以下目录结构是在存储桶中组织数据的良好起点。

使用 Amazon Rekognition PlatoBlockchain 数据智能检测音频事件。 垂直搜索。 哎。

GitHub 存储库中的示例代码允许您选择创建多少训练图像。 Rekognition 自定义标签不需要大量训练图像。 200-500 张图像的训练集就足够了。

创建 Rekognition 自定义标签项目需要您指定包含训练数据和(可选)测试数据的 S3 文件夹的 URI。 为训练作业指定数据源时,选项之一是 自动贴标,如以下屏幕截图所示。

使用 Amazon Rekognition PlatoBlockchain 数据智能检测音频事件。 垂直搜索。 哎。

使用此选项意味着 Amazon Rekognition 使用文件夹名称作为标签名称。 对于我们的烟雾报警器检测用例,train 和 test 文件夹内的文件夹结构如下图所示。

使用 Amazon Rekognition PlatoBlockchain 数据智能检测音频事件。 垂直搜索。 哎。

训练数据图像进入这些文件夹,包含烟雾报警器声音的频谱图进入警报文件夹,不包含烟雾报警器声音的频谱图进入警报文件夹。 no_alarm 文件夹。 Amazon Rekognition 使用这些名称作为自定义标签模型的输出类名称。

训练自定义标签模型通常需要 30-90 分钟。 在培训结束时,您必须启动经过培训的模型,以便它可以使用。

声音检测的端到端架构

创建模型后,下一步是设置推理管道,以便我们可以使用该模型来检测音频文件中是否存在烟雾警报声。 为此,必须将输入声音转换为频谱图,然后按频率进行窗口化和过滤,就像在训练过程中所做的那样。 频谱图的每个窗口都提供给模型,该模型返回一个分类,指示烟雾报警器是否响起。

下图显示了实现此推理管道的示例架构。

使用 Amazon Rekognition PlatoBlockchain 数据智能检测音频事件。 垂直搜索。 哎。

此架构等待将音频文件放入 S3 存储桶,然后导致 AWS Lambda 要调用的函数。 Lambda 是一种无服务器、事件驱动的计算服务,可让您为几乎任何类型的应用程序或后端服务运行代码,而无需预置或管理服务器。 您可以从 200 多个 AWS 服务和软件即服务 (SaaS) 应用程序中触发 Lambda 函数,并且只需为您使用的内容付费。

Lambda 函数接收存储桶的名称和音频文件的键名(或文件名)。 该文件从 Amazon S3 下载到函数的内存,然后将其转换为频谱图并执行窗口化和频率过滤。 然后将频谱图的每个窗口部分发送到 Amazon Rekognition,后者使用先前训练的 Amazon 自定义标签模型来检测声音。 如果找到该声音,Lambda 函数会通过使用 亚马逊简单通知服务 (Amazon SNS) 通知。 Amazon SNS 提供了一种发布/订阅方法,可以将通知发送到 Amazon Simple Queue服务 (Amazon SQS) 队列、Lambda 函数、HTTPS 终端节点、电子邮件地址、移动推送等。

结论

您可以使用带有音频数据的机器学习来确定某些声音何时出现,即使其他声音同时出现。 这样做需要将声音转换为频谱图图像,然后通过按频带开窗和滤波来定位该频谱图的不同部分。 Rekognition 自定义标签可以轻松训练自定义模型以进行声音检测。

您可以使用 GitHub回购 包含这篇文章的示例代码,作为您自己实验的起点。 有关音频事件检测的更多信息,请参阅 声音事件检测:教程.


关于作者

使用 Amazon Rekognition PlatoBlockchain 数据智能检测音频事件。 垂直搜索。 哎。格雷格·索默维尔 是 AWS 原型设计和云工程团队的高级原型设计架构师,他帮助 AWS 客户实施创新解决方案,以解决机器学习、物联网和无服务器技术等具有挑战性的问题。 他住在密歇根州的安娜堡,喜欢练习瑜伽、养狗和玩扑克。

使用 Amazon Rekognition PlatoBlockchain 数据智能检测音频事件。 垂直搜索。 哎。杰夫·哈曼 是 AWS 原型和云工程团队的高级原型架构师,他帮助 AWS 客户实施创新解决方案来解决具有挑战性的问题。 他住在康涅狄格州尤宁维尔,喜欢木工、锻造和 Minecraft。

时间戳记:

更多来自 AWS机器学习