音频入门(二):音频数据增强

news/2025/1/22 20:29:32/

本文介绍了一些常见的音频数据增强方法,并给出了代码实现。

目录

一、简介

二、代码

1. 安装必要的库

2. 代码

3. 各函数的介绍

4. 使用方法

 参考:


一、简介

音频数据增强是机器学习和深度学习领域中用于改善模型性能和泛化能力的技术。

使用数据增强的好处有:

  • 泛化能力:提高模型对未见数据的处理能力。
  • 减少过拟合:通过增加数据多样性来降低训练误差。
  • 模拟真实性:模拟现实世界中的音频变化。
  • 提升鲁棒性:使模型对噪声和失真更加不敏感。
  • 小数据集扩展:在数据量有限时增加有效样本。
  • 性能提升:通常能提高模型的测试性能。
  • 适应录音条件:适应不同的录音环境和设备。
  • 半监督/无监督学习:增强未标记数据的利用。
  • 可解释性:帮助理解模型决策。
  • 跨领域应用:增强模型在不同领域的适用性。

二、代码

1. 安装必要的库

pip install librosa soundfile

2. 代码

这里介绍几种常用的数据增强,代码如下:


import librosa
import numpy as np
import soundfile as sf# 载入音频文件
def load_audio_file(file_path, sr=None):audio, sample_rate = librosa.load(file_path, sr=sr)return audio, sample_rate# 时间拉伸
def time_stretch(audio, rate):return librosa.effects.time_stretch(audio, rate=rate)# 音高变换
def pitch_shift(audio, sample_rate, n_steps):return librosa.effects.pitch_shift(audio, sr=sample_rate, n_steps=n_steps)# 添加噪声
def add_noise(audio, noise_factor):noise = np.random.normal(0, 1, audio.shape)noisy_audio = audio + noise_factor * noisereturn noisy_audio# 保存音频
def save_audio(file_path, audio, sample_rate):sf.write(file_path, audio, sample_rate)

3. 各函数的介绍

  1. load_audio_file(file_path, sr=None)

    • 载入指定路径 file_path 的音频文件。
    • sr 参数用于指定音频的采样率(sampling rate)。如果未指定,将使用原始音频文件的采样率。
    • 返回音频信号 audio 和其采样率 sample_rate
  2. time_stretch(audio, rate)

    • 对音频信号 audio 进行时间拉伸,改变其持续时间而不改变音高。
    • rate 参数控制拉伸的程度,例如 rate=1.2 表示音频播放速度提高到原来的1.2倍。
  3. pitch_shift(audio, sample_rate, n_steps)

    • 对音频信号 audio 进行音高变换,改变音高而不改变播放速度。
    • sample_rate 是音频的采样率。
    • n_steps 是半音阶的步长,正值表示提高音高,负值表示降低音高。
  4. add_noise(audio, noise_factor)

    • 向音频信号 audio 添加高斯噪声。
    • noise_factor 参数控制噪声的强度,较大的值会导致更多的噪声被添加到音频中。
  5. save_audio(file_path, audio, sample_rate)

    • 将处理后的音频信号 audio 保存到文件 file_path
    • sample_rate 是音频的采样率,确保保存的音频文件具有正确的采样率。

4. 使用方法

使用上述的函数可以创建一个音频增强的pipeline,以提高音频分类模型的泛化能力和鲁棒性,以下是一个简单的使用pipeline:

# 加载音频文件
audio_path = 'path_to_your_audio_file.wav'
audio, sr = load_audio_file(audio_path)# 时间拉伸:播放速度提高20%
stretched_audio = time_stretch(audio, rate=1.2)# 音高变换:降低半音
pitch_shifted_audio = pitch_shift(audio, sr, n_steps=-1)# 添加噪声:噪声强度为原始音频幅度的0.01倍
noisy_audio = add_noise(audio, noise_factor=0.01)# 保存增强后的音频
save_audio('enhanced_audio.wav', stretched_audio, sr)
save_audio('pitch_shifted_audio.wav', pitch_shifted_audio, sr)
save_audio('noisy_audio.wav', noisy_audio, sr)

 增强后的音频,可以用于音频分类/声纹识别等模型的训练中,比如我们上一篇博客《音频入门(一):音频基础知识与分类的基本流程》中介绍的音频分类算法,就可以使用这些增强的数据来提高模型的泛化能力:

  • 数据增强使得模型能够学习到在不同条件下音频特征的一致性,从而提高其对新情况的适应能力。
  • 数据增强使模型在训练过程中接触到各种扰动,迫使模型学习到更加鲁棒的特征表示,这些特征与音频的本质属性相关,而不受具体录音条件的影响。
  • 当原始数据集较小或包含的样本多样性不足时,模型可能会学习到数据中的特定噪声或异常值,导致过拟合。数据增强通过增加样本数量和多样性,帮助模型捕捉到更一般化的特征。
  • 现实世界中的音频记录会受到多种因素的影响,如背景噪声、不同的录音设备和环境。增强后的音频更贴近真实世界的复杂性,使模型在面对实际应用时更加稳定。
  • 通过增强技术,模型学习到的类内样本的分布更加紧凑,减少了类内方差,有助于模型更好地区分不同类别。
  • 增强后的样本可能在特征空间中分布得更广,有助于增加不同类别之间的距离,从而提高分类的准确性。
  • 数据增强有助于模型学习到更加清晰和准确的决策边界,使得模型在面对边缘样本或困难样本时,能够做出更准确的分类决策。
  • 数据增强有助于模型学习到更加清晰和准确的决策边界,使得模型在面对边缘样本或困难样本时,能够做出更准确的分类决策。

5. 增强效果可视化

原始音频(两通道):

增强后的音频(单通道): 

 

参考:

1. Librosa: https://librosa.org/

2. python-soundfile — python-soundfile 0.11.0 documentation


http://www.ppmy.cn/news/1565302.html

相关文章

25/1/21 算法笔记<ROS2> 话题通信接口

在 ROS 2 中,通信接口是节点之间进行数据交换的核心机制。ROS 2 提供了多种通信接口,包括话题(Topic)、服务(Service)、动作(Action)和参数(Parameter)。每种…

android studio 工具.gradle目录修改

1、关闭工具 2、找到C:\\users\admin\.gradle目录,将其剪切到目标位置,如d:\\android\.gradle。 3、修改环境变量,增加系统变量:GRADLE_USER_HOME,目录为:d:\\android\.gradle。 4、打开Android studio&…

python学opencv|读取图像(四十一 )使用cv2.add()函数实现各个像素点BGR叠加

【1】引言 前序已经学习了直接在画布上使用掩模,会获得彩色图像的多种叠加效果,相关文章链接为: python学opencv|读取图像(四十)掩模:三通道图像的局部覆盖-CSDN博客 这时候如果更进一步,直接…

YOLOv9改进,YOLOv9检测头融合DiverseBranchBlock(多样分支块),适合目标检测、分割任务

摘要 一种卷积神经网络(ConvNet)的通用构建模块,以在不增加推理时间成本的情况下提高性能。该模块被命名为多样分支块(Diverse Branch Block,DBB),通过结合不同尺度和复杂度的多样分支来丰富特征空间,包括卷积序列、多尺度卷积和平均池化,从而增强单个卷积的表示能力…

人形机器人将制造iPhone!

前言 优必选机器人和富士康通过一项突破性的合作伙伴关系,正在将先进的人形机器人(如Walker S1及其升级版Walker S2)整合到制造流程中,以改变iPhone的生产方式。这一合作旨在通过提升机器人能力、优化工作流程以及实现更智能的自动…

VR vs AR:哪种技术更有潜力改变未来?

AR与VR的未来之争 在我们的日常生活中,技术的更新换代仿佛只需一瞬间。而在众多技术中,虚拟现实(VR)和增强现实(AR)如同璀璨的明星,吸引着无数眼球。你是否曾因选择哪种技术更具潜力而感到困惑…

C++入门 详细版

欢迎来到干货小仓库!! 一分耕耘一分收获,离自己的目标越来越近。 passion!passion!!passion!!! 1.命名空间 由于C语言无法避免名字或者函数重复等问题,当有多…

UDP協議與代理IP介紹

UDP,全稱是用戶數據報協議(User Datagram Protocol),是Internet協議套組的一部分,與TCP協議一道工作。與TCP相比,UDP可以理解為一個更“羽量級”的協議。它不需要像TCP那樣在數據傳輸開始之前建立連接&…