机器学习如何用于音频分析?
机器学习如何用于音频分析?
一、说明
近十年来,机器学习越来越受欢迎。事实上,它被用于医疗保健、农业和制造业等众多行业。随着技术和计算能力的进步,机器学习有很多潜在的应用正在被创造出来。由于数据以多种格式大量可用,因此现在是使用机器学习和数据科学从数据中提取各种见解并使用它们进行预测的合适时机。
机器学习最有趣的应用之一是音频分析和分别了解不同音频格式的质量。因此,使用各种机器学习和深度学习算法可确保使用音频数据创建和理解预测。
照片由 Med Badr Chemmaoui on Unsplash
二、机器学习处理音频
在进行音频分析之前,必须单独采集和分析信号样本。我们取样的速率也称为采样率或奈奎斯特率。将时域信号转换为频域信号,以便对信号有很好的逻辑理解,同时计算有用的分量,如功率和能量,这将非常方便。所有这些都可以作为我们的机器学习模型的特征,这些模型将使用它们进行预测。
音频信号通常可以转换为频谱图(图像),以便将其提供给卷积神经网络 (CNN) 进行预测。频谱图可以捕获音频信号的重要特征并给出 2D 表示,因此可以与基于图像的网络一起使用。
如果给它们一个图像,有很多 ML 模型可以很好地预测输出标签。因此,由振幅和不同频率单位组成的音频信号也可以转换为图像并用于稳健的 ML 预测。
在本文中,我们将通过考虑一个随机示例并绘制它来理解其图形表示,从而介绍如何读取音频文件。稍后,我们将使用图像数据执行特征工程,并在音频转换为图像时执行卷积运算。最后,我们将获得未见过数据的样本预测。请注意,此代码用于演示,不考虑特定的数据集。
读取数据
import matplotlib.pyplot as plt
import numpy as np
from scipy.io.wavefile import read# Read in the audio file
sample_rate, audio_data = read('audio_file.wav')# Convert the audio data to a numpy array
audio_data = np.array(audio_data)# Get the length of the audio data
length = audio_data.shape[0] / sample_rate# Create a time axis
time = np.linspace(0., length, audio_data.shape[0])# Plot the audio data
plt.plot(time, audio_data)
plt.xlabel('Time (s)')
plt.ylabel('Amplitude')
plt.show()
我们将导入必要的库,这些库用于以主要以 ‘.wav’ 格式的形式读取音频文件。读取文件后,我们将得到一个数组表示形式,如上面的代码单元所示。最后,我们将绘制输出,只是为了看看它在 matplotlib 中的外观。
特征工程
import librosa# Calculate the short-term Fourier transform (STFT) of the audio data
stft = librosa.stft(audio_data)# Extract the magnitude and phase of the STFT
magnitude, phase = librosa.magphase(stft)# Calculate the mel-scaled spectrogram of the audio data
mel_spec = librosa.feature.melspectrogram(audio_data, sr=sample_rate)# Extract the Mel-frequency cepstral coefficients (MFCCs) from the mel-scaled spectrogram
mfccs = librosa.feature.mfcc(S=librosa.power_to_db(mel_spec), n_mfcc=20)# Transpose the MFCCs so that each row represents a time frame and each column represents a coefficient
mfccs = mfccs.T
现在,数据已经绘制和可视化以查看 ‘.wav’ 文件中的异常情况,我们现在将使用一个名为 ‘librosa’ 的流行库,该库可用于计算音频数据的短期傅里叶变换。这是为了确保信号被分解成其组成频率,是一种在大量行业中广泛使用的技术。
训练模型
# Convert the audio data to a spectrogram
X = compute_spectrogram(X)# Split data into training and test sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2)# Build machine learning model
# In this case, let's use a random forest classifier with 100 trees
model = RandomForestClassifier(n_estimators = 100)# Train model on training data
model.fit(X_train, y_train)# Evaluate model on test data
accuracy = model.score(X_test, y_test)
print("Test accuracy:", accuracy)
现在我们已经使用 ‘librosa’ 来获取频率分量,我们将使用机器学习模型进行预测。需要注意的是,这是一个分类问题,因此,我们继续使用随机森林分类器。但是,请随意使用适合您的需求和业务的任何其他机器学习模型。
我们现在将使用相同的代码,但用于输出是连续而不是离散的回归任务。下面是有关如何在随机森林回归器的帮助下进行训练和监控性能的编码单元。
# Convert the audio data to a spectrogram
X = compute_spectrogram(X)# Split data into training and test sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2)# Build machine learning model
# In this case, let's use a random forest regressor with 100 trees
model = RandomForestRegressor(n_estimators = 100)# Train model on training data
model.fit(X_train, y_train)# Evaluate model on test data
accuracy = model.score(X_test, y_test)
print("Test accuracy:", accuracy)
超参数优化
在实时部署模型 (Random Forest) 之前,确定模型 (Random Forest) 的正确超参数非常重要。当涉及到深度神经网络时,有很多超参数需要搜索。由于我们使用随机森林作为基准模型,因此我们应该能够在最小的搜索空间中获得正确的超参数。让我们看看如何在常规数据集上执行超参数优化。
# Define hyperparameters to tune
param_grid = {'max_depth': [2, 4, 6, 8], 'min_samples_split': [2, 4, 6, 8]}# Create a grid search object with 5-fold cross-validation
grid_search = GridSearchCV(model, param_grid, cv=5)# Fit the grid search object to the training data
grid_search.fit(X_train, y_train)# Print the best hyperparameters and score
print("Best hyperparameters:", grid_search.best_params_)
print("Best cross-validation score:", grid_search.best_score_)# Evaluate the model on the test data
best_model = grid_search.best_estimator_
accuracy = best_model.score(X_test, y_test)
print("Test accuracy:", accuracy)
在代码单元中,我们指定估计器的数量和我们搜索的树的最大深度,以便在测试集上获得最佳结果。最后,我们监控分数,看看超参数的变化如何使模型获得更好的性能。
模型部署
import pickle# Save the model to a file
with open('model.pkl', 'wb') as f:pickle.dump(model, f)# Load the model from a file
with open('model.pkl', 'rb') as f:model = pickle.load(f)# Use the model to make predictions on new data
predictions = model.predict(new_data)
现在,我们已经执行了超参数优化以给出最准确的预测,是时候保存提供最佳结果的机器学习模型了。因此,我们将在 python 中使用 pickle 库,这样我们就可以自由地保存机器学习模型,以便以后用于服务。
保存模型后,我们将在构建生产就绪代码时再次加载它,并使用它来预测传入的批次或数据流。需要注意的是,在训练数据期间用于执行特征化的步骤集也必须在测试集上执行,以便数据中没有偏斜。
三、持续监控
我们知道,该模型在接收来自用户的传入数据的地方提供数据方面表现良好,这也是一个重要但被忽视的步骤,即监控模型的预测质量。通常,模型可能无法像训练期间那样执行。这可能是因为训练数据和服务数据之间存在差异。例如,可能存在概念漂移或数据漂移等情况,这些情况可能会对投入生产的推理模型的性能产生重大影响。
持续监控可确保采取措施检查预测模型并了解它们在变化数据中的行为。如果预测最不准确,并且导致企业收入损失,则应采取措施再次使用这些偏差数据训练模型,以便模型的行为不会发生意外变化。
四、结论
阅读本文后,您可能已经对如何对音频数据执行机器学习并了解整个工作流程有了很好的了解。我们已经看到了读取数据、特征工程、训练模型、超参数调整、模型部署以及持续监控等步骤。应用这些步骤中的每一个并确保在开发管道时没有错误,这将导致一个强大的机器学习生产系统。
以下是您可以联系我或查看我的作品的方式。
相关文章:

