1. 程式人生 > 其它 >https://blog.csdn.net/u011930705/article/details/85340905 【kaldi】【kaldi】聲紋識別之X-vector聲紋識別之X-vector

https://blog.csdn.net/u011930705/article/details/85340905 【kaldi】【kaldi】聲紋識別之X-vector聲紋識別之X-vector

一.搞了幾天,首先說一下X-vector的優勢:

1.訓練速度非常快

2.無需特定語種的訓練集,由於設定一個embedding層進行提取特徵直接進行plda打分

3.識別率不錯

二.Kaldi中有現成的例子,可供研究

https://github.com/kaldi-asr/kaldi/tree/master/egs/sre16/v2

https://github.com/kaldi-asr/kaldi/tree/master/egs/voxceleb/v2

上面是kaldi的兩個例子

根據《X-VECTORS: ROBUST DNN EMBEDDINGS FOR SPEAKER RECOGNITION》


簡要解釋上圖X-vector的網路結構,如上圖前5層是幀級別,然後做了池化後插入兩層段級別的embedding,使用segment6這層作為提取xvector特徵,該特徵可以當做ivector進行plda打分,最後一層是softmax層對於訓練集中所有的說話人目標。比起BNF特徵提取要容易的多,BNF需要訓練基於音素的聲學模型,而且提取後的特徵又需要進行UBM-ivector過程,相當耗時。

詳細細節可以看一下論文描述,這裡僅記錄下流程。

程式碼部分
首先kaldi這裡程式碼好像有點問題,不知道是不是我這裡版本的問題,具體在訓練xvector部分steps/libs/nnet3/train/frame_level_objf/common.py中定位到common_lib.execute_command(

"""{command} {combine_queue_opt} {dir}/log/combine.log \

nnet3-combine 。。。

這裡刪掉#--max-objective-evaluations={max_objective_evaluations} \

# max_objective_evaluations=max_objective_evaluations,

這兩行程式碼,看了下nnet3-combine選項中沒有這個引數,想必是該指令碼作者優化了原始碼。

開啟voxceleb的v2中的run.sh指令碼

從stage順序看:

準備語料訓練集以及測試集,可以是不同語言越多越好
使用mfcc提取特徵,嘗試過替換Mel-filter bank特徵效果並不好,主要也沒有調節各種引數
利用迴響和三種噪音增強了訓練資料,測試了增強於非增強的效果還是非常明顯
這部分對增強的資料進行了隨機篩選於原始資料相同數量級的資料提取特徵並於原始資料結合
做了歸一化移除了靜音幀
這裡移除了小於min_len時長的語音段,也捨棄了小於min_num_utts段數音訊的說話人資訊
生成egs並訓練xvector網路
利用embedding層提取xvector特徵
lda降維然後再用plda打分
計算eer
————————————————
版權宣告:本文為CSDN博主「小龍2018」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處連結及本宣告。
原文連結:https://blog.csdn.net/u011930705/article/details/85340905