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

打印 上一主题 下一主题

主题 1049|帖子 1049|积分 3147

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本文介绍了一些常见的音频数据增强方法,并给出了代码实现。
  目录
一、简介
二、代码
1. 安装必要的库
2. 代码
3. 各函数的介绍
4. 使用方法
 参考:


一、简介

音频数据增强是机器学习和深度学习范畴中用于改善模型性能和泛化能力的技能。
使用数据增强的利益有:


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

1. 安装必要的库

  1. pip install librosa soundfile
复制代码
2. 代码

这里介绍几种常用的数据增强,代码如下:
  1. import librosa
  2. import numpy as np
  3. import soundfile as sf
  4. # 载入音频文件
  5. def load_audio_file(file_path, sr=None):
  6.     audio, sample_rate = librosa.load(file_path, sr=sr)
  7.     return audio, sample_rate
  8. # 时间拉伸
  9. def time_stretch(audio, rate):
  10.     return librosa.effects.time_stretch(audio, rate=rate)
  11. # 音高变换
  12. def pitch_shift(audio, sample_rate, n_steps):
  13.     return librosa.effects.pitch_shift(audio, sr=sample_rate, n_steps=n_steps)
  14. # 添加噪声
  15. def add_noise(audio, noise_factor):
  16.     noise = np.random.normal(0, 1, audio.shape)
  17.     noisy_audio = audio + noise_factor * noise
  18.     return noisy_audio
  19. # 保存音频
  20. def save_audio(file_path, audio, sample_rate):
  21.     sf.write(file_path, audio, sample_rate)
复制代码
3. 各函数的介绍


  • load_audio_file(file_path, sr=None)

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

  • time_stretch(audio, rate)

    • 对音频信号 audio 进行时间拉伸,改变其持续时间而不改变音高。
    • rate 参数控制拉伸的水平,例如 rate=1.2 表现音频播放速度提高到原来的1.2倍。

  • pitch_shift(audio, sample_rate, n_steps)

    • 对音频信号 audio 进行音高变动,改变音高而不改变播放速度。
    • sample_rate 是音频的采样率。
    • n_steps 是半音阶的步长,正值表现提高音高,负值表现降低音高。

  • add_noise(audio, noise_factor)

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

  • save_audio(file_path, audio, sample_rate)

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

4. 使用方法

使用上述的函数可以创建一个音频增强的pipeline,以提高音频分类模型的泛化能力和鲁棒性,以下是一个简单的使用pipeline:
  1. # 加载音频文件
  2. audio_path = 'path_to_your_audio_file.wav'
  3. audio, sr = load_audio_file(audio_path)
  4. # 时间拉伸:播放速度提高20%
  5. stretched_audio = time_stretch(audio, rate=1.2)
  6. # 音高变换:降低半音
  7. pitch_shifted_audio = pitch_shift(audio, sr, n_steps=-1)
  8. # 添加噪声:噪声强度为原始音频幅度的0.01倍
  9. noisy_audio = add_noise(audio, noise_factor=0.01)
  10. # 保存增强后的音频
  11. save_audio('enhanced_audio.wav', stretched_audio, sr)
  12. save_audio('pitch_shifted_audio.wav', pitch_shifted_audio, sr)
  13. save_audio('noisy_audio.wav', noisy_audio, sr)
复制代码
 增强后的音频,可以用于音频分类/声纹识别等模型的训练中,比如我们上一篇博客《音频入门(一):音频基础知识与分类的基本流程》中介绍的音频分类算法,就可以使用这些增强的数据来提高模型的泛化能力:


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

原始音频(两通道):

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


 

参考:

1. Librosa: https://librosa.org/
2. python-soundfile — python-soundfile 0.11.0 documentation


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

钜形不锈钢水箱

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表