Kaldi sre10, sre16 數據格式

做個記錄, 給大多數跑腳本但是又沒有官方數據的朋友一起交流討論:

引用自己在知乎的回答:

跑kaldi的腳本到最後都是得用自己的數據去訓練去測試的, kaldi只需要三個文件utt2spk, spk2utt和wav.scp.

具體的你其實可以看看他們做數據的perl腳本,

我個人是用python寫一個腳本把數據集變成kaldi可讀的格式的, 我代碼弱智水平都能做,相信大牛的你們也沒問題的. 如果有需要, 後期我把代碼貼上來,只不過寫的太醜,不好意思放.

這裏的官方數據是NIST SRE 16的測試數據,來舉個例子方便對比, 我以SRE16 xvector的系統爲例. 這裏是測試數據, 因爲網上有pretrainModel, 直接下載下來用就好. 若不知道pretrain model在哪請參考我之前的博文, 有地址. 當然, 訓練數據也是跟如下的格式差不多. 自己訓練也可,但是最好數據集大一點,畢竟是supervised learning,就是能在data augmentation的表現中想必傳統的ivector更好

大概就是這種格式:

utt2spk:

官方數據:

1081_sre16-eeppywd_sre16 1081_sre16
1082_sre16-eefrtca_sre16 1082_sre16

1081_sre16代表說話人的ID或者名字, eeppywd_sre16代表音頻文件名, 因爲utt需要speakerID作爲前綴, 並用"-"鏈接,否則會報錯,所以這裏的utt 用 <speakerID> "-" <音頻文件名>來表示, utt2spk的數據文件就是<speakerID> <-> <音頻文件名> 空格 <speakerID>

自己數據:

1-SI_device3_P30001_XM3_advertisement_90 1

2-SI_device3_P30002_XM3_advertisement_90 2

3-SI_device3_P30003_XM3_advertisement_90 3

1代表speaker ID, SI_device3_P30001_XM3_advertisement_90 表示音頻文件名, 這裏的1其實跟P30001都是同一個人,只是我把文件夾的名字叫做1

 

spk2utt:(utt2spk反過來)

官方數據:

1081_sre16 1081_sre16-eeppywd_sre16
1082_sre16 1082_sre16-eefrtca_sre16
1083_sre16 1083_sre16-eedvtuu_sre16 1083_sre16-eefqdst_sre16 1083_sre16-eemtklx_sre16

utt2spk轉過來,可以直接用腳本

utils/utt2spk_to_spk2utt.pl utt2spk >spk2utt 轉過來得到

自己數據:

1 1-SI_device3_P30001_XM3_advertisement_90

2 2-SI_device3_P30002_XM3_advertisement_90

3 3-SI_device3_P30003_XM3_advertisement_90

 

 

wav.scp:

官方數據

1081_sre16-eeppywd_sre16 sph2pipe -f wav -p -c 1 /media/yongyu/data/LDC2018E30_2016_NIST_Speaker_Recognition_Evaluation_Test_Set/data/eval/R149_0_1/data/enrollment/eeaaeih-eezzfam/eeppywd_sre16.sph |
1082_sre16-eefrtca_sre16 sph2pipe -f wav -p -c 1 /media/yongyu/data/LDC2018E30_2016_NIST_Speaker_Recognition_Evaluation_Test_Set/data/eval/R149_0_1/data/enrollment/eeaaeih-eezzfam/eefrtca_sre16.sph |
1083_sre16-eedvtuu_sre16 sph2pipe -f wav -p -c 1 /media/yongyu/data/LDC2018E30_2016_NIST_Speaker_Recognition_Evaluation_Test_Set/data/eval/R149_0_1/data/enrollment/eeaaeih-eezzfam/eedvtuu_sre16.sph |

 

自己數據

1-SI_device3_P30001_XM3_advertisement_90 /media/yongyu/data/1/register/SI_device3_P30001_XM3_advertisement_90.wav

speakerID-音頻名 音頻路徑

注意:官方數據是用後綴爲.sph的文件格式存儲的, 需要用sph2pip去轉換爲wav,  但假如自己數據是wav文件,則不需要,直接放上去即可,最後面也不需要 "|"符號

這幾個文件的邏輯是, utt2spk跟spk2utt有種索引的關係, 然後wav.scp能根據索引找到對應的音頻的意思

 

trials文件:

官方數據:

1081_sre16 etabjvx_sre16 nontarget
1081_sre16 etacfan_sre16 nontarget
1081_sre16 etacpsa_sre16 nontarget
1081_sre16 etacrqg_sre16 nontarget
1081_sre16 etacyvp_sre16 nontarget
1081_sre16 etadgty_sre16 nontarget
1081_sre16 etadnlf_sre16 nontarget
1081_sre16 etaeiji_sre16 nontarget
1081_sre16 etaeiqa_sre16 nontarget
1081_sre16 etaenln_sre16 nontarget
1081_sre16 etaergg_sre16 nontarget

自己數據

這裏注意1 跟P30001代表同一個id爲1的人, 只是我把文件夾命名爲1了

1 SI_device3_P30001_XM3_advertisement_91 target

1 SI_device3_P30001_XM3_advertisement_92 target

1 SI_device3_P30001_XM3_advertisement_93 target

1 SI_device3_P30001_XM3_advertisement_94 target

1 SI_device3_P30001_XM3_advertisement_95 target

1 SI_device3_P30010_XM3_advertisement_91 nontarget

1 SI_device3_P30010_XM3_advertisement_92 nontarget

1 SI_device3_P30010_XM3_advertisement_93 nontarget

1 SI_device3_P30010_XM3_advertisement_94 nontarget

大概就是 把數據按每個人爲一個文件夾分配,然後每個測試數據都與所有文件夾遍歷比對一次, 如果比到自己的文件夾就是target否則是nontarget

總而言之, 言而總之,就是把你們自己已有的數據集分成3個文件 utt2spk, spk2utt, wav.scp即可, 其實這三個文件起了一個指明的作用,就是誰對應哪個音頻,在哪裏找到該音頻. 然後kaldi的提取mfcc的底層就會通過這些花裏胡哨的數據格式進行解析然後找到對應的音頻進行一系列花裏胡哨的操作後得到結果.

有問題請提問, 大家繼續交流

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章