Giter VIP home page Giter VIP logo

kaldi_x-vector_aishell's Introduction

使用kaldi中的x-vector在aishell数据库上建立说话人识别系统

写在前面

整个系统可以分为三个部分,第一,前端预处理部分,主要包括mfcc特征提取,VAD,数据扩充(增加混响、增加不同类型的噪声)等;第二,训练基于TDNN的特征提取器,该结构生成说话人表征,说话人表征也可以被称为embedding、x-vector;第三,后端处理,对于说话人表征,采用LDA进行降维并训练PLDA模型对测试对进行打分。

x-vector的论文发表在ICASSP 2018,kaldi的核心开发者Daniel Povey也是这篇论文的作者之一,论文来链接如下:

X-VECTORS: ROBUST DNN EMBEDDINGS FOR SPEAKER RECOGNITION

开始构建系统

使用kaldi进行建立基于x-vector的说话人识别系统,主要是通过脚本来实现的。在官方项目x-vector(~/kaldi/egs/sre16/v2) 中,通过run.sh脚本在SRE相关数据库上进行训练。我们将这部分代码迁移到aishell数据库上,在迁移过程中有部分代码进行了修改。于是将原有的run.sh脚本分成了9个内容更小的脚本,并且在jupyter notebook中运行,jupyter notebook可以记录了每一段脚本的log,能够帮助我们更好的理解每一段脚本的含义。

相关代码发布到github:

https://github.com/qiny1012/kaldi_x-vector_aishell

准备工作

  1. 准备好AISHELL,MUSAN,RIRS_NOISES的数据库;

  2. 将x-vector的项目复制到合适的位置,原来项目的地址在~/kaldi/egs/sre16/v2

  3. 在path.sh中配置kaldi的存放位置,这个代码会将kaldi的目录增加到环境变量中;

  4. 修改cmd.sh中的内容,将queue.pl改为run.pl,并设置一个合适自己计算机的内存大小。注意,使用多台计算机并行运算使用queue.pl,一台计算机运算使用run.pl;

  5. 将一些脚本从下面这些地址中复制到当前的项目的local中:

    ~/kaldi/egs/aishell/v1/local/aishell_data_prep.sh

    ~/kaldi/egs/aishell/v1/local/produce_trials.py

    ~/kaldi/egs/aishell/v1/local/split_data_enroll_eval.py

    ~/kaldi/egs/voxceleb/v2/local/prepare_for_eer.py

运行脚本

在jupyter notebook中打开,使用kaldi在aishell上进行x-vector实验的流程.ipynb,按照步骤分别运行。

1.准备训练集、测试集的配置文件

这段脚本将当前的项目的目录中建立一个data文件,里面将生成一些配置文件。

核心的配置文件包括下面这些:

	    data
​		├── test
​		│   ├── spk2utt
​		│   ├── text
​		│   ├── utt2spk
​		│   └── wav.scp
​		└── train
​    		├── spk2utt
​    		├── text
​    		├── utt2spk
​    		└── wav.scp

其中spk2utt文件是每个说话人和语音段的映射,text是每一个语音段的转义文本(没有有使用),utt2spk是每个语音段和说话人的映射,wav.scp是每个语音段和具体位置的映射。

2.准备原始语音的mfcc表征,并进行VAD操作

将data/train和data/test中涉及的文件提取mfcc特征,并进行VAD操作。conf/mfcc.conf中存放了mfcc的参数。

3.数据扩充(加混响,加噪音)

每个段语音分别被加混响,加noise,加music,加speech增强,扩充了4倍的数据。 RIRS_NOISES数据库需要解压到当前文件夹下,即/YOU_path/v2/。若下一步操作中出现(360294 != 480392),...,Less than 95% the features were successfully generated. Probably a serious error.之类的警告,则为系统找不到混响数据库,请检查RIR_NOISES数据库的位置。

4.提取扩充数据的mfcc表征和VAD

5.过滤语音

