經(jīng)典的深度學習網(wǎng)絡AlexNet使用數(shù)據(jù)擴充(Data Augmentation)的方式擴大數(shù)據(jù)集朗恳,取得較好的分類效果。在深度學習的圖像領域中艘虎,通過平移棺克、 翻轉悠垛、加噪等方法進行數(shù)據(jù)擴充。但是娜谊,在音頻(Audio)領域中确买,如何進行數(shù)據(jù)擴充呢?
Audio
音頻的數(shù)據(jù)擴充纱皆,主要有以下四種方式:
- 音頻剪裁(Clip)
- 音頻旋轉(Roll)
- 音頻調(diào)音(Tune)
- 音頻加噪(Noise)
音頻解析基于librosa音頻庫湾趾;矩陣操作基于scipy和numpy科學計算庫。
以下是Python的實現(xiàn)方式:
音頻剪裁
import librosa
from scipy.io import wavfile
y, sr = librosa.load("../data/love_illusion.mp3") # 讀取音頻
print y.shape, sr
wavfile.write("../data/love_illusion_20s.mp3", sr, y[20 * sr:40 * sr]) # 寫入音頻
音頻旋轉
import librosa
import numpy as np
from scipy.io import wavfile
y, sr = librosa.load("../data/raw/love_illusion_20s.mp3") # 讀取音頻
y = np.roll(y, sr*10)
print y.shape, sr
wavfile.write("../data/raw/xxx_roll.mp3", sr, y) # 寫入音頻
音頻調(diào)音派草,注:cv庫的resize函數(shù)含有插值功能搀缠。
import cv2
import librosa
from scipy.io import wavfile
y, sr = librosa.load("../data/raw/love_illusion_20s.mp3") # 讀取音頻
ly = len(y)
y_tune = cv2.resize(y, (1, int(len(y) * 1.2))).squeeze()
lc = len(y_tune) - ly
y_tune = y_tune[int(lc / 2):int(lc / 2) + ly]
print y.shape, sr
wavfile.write("../data/raw/xxx_tune.mp3", sr, y) # 寫入音頻
音頻加噪,注:在添加隨機噪聲時近迁,保留0值艺普,否則刺耳難忍!
import librosa
from scipy.io import wavfile
import numpy as np
y, sr = librosa.load("../data/raw/love_illusion_20s.mp3") # 讀取音頻
wn = np.random.randn(len(y))
y = np.where(y != 0.0, y + 0.02 * wn, 0.0) # 噪聲不要添加到0上鉴竭!
print y.shape, sr
wavfile.write("../data/raw/love_illusion_20s_w.mp3", sr, y) # 寫入音頻
歡迎Follow我的GitHub:https://github.com/SpikeKing
By C. L. Wang @ 美圖云事業(yè)部
OK, that's all! Enjoy it!