音频数据增强

引言

尽管调整模型架构和超参数是一个搭建完美模型的成功因素,数据科学往往需要关注数据。无论你搭建的模型多么amazing,但是GIGO(garbage in,garbage out)必须是我们需要考虑的。

同时,在实际的数据工程中,数据的缺乏往往是一个很常见的问题。数据增强方法可以通过已有的数据来产生相似的数据,从而提高模型的鲁棒性和泛华能力。本文旨在介绍一些论文的语音增强方法,语音增强工具。

数据增强

常规增强方法1

参考文献:https://blog.csdn.net/wudibaba21/article/details/110843874

                 https://www.kaggle.com/CVxTz/audio-data-augmentation

1.插入随机噪音

import numpy as np
def manipulate(data, noise_factor):
    noise = np.random.randn(len(data))
    augmented_data = data + noise_factor * noise
    # Cast back to same data type
    augmented_data = augmented_data.astype(type(data[0]))
    return augmented_data

2.转移时间

转移时间的想法非常简单。 它只是随机将音频向左/向右移动。 如果将音频向左(快进)移动 x 秒,则前 x 秒将标记为 0(即静音)。 如果将音频向右(向前)移动 x 秒,最后 x 秒将标记为 0(即静音)。

import numpy as np
def manipulate(data, sampling_rate, shift_max, shift_direction):
    shift = np.random.randint(sampling_rate * shift_max)
    if shift_direction == 'right':
        shift = -shift
    elif self.shift_direction == 'both':
        direction = np.random.randint(0, 2)
        if direction == 1:
            shift = -shift
    augmented_data = np.roll(data, shift)
    # Set to silence for heading/ tailing
    if shift > 0:
        augmented_data[:shift] = 0
    else:
        augmented_data[shift:] = 0
    return augmented_data

3.改变音高

import librosa
def manipulate(data, sampling_rate, pitch_factor):
    return librosa.effects.pitch_shift(data, sampling_rate, pitch_factor)

4.变速

import librosa
def manipulate(data, speed_factor):
    return librosa.effects.time_stretch(data, speed_factor)

数据增强方法2

Google Brain 的SpecAugment 1.时域频域掩盖,2.时间扭曲

Specaugment on Large Scale Datasets

                                                    (音频波形图转为频谱图)

给定一个频谱图,您可以将其视为一个图像,其中 x 轴是时间,而 y 轴是频率。

                                        Spectrogram representation (librosa)

直观地说,它提高了训练速度,因为波形数据到频谱图数据之间没有数据转换,而是增强了频谱图数据。

1.时间扭曲Time Warping

将选择一个随机点并以距离 w 向左或向右扭曲,该距离从 0 到沿该线的时间扭曲参数 W 的均匀分布中选择。

2.频域掩盖 Frequency Masking

205 / 5000

 频道域[f0, f0 + f) 被屏蔽。 f 是从 0 到频率掩膜参数 F 的均匀分布中选择的,f0 是从 (0, ν - f) 中选择的,其中 ν 是频率通道的数量比如80维的FBank。

3.时域掩盖 Time Masking

t 个连续的时间步 [t0, t0 + t) 被屏蔽。 t 选自从 0 到时间掩码参数 T 的均匀分布,并且 t0 选自 [0, T − t)。其中T是音频时长按分帧手段获取的长度。

                        (从上到下为没有增强的频谱图、time warp后的频谱图、频域掩盖、时域掩盖后的频谱图 

增加策略组合

  • W: Time Warping Parameter
  • F: Frequency Masking Parameter
  • mF: Number of frequency masking applied
  • T: Time Masking Parameter
  • mT: Number of time masking applied

论文上的实验效果

 注意点:

  1. 时间扭曲不会太多提升模型表现,当资源有限时,建立抛弃改方法
  2. Label smoothing 使训练更加平滑
  3. 数据增强可以使over-fit 问题变为under-fit 

数据增强工具包

  1. https://github.com/makcedward/nlpaug 包含自然语言,语音方面
  2. https://github.com/xiexukang/AugLy 包含图像,文本语音方向
  3. https://github.com/asteroid-team/torch-audiomentations
  • 3
    点赞
  • 55
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
音频数据增强是一种常见的技术,用于增加训练集的多样性和提高音频模型的性能。在Python中,可以使用一些库来实现音频数据增强,如librosa、pydub和audiomentations等。 下面是一些常见的音频数据增强技术及其在Python中的实现方式: 1. 音量调整:可以使用pydub库中的`AudioSegment`类来调整音频的音量。通过调整音频的增益值,可以增加或减少音频的音量。 ```python from pydub import AudioSegment audio = AudioSegment.from_file("input.wav") louder_audio = audio + 10 # 增加10 dB的音量 quieter_audio = audio - 10 # 减少10 dB的音量 louder_audio.export("louder.wav", format="wav") quieter_audio.export("quieter.wav", format="wav") ``` 2. 音频剪切:可以使用pydub库来剪切音频。通过指定开始时间和结束时间,可以截取音频的特定部分。 ```python from pydub import AudioSegment audio = AudioSegment.from_file("input.wav") trimmed_audio = audio[5000:10000] # 截取从第5秒到第10秒的部分 trimmed_audio.export("trimmed.wav", format="wav") ``` 3. 音频速度调整:可以使用pydub库来调整音频的播放速度。通过改变音频的采样率,可以加快或减慢音频的播放速度。 ```python from pydub import AudioSegment audio = AudioSegment.from_file("input.wav") faster_audio = audio._spawn(audio.raw_data, overrides={"frame_rate": int(audio.frame_rate * 1.2)}) # 加快播放速度20% slower_audio = audio._spawn(audio.raw_data, overrides={"frame_rate": int(audio.frame_rate * 0.8)}) # 减慢播放速度20% faster_audio.export("faster.wav", format="wav") slower_audio.export("slower.wav", format="wav") ``` 4. 音频噪声添加:可以使用audiomentations库来添加噪声到音频中。该库提供了多种噪声类型可供选择。 ```python import audiomentations as A import soundfile as sf augmenter = A.Compose([ A.AddGaussianNoise(p=0.5), A.AddBackgroundNoise("path/to/noise/folder", p=0.5) ]) audio, sample_rate = sf.read("input.wav") augmented_audio = augmenter(audio, sample_rate=sample_rate) sf.write("augmented.wav", augmented_audio, sample_rate) ``` 这些只是一些常见的音频数据增强技术示例,实际上还有许多其他技术和库可供使用。根据你的需求,你可以选择适合你的音频数据增强方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值