【问题标题】:Audio Data Agmentation in pythonpython中的音频数据增强
【发布时间】:2022-01-22 09:12:27
【问题描述】:

我正在使用以下函数来增强从 wav 音频文件生成的音频数据。

def generate_augmented_data(file_path):
augmented_data = []
samples = load_wav(file_path,get_duration=False)
for time_value in [0.7, 1, 1.3]:
    for pitch_value in [-1, 0, 1]:
        time_stretch_data = librosa.effects.time_stretch(samples, rate=time_value)
        final_data = librosa.effects.pitch_shift(time_stretch_data, sr=sample_rate, n_steps=pitch_value)
        augmented_data.append(final_data)
return augmented_data

我还需要增加类标签并面临困难。 尝试在鳕鱼下面,但它没有让我得到预期的结果

## generating augmented data. 
def generate_augmented_data_label(file_path, label):
augmented_data = []
augmented_label = []
samples = load_wav(file_path,get_duration=False)
for time_value in [0.7, 1, 1.3]:
    for pitch_value in [-1, 0, 1]:
        time_stretch_data = librosa.effects.time_stretch(samples, rate=time_value)
        final_data = librosa.effects.pitch_shift(time_stretch_data, sr=sample_rate, n_steps=pitch_value)
        augmented_data.append(final_data)
        augmented_label.append(label)
return augmented_data,augmented_label

数据和标签的增强形状如下,

X_train.reset_index(inplace=True, drop=True)
y_train.reset_index(inplace=True, drop=True)
X_train_augmented_data = []
y_train_augmented_data = []
for i in range(len(X_train)):
#print(i)
   t1 = X_train.iloc[i]
   t2 = y_train[i]
   tmp1,tmp2 = generate_augmented_data_label(t1,t2)
#print(tmp1,tmp2)
   X_train_augmented_data.append(tmp1)
   y_train_augmented_data.append(tmp2)

len(X_train)
1600
len(y_train)
1600
print(len(X_train_augmented_data))
print(len(y_train_augmented_data))

在数据增强和额外的掩码步骤之后,形状如下

 augmented_train_data_mask = []
 for i in range(0,len(augmented_train_data_pad)):
   augmented_train_data_mask.append(list(map(bool,augmented_train_data_pad[i])))
   augmented_train_data_mask = np.array(augmented_train_data_mask)
 print(augmented_train_data_pad.shape)
 print(augmented_train_data_mask.shape)
 (14400, 17640)
 (14400, 17640)

但是,标签 len 仍然是 1600。后来当我将这些传递到 LSTM 模型时,我收到了形状不匹配错误。

ValueError: Data cardinality is ambiguous:
x sizes: 14400, 14400
y sizes: 1600
Make sure all arrays contain the same number of samples.

寻求一些帮助来解决这个问题。

【问题讨论】:

    标签: python lstm speech-recognition data-augmentation


    【解决方案1】:

    您可以使用 numpy repeat 函数来复制您的 numpy 数组。

    例如: 在: arr = np.arange(3) 输出:数组([0, 1, 2])

    在:arr.repeat(3) 输出:数组([0, 0, 0, 1, 1, 1, 2, 2, 2])

    希望这能满足您的要求。

    【讨论】:

      【解决方案2】:

      您可以参考链接:

      #https://www.geeksforgeeks.org/python-add-similar-value-multiple-times-in-list/


      type(y_train)= panda series 
      
      from itertools import repeat
      
      new_label=[]
      
      for index, value in y_train.items():
          new_label.extend(repeat(value, 2))
      
      len(new_label)
      

      【讨论】:

      • 谢谢@Ye.Feng​​span>
      猜你喜欢
      • 2017-12-17
      • 1970-01-01
      • 2020-07-07
      • 1970-01-01
      • 2016-05-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多