机器学习如何用于音频分析?
机器学习如何用于音频分析? 一、说明 近十年来,机器学习越来越受欢迎。事实上,它被用于医疗保健、农业和制造业等众多行业。随着技术和计算能力的进步,机器学习有很多潜在的应用正在被创造出来。由于数据以多种格式大量可用&…...

适合程序员在周末阅读的历史书籍:理解人性和世界
一、《人类简史:从动物到上帝》 这本书提供了对人类历史和社会发展的深刻洞察,帮助读者理解人类过去、现在和可能的未来。 《人类简史:从动物到上帝》是以色列历史学家尤瓦尔赫拉利(Yuval Noah Harari)创作的一部极具影…...

探索Mem0:下一代人工智能与机器学习内存管理基础设施(二)Mem0+Ollama 部署运行
探索Mem0:下一代人工智能与机器学习内存管理基础设施(二) Mem 0(发音为“mem-zero”)通过智能记忆层增强AI助手和代理,实现个性化的AI交互。Mem 0会记住用户偏好,适应个人需求,并随着时间的推移不断改进,使其成为客户支持聊天机器人,AI助手和自治系统的理想选择。 …...

C++入门10——stack与queue的使用
目录 1.什么是stack? stack的使用 2.什么是queue? queue的使用 3.priority_queue 3.1 什么是priority_queue? 3.2 priority_queue的使用 1.什么是stack? 在官网中,对stack有这样的介绍: Stacks are a type o…...
詳細解析軟路由與代理爬蟲池-okeyproxy
什麼是軟路由? 軟路由,顧名思義,就是通過軟體實現的路由器功能。與傳統的硬體路由器不同,軟路由通常是基於PC或單板電腦(如樹莓派)運行的路由器軟體。 靈活性高:可以根據需求安裝各種插件和服…...