代码主要进行了4个工作,第一个工作,将data/train和data/train_aug的配置文件合并,配置文件合并在之前的代码中已经使用过;第二个工作,按照VAD的结果去除静音帧,并在每一段语音进行归一化(CMVN);第三个工作,去除语音长度小于2s的语音,这个操作需要和在训练过程中的最大帧参数保持一致;第四个工作,去除语音数量少于8的说话人。

6.训练x-vector

在执行这个过程中会出现一个错误,根据 https://blog.csdn.net/weixin_43056919/article/details/87480205 中的描述,只需要生成一个0.raw的文件就可以。

最终训练好的模型存放的位置是exp/xvector_nnet_1a/final.raw

7.提取训练数据的说话人表征,然后LDA降维再训练PLDA

8.在测试集中制作任务,并提取他们的说话人表征

9.利用PLAD计算每个测试对的得分,并计算最终的EER以及minDCF

训练了80次的结果:
EER: 0.6745%
minDCF(p-target=0.01): 0.1043
minDCF(p-target=0.001): 0.1816

kaldi_x-vector_aishell's People

Contributors

qiny1012 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

kaldi_x-vector_aishell's Issues

训练问题请教

我在new_01脚本执行,进入到aishell_data_prep.sh的32行时就会exit 1:
line 32:find $aishell_audio_dir -iname "*.wav" | grep -i "wav/train" > $train_dir/wav.flist || exit 1;
是不是我数据集准备的格式有点问题,如果觉得在这个上面交流不便我的qq是2357861275,可以备注git,我想多多请教一下您,因为我是初学kaldi,谢谢您了

请教一下训练时碰到的问题

作者你好,在执行new_02时,出现了usage: run.pl log-file command-line arguments... at utils/parallel/run.pl line 26.这一问题,求助怎么解决

请教一下数据准备的问题

楼主你好,我在new_04的时候出现了以下问题:
steps/make_mfcc.sh --mfcc-config conf/mfcc.conf --nj 20 --cmd utils/parallel/run.pl --mem 10G data/train_aug exp/make_mfcc feature/mfcc
utils/validate_data_dir.sh: Successfully validated data-directory data/train_aug
steps/make_mfcc.sh: [info]: no segments file exists: assuming wav.scp indexed by utterance.
steps/make_mfcc.sh: It seems not all of the feature files were successfully procesed (360294 != 480392); consider using utils/fix_data_dir.sh data/train_aug
steps/make_mfcc.sh: Less than 95% the features were successfully generated. Probably a serious error.

是因为前面数据增强准备的数据有问题么?用的是和您一样的数据集。

训练不一样

大佬,在第六步,为什么你的Iter: x/719 。我的只有Iter: x/159哈,num-epochs都是80,其它参数也一样,上一步得到的句子数量都一样
fix_data_dir.sh: kept all 600490 utterances.
fix_data_dir.sh: old files are kept in data/train_combined_no_sil/.backup
fix_data_dir.sh: kept all 590655 utterances.
fix_data_dir.sh: old files are kept in data/train_combined_no_sil/.backup
所以我最终的结果很差:
EER: 3.387%
minDCF(p-target=0.01): 0.3582
minDCF(p-target=0.001): 0.5667
是我哪里参数有问题吗,或者说Iter的参数在哪里调?

关于提升结果

大佬,想问下就这个代码想提升识别结果的话有什么方法吗?我想到的是:1、提高mfcc维度,用40维,2、训练TDNN更多轮,训1000轮吧,3,用aishell2的数据集替代aishell1?请问这几个方法可行吗

想请教一下训练问题

楼主您好,我想请教一下有关训练的问题,我是第一部分出现了错误,在跑new_01的时候,出现了这个错误:Error: local/aishell_data_prep.sh requires two directory arguments 我看了aishell_data_prep.sh里面应该是在26 27行那里。path.sh里面的路径已经更改了,我是初学kaldi,不太清楚这个error的原因,所以想请教你一下。如果能方便交流的话,能加您QQ是最好了,我的q是546866700,谢谢您了

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.