在機器學習任務中,存在數據集類別失衡的情況,那麼解決類別失衡的方法是1.上採樣即:擴充樣本較少的類數據直到跟樣本多的類差不多爲止;或者用下采樣即:在樣本多的類中隨機剔除部分數據。
針對上採樣的話,在圖像領域可以有的操作是:平移、旋轉、加噪等,在語音領域可以有的操作是裁剪、旋轉、調音、加噪。
1. 裁剪(clip):即截取音頻段
# 將原始視頻裁剪20s
import librosa
from scipy.io import wavfile
y, sr = librosa.load('test.mp3')
wavfile.write('clip_20s.mp3', sr, y[20*sr:40*sr])
2. 旋轉(roll):即平移
# 將音頻向右移動10s,最後10s將挪到最前面
import librosa
import numpy as np
from scipy.io import wavfile
y, sr = librosa.load('clip_20s.mp3')
y = np.roll(y, sr*10)
wavfile.write('roll.mp3', sr, y)
3. 調音(tune)
import librosa
import cv2
from scipy.io import wavfile
y, sr = librosa.load('clip_20s.mp3')
ly = len(y)
y_tune = cv2.resize(y, (1, int(ly*1.2))).squeeze()
lc = len(y_tune)-ly
y_tune = y_tune[int(lc/2):int(lc/2)+ly]
wavfile.write('tune.mp3', sr, y)
4. 加噪(noise):爲音頻加入白噪聲,呲呲響的那種哦!
import librosa
import numpy as np
from scipy.io import wavfile
y, sr = librosa.load('clip_20s.mp3')
wn = np.random.randn(len(y))
y = np.where(y != 0.0, y + 0.02 * wn, 0.0) # 噪聲不要添加到0上!np.where(condition,x,y)condition爲true取x,否者取y
wavfile.write("add_noise.mp3", sr, y) # 寫入音頻