Sincnet是用於處理原始音頻樣品的神經體系結構。這是一個新穎的捲積神經網絡(CNN),它鼓勵第一卷積層發現更有意義的過濾器。 SINCNET基於實現帶通濾波器的參數化SINC函數。
與標準CNN相比,學習每個濾波器的所有元素,只有使用建議的方法直接從數據中學習了低和高截止頻率。這提供了一種非常緊湊,有效的方法,可以得出專門針對所需應用的定製過濾器庫。
該項目釋放了一系列代碼和實用程序,以使用SINCNET執行說話者識別。提供了使用TIMIT數據庫標識的說話者識別的示例。如果您對應用於語音識別的SINCNET感興趣,則可以查看Pytorch-Kaldi Github存儲庫(https://github.com/mravanelli/pytorch-kaldi)。

看看我們的視頻介紹Sincnet
如果您使用此代碼或部分代碼,請引用我們!
Mirco Ravanelli,Yoshua Bengio,“與Sincnet的Raw Woveform的發言人” Arxiv
conda install -c conda-forge pysoundfile )Sincnet也在語音腦(https://speechbrain.github.io/)項目中實施。我們鼓勵您也要研究它!它是一個基於Pytorch的一合化語音處理工具包,目前支持語音識別,揚聲器識別,SLU,語音增強,語音分離,多微米光音信號處理。它旨在靈活,易於使用,模塊化且文獻良好。一探究竟。
2019年2月16日:
即使代碼可以輕鬆地適應任何語音數據集,但在文檔的以下部分,我們提供了一個基於流行的Timit數據集的示例。
1。運行TIMIT數據準備。
此步驟對於存儲一個圓錐形版的版本是必要的,在該版本中,刪除了開始和末端的沉默,並將每個語音發音的幅度歸一化。為此,運行以下代碼:
python TIMIT_preparation.py $TIMIT_FOLDER $OUTPUT_FOLDER data_lists/TIMIT_all.scp
在哪裡:
2。運行揚聲器ID實驗。
python speaker_id.py --cfg=cfg/SincNet_TIMIT.cfg
網絡可能需要幾個小時才能收斂(取決於您的GPU卡的速度)。在我們的情況下,使用NVIDIA TITAN X ,完整的培訓大約需要24小時。如果在集群中使用代碼,則至關重要的是將標準化數據集複製到本地節點,因為代碼的當前版本需要經常訪問存儲的WAV文件。請注意,在此版本中未實現幾種提高代碼速度的可能優化,因為不超出此工作的範圍。
3。結果。
結果將保存到CFG文件中指定的output_folder中。在此文件夾中,您可以找到一個文件( res.res )匯總培訓和測試錯誤率。 Model_raw.pkl是最後一次迭代後保存的SINCNET模型。使用上面指定的CFG文件,我們獲得以下結果:
epoch 0, loss_tr=5.542032 err_tr=0.984189 loss_te=4.996982 err_te=0.969038 err_te_snt=0.919913
epoch 8, loss_tr=1.693487 err_tr=0.434424 loss_te=2.735717 err_te=0.612260 err_te_snt=0.069264
epoch 16, loss_tr=0.861834 err_tr=0.229424 loss_te=2.465258 err_te=0.520276 err_te_snt=0.038240
epoch 24, loss_tr=0.528619 err_tr=0.144375 loss_te=2.948707 err_te=0.534053 err_te_snt=0.062049
epoch 32, loss_tr=0.362914 err_tr=0.100518 loss_te=2.530276 err_te=0.469060 err_te_snt=0.015152
epoch 40, loss_tr=0.267921 err_tr=0.076445 loss_te=2.761606 err_te=0.464799 err_te_snt=0.023088
epoch 48, loss_tr=0.215479 err_tr=0.061406 loss_te=2.737486 err_te=0.453493 err_te_snt=0.010823
epoch 56, loss_tr=0.173690 err_tr=0.050732 loss_te=2.812427 err_te=0.443322 err_te_snt=0.011544
epoch 64, loss_tr=0.145256 err_tr=0.043594 loss_te=2.917569 err_te=0.438507 err_te_snt=0.009380
epoch 72, loss_tr=0.128894 err_tr=0.038486 loss_te=3.009008 err_te=0.438005 err_te_snt=0.019481
....
epoch 320, loss_tr=0.033052 err_tr=0.009639 loss_te=4.076542 err_te=0.416710 err_te_snt=0.006494
epoch 328, loss_tr=0.033344 err_tr=0.010117 loss_te=3.928874 err_te=0.415024 err_te_snt=0.007215
epoch 336, loss_tr=0.033228 err_tr=0.010166 loss_te=4.030224 err_te=0.410034 err_te_snt=0.005051
epoch 344, loss_tr=0.033313 err_tr=0.010166 loss_te=4.402949 err_te=0.428691 err_te_snt=0.009380
epoch 352, loss_tr=0.031828 err_tr=0.009238 loss_te=4.080747 err_te=0.414066 err_te_snt=0.006494
epoch 360, loss_tr=0.033095 err_tr=0.009600 loss_te=4.254683 err_te=0.419954 err_te_snt=0.005772
收斂最初非常快(請參閱前30個時期)。之後,出現了句子錯誤率性能中的性能提高和振盪。儘管這些振盪可以觀察到後續時期的平均改善趨勢。在這項實驗中,我們在Epoch 360上停止了培訓。 Res.res.res.文件的字段具有以下含義:
您可以在此處找到我們訓練有素的模型。
要查看SINCNET實現,您應該打開文件dnn_models.py並讀取SINCNET , SINC_CONV和函數SINC的類。
在此存儲庫中,我們將Timit數據集用作教程,以顯示SINCNET的工作原理。使用當前版本的代碼,您可以輕鬆使用其他語料庫。為此,您應該在輸入特定於Corpora的輸入文件(以WAV格式)和您自己的標籤中提供。因此,您應該將路徑修改為在data_lists文件夾中找到的 *.scp文件。
要將正確標籤分配給每個句子,您還必須修改字典“ timit_labels.npy ”。標籤是在Python字典中指定的,該字典包含句子ID作為鍵(例如“ SI1027 ”)和Speaker_IDS作為值。每個揚聲器_ID都是一個整數,範圍從0到N_SPKS-1。在TIMIT數據集中,您可以輕鬆地從路徑中檢索揚聲器ID(例如, train/dr1/fcjf0/si1027.wav是句子_id“ si1027 ”,由揚聲器“ fcjf0 ”說明)。對於其他數據集,您應該能夠以包含揚聲器和句子ID對的字典來檢索。
然後,應根據您的新路徑修改配置文件( CFG/SINCNET_TIMIT.CFG )。還請記住,根據數據集中的揚聲器n_spk的數量,更改字段“ class_lay = 462 ”。
本文中使用的LibrisPeech數據集的版本可應要求提供。在我們的工作中,我們只為每個說話者使用了12-15秒的培訓材料,並處理了原始的LibrisPeech句子以執行幅度歸一化。此外,我們使用了一個簡單的基於能量的VAD來避免在每個句子的開頭和結尾處沉默,並在多個塊中分裂的句子,這些句子包含更長的寂靜
[1] Mirco Ravanelli,Yoshua Bengio,“與Sincnet的Raw Woveform的說話者” Arxiv