在這篇文章中,我將向您展示如何使用音頻文件進行數據增強,以便能夠在機器學習數據集中生成更多樣本。
數據增強是一種生成合成數據的方法,即通過調整原始樣本來創建新樣本。這樣我們就可獲得大量的數據。這不僅增加了數據集的大小,還提供了單個樣本的多個變體,這有助於我們的機器學習模型避免過度擬合。
我們將使用free-spoken-digit-dataset數據集(github.com/Jakobovski/free-spoken-digit-dataset/tree/master/recordings)。它是語音數字的免費音頻數據集。它包含4個人的2000段錄音(每個人每個數字讀50遍)。
本文使用到的Python庫為librosa、 IPython.display.audio 和 matplotlib。
首先導入庫
可視化原始樣本
我們將使用librosa讀取.wav文件,並使用matplotlib生成wav文件的頻譜圖。下面是可視化的Python代碼
添加噪聲
這個過程涉及到噪聲的添加,即在樣本中加入白噪聲。白噪聲是隨機樣本按一定的間隔分布,均值為0,標準差為1。
為了實現這一點,我們將使用numpy的常規方法生成上述分布,並將其添加到我們的原始樣本:
Time Shifting
我們通過sample_rate/10因子來改變波形。這將使波沿時間軸向右移動給定的因子。
為了實現這一點,我使用了numpy的roll函數來生成時移。
Time Stretching
這是在不影響音高的情況下改變聲音速度/持續時間的過程。可以使用librosa的time_stretch函數來實現。
Time_stretch函數接收波形樣本和一個用於拉伸的因子作為輸入。我發現這個因子應該是0.4,因為它與原始樣本的差異很小
Pitch Shifting
這是樂器中音高縮放的一種實現。是在不影響聲音速度的情況下更改音高的過程。
我們將再次使用librosa的pitch_shift函數。