视频监控管理平台LntonAIServer视频智能分析噪声检测应用场景
在视频监控系统中,噪声问题常常影响到视频画面的清晰度和可用性。噪声可能由多种因素引起,包括但不限于低光环境、摄像机传感器灵敏度过高、编码压缩失真等。LntonAIServer通过引入噪声检测功能,旨在帮助用户及时发现并解决视频流中的噪声问题…...

技术分享-商城篇-用户中心-注销修改(二十三)
前言 上一篇文章技术分享-商城篇-用户中心(二十二)在构建高效、安全的商城用户中心时,确保用户账户的安全性与便捷性至关重要。本文将重点阐述三大核心功能——修改密码、协议授权及注销账户的业务逻辑、设计思路及注意事项,旨在…...

Linux-实用指令
目录 前言 指定运行级别 基本介绍 切换运行级别 指令类 帮助指令 man 获得帮助信息 help指令 文件目录类 pwd指令 ls指令 cd指令 mkdir命令 rmdir指令删除空目录 touch指令 cp指令 rm指令 mv指令 cat指令 more指令 less指令 echo指令 head指令 tail指令…...

【MySQL00】【 杂七杂八】
文章目录 一、前言二、MySQL 文件1. 参数文件2. 日志文件3. 套接字文件4. pid 文件5. 表结构定义文件6. InnoDB 存储引擎文件 二、BTree 索引排序三、InnoDB 关键特性1. 插入缓冲1.1 Insert Buffer 和 Change Buffer1.1 缓冲合并 2. 两次写2. 自适应哈希索引3. 异步IO4. 刷新邻…...

计算机网络 第2章 物理层
文章目录 通信基础基本概念信道的极限容量编码与调制常用的编码方法常用的调制方法 传输介质双绞线同轴电缆光纤以太网对有限传输介质的命名规则无线传输介质物理层接口的特性 物理层设备中继器集线器一些特性 物理层任务:实现相邻节点之间比特(0或1&…...

解决:Module build failed (from ./node_modules/sass-loader/dist/cjs.js)问题
一、问题 Module build failed (from ./node_modules/sass-loader/dist/cjs.js): Error: Cannot find module sass 二、解决方法 1.清除缓存 npm cache clean --force2.重构项目 npm install 3.更新(获取最新的)node-sass和sass-loader依赖包 npm …...

【 html+css 绚丽Loading 】 000041 三才移形三角
前言:哈喽,大家好,今天给大家分享htmlcss 绚丽Loading!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕…...
ASP.NET Core 入门教学十六 防止常见的Web攻击
在ASP.NET Core中,防止常见的Web攻击是非常重要的,以确保应用程序的安全性。以下是一些常见的Web攻击类型及其防范措施: 1. 跨站脚本攻击(XSS) 跨站脚本攻击(XSS)是一种通过在网页中注入恶意脚…...
单刀直入@ComponentScan之 资源加载
欢迎大家入坑,所谓师傅领进坑爬出去靠个人,首先我要说的是这个是上一篇《单刀直入ComponentScan》的姊妹篇哈,接着把没聊透的事说明白,咱不是虎头蛇尾的人。 资源加载是啥意思 scan ,都认识吧,小学词汇连…...

SAPUI5基础知识25 - 聚合绑定(Aggregation Binding)
1. 背景 Aggregation Binding 是 SAPUI5 中的一种数据绑定方式,用于将数据模型中的集合(如数组)绑定到 UI 控件的聚合(如列表项、表格行等)。 常见的场景包括将一个数组绑定到 sap.m.List 的 items 聚合,…...

【Python 千题 —— 算法篇】寻找两个正序数组的中位数
Python 千题持续更新中 …… 脑图地址 👉:⭐https://twilight-fanyi.gitee.io/mind-map/Python千题.html⭐ 题目背景 在处理大规模数据时,我们经常需要对数据进行排序和分析。一个常见问题是如何高效地从两个正序数组中找出它们的中位数。…...

Autoware 定位之初始姿态输入(九)
0. 简介 这一讲按照《Autoware 技术代码解读(三)》梳理的顺序,我们来说一说Autoware中的初始化操作,这个软件包当中完成了ekf_localizer发送初始姿态的包。它接收来自GNSS/用户的粗略估计的初始姿态。将姿态传递给ndt_scan_match…...
C# 自定义传值窗体-适合多参数传值
将子窗体的值回传到父窗体中,或者最简单的需要一个设置参数的对话框,其作用也就是得到其中的参数。下面我们详细介绍实现的过程。 文章目录 一、定义一个事件类二、在参数窗体中定义事件三、订阅事件消息 一、定义一个事件类 首先,我们必须…...

Ubuntu20.04+ros-noetic配置Cartographer
一、概述 因为要配置激光SLAM,Cartographer属于激光雷达SLAM 中比较经典的一款,在学习之前先将其在Ubuntu20.04首先配置出来并成功运行demo。 二、具体操作 (一)概述 使用平台是Windows的wsl2上的Ubuntu20.04子系统,…...

Visual Studio 2022 下载和安装
文章目录 概述一,下载步骤二,安装过程 概述 Visual Studio 提供 AI 增强功能,例如用于上下文感知代码补全的 IntelliSense 和可利用开源代码中的 AI 模式的 IntelliCode。 集成的 GitHub Copilot 提供 AI 支持的代码补全、聊天辅助、调试建议…...

中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试
作者:Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位:中南大学地球科学与信息物理学院论文标题:BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接:https://arxiv.…...
Qt Http Server模块功能及架构
Qt Http Server 是 Qt 6.0 中引入的一个新模块,它提供了一个轻量级的 HTTP 服务器实现,主要用于构建基于 HTTP 的应用程序和服务。 功能介绍: 主要功能 HTTP服务器功能: 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...

CocosCreator 之 JavaScript/TypeScript和Java的相互交互
引擎版本: 3.8.1 语言: JavaScript/TypeScript、C、Java 环境:Window 参考:Java原生反射机制 您好,我是鹤九日! 回顾 在上篇文章中:CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...
三体问题详解
从物理学角度,三体问题之所以不稳定,是因为三个天体在万有引力作用下相互作用,形成一个非线性耦合系统。我们可以从牛顿经典力学出发,列出具体的运动方程,并说明为何这个系统本质上是混沌的,无法得到一般解…...
根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:
根据万维钢精英日课6的内容,使用AI(2025)可以参考以下方法: 四个洞见 模型已经比人聪明:以ChatGPT o3为代表的AI非常强大,能运用高级理论解释道理、引用最新学术论文,生成对顶尖科学家都有用的…...
基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解
JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用,结合SQLite数据库实现联系人管理功能,并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能,同时可以最小化到系统…...
音视频——I2S 协议详解
I2S 协议详解 I2S (Inter-IC Sound) 协议是一种串行总线协议,专门用于在数字音频设备之间传输数字音频数据。它由飞利浦(Philips)公司开发,以其简单、高效和广泛的兼容性而闻名。 1. 信号线 I2S 协议通常使用三根或四根信号线&a…...
JS手写代码篇----使用Promise封装AJAX请求
15、使用Promise封装AJAX请求 promise就有reject和resolve了,就不必写成功和失败的回调函数了 const BASEURL ./手写ajax/test.jsonfunction promiseAjax() {return new Promise((resolve, reject) > {const xhr new XMLHttpRequest();xhr.open("get&quo…...
HTML前端开发:JavaScript 获取元素方法详解
作为前端开发者,高效获取 DOM 元素是必备技能。以下是 JS 中核心的获取元素方法,分为两大系列: 一、getElementBy... 系列 传统方法,直接通过 DOM 接口访问,返回动态集合(元素变化会实时更新)。…...
HybridVLA——让单一LLM同时具备扩散和自回归动作预测能力:训练时既扩散也回归,但推理时则扩散
前言 如上一篇文章《dexcap升级版之DexWild》中的前言部分所说,在叠衣服的过程中,我会带着团队对比各种模型、方法、策略,毕竟针对各个场景始终寻找更优的解决方案,是我个人和我司「七月在线」的职责之一 且个人认为,…...