除了模型结构和超参数,数据是值得重视的。
因为垃圾进,垃圾出。
数据量不够是常见的问题,使用数据增强的方式产生合成新数据,从某种程度上可以提高模型的泛化能力。
这里介绍一些基本的音频信号增强方法。
语音增强方法
添加噪声(noise injection),时间平移(shifting time), 改变音高和速度(changing pitch and speed).
使用Numpy添加噪声和时间平移;
使用librosa修改pitch和speed;
noise injection
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
Shifting Time
向左右平移数秒,右平移在左边填0,左平移在右边填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
Changing Pitch
随机修改音高
import librosa
def manipulate(data, sampling_rate, pitch_factor):
return librosa.effects.pitch_shift(data, sampling_rate, pitch_factor)
Changing Speed
修改速度
import librosa
def manipulate(data, speed_factor):
return librosa.effects.time_stretch(data, speed_factor)
译自:Data Augmentation for Audio
作者: Edward Ma
原文链接:https://medium.com/@makcedward/data-augmentation-for-audio-76912b01fdf6