下面打算用aishell来做声纹识别,在做声纹识别之前,肯定是要对run.sh这个文件做个深入的了解,才可以继续往下走,接下来会记录如何修改run.sh去运行自己的数据,而不是手动输入自己的数据。。。。因为自己的数据很多,手动是肯定没办法实现的了。

小白一枚,望指正。

做声纹识别 就要选择aishell/V1,这里是kaldi的github地址:https://github.com/kaldi-asr/kaldi

下载压缩数据

data=/export/a05/xna/data

data_url=www.openslr.org/resources/33

. ./cmd.sh

. ./path.sh

set -e # exit on error

local/download_and_untar.sh $data $data_url data_aishell

local/download_and_untar.sh $data $data_url resource_aishell

数据准备

local/aishell_data_prep.sh $data/data_aishell/wav $data/data_aishell/transcript

这里主要用到data_aishell数据,resource_aishell那里没有怎么用到,代码在local/aishell_data_prep.sh,其中数据集有train(340人)、dev(40人)(好像没用到)、test(20人)三个文件夹,在aishell_data_prep.sh代码中,也替我们准备了必要的数据(utt2spk、wav.scp、text),这样就不需要我们自己手动输入了。

提取MFCC特征

# Now make MFCC features.

# mfccdir should be some place with a largish disk where you

# want to store MFCC features.

mfccdir=mfcc

for x in train test; do

steps/make_mfcc.sh --cmd "$train_cmd" --nj 10 data/$x exp/make_mfcc/$x $mfccdir

sid/compute_vad_decision.sh --nj 10 --cmd "$train_cmd" data/$x exp/make_mfcc/$x $mfccdir

utils/fix_data_dir.sh data/$x

done

提取MFCC这一步主要有两小个步骤,第一个是用steps/make_mfcc.sh来提取MFCC特征,第二步是通过sid/compute_vad_decision.sh来计算基于energy的VAD output,就是计算倒谱均值和方差归一化。

然后回生成两个文件夹,mfcc 和 exp/make_mfcc,其中 mfcc 里主要保存了提取的特征,而 exp/make_mfcc 里保存了日志,即log 文件。

训练UBM

# train diag ubm

sid/train_diag_ubm.sh --nj 10 --cmd "$train_cmd" --num-threads 16 \

data/train 1024 exp/diag_ubm_1024

#train full ubm

sid/train_full_ubm.sh --nj 10 --cmd "$train_cmd" data/train \

exp/diag_ubm_1024 exp/full_ubm_1024

在sid/train_diag_ubm.sh中,有一段小讲解:这是steps / train_diag_ubm.sh的修改版本,专门用于说话人识别,不需要从训练有素的模型开始,适用滑动窗口CMVN,它需要数据目录中的语音活动检测(vad.scp)。我们使用gmm-global-init-from-feats初始化GMM,它设置随机数据点的均值,然后在内存中进行一些EM迭代。在内存初始化之后,我们并行训练几次迭代。

在sid/train_full_ubm.sh,也有一段小讲解:这将从现有(对角线或完整)UBM训练完全协方差UBM,持续指定的迭代次数。这是针对speaker-id系统的(我们使用专门针对它的功能和vad)。

看完这两段话后,基本可以了解其用意,用先训练的diag_ubm来训练完整的UBM。

训练和提取ivector

#train ivector

sid/train_ivector_extractor.sh --cmd "$train_cmd --mem 10G" \

--num-iters 5 exp/full_ubm_1024/final.ubm data/train \

exp/extractor_1024

#extract ivector

sid/extract_ivectors.sh --cmd "$train_cmd" --nj 10 \

exp/extractor_1024 data/train exp/ivector_train_102

在exp/extractor_1024可以看到提取的ivector。

训练plda模型

#train plda

$train_cmd exp/ivector_train_1024/log/plda.log \

ivector-compute-plda ark:data/train/spk2utt \

'ark:ivector-normalize-length scp:exp/ivector_train_1024/ivector.scp ark:- |' \

exp/ivector_train_1024/plda

用训练集的 ivector 来训练 plda 模型用于打分,可以从exp/ivector_train_1024/plda中查看plda的分数。

划分训练集(test)为enroll和eval

#split the test to enroll and eval

mkdir -p data/test/enroll data/test/eval

cp data/test/{spk2utt,feats.scp,vad.scp} data/test/enroll

cp data/test/{spk2utt,feats.scp,vad.scp} data/test/eval

local/split_data_enroll_eval.py data/test/utt2spk data/test/enroll/utt2spk data/test/eval/utt2spk

trials=data/test/aishell_speaker_ver.lst

local/produce_trials.py data/test/eval/utt2spk $trials

utils/fix_data_dir.sh data/test/enroll

utils/fix_data_dir.sh data/test/eval

通过local/split_data_enroll_eval.py脚本来完成划分,划分后,就会通过local/produce_trials.py来计算trials,trials 是指需要进行打分的注册说话人和不同的语音的一个列表,格式如下:

提取enroll和eval的ivector并计算结果

#extract enroll ivector

sid/extract_ivectors.sh --cmd "$train_cmd" --nj 10 \

exp/extractor_1024 data/test/enroll exp/ivector_enroll_1024

#extract eval ivector

sid/extract_ivectors.sh --cmd "$train_cmd" --nj 10 \

exp/extractor_1024 data/test/eval exp/ivector_eval_1024

#compute plda score

$train_cmd exp/ivector_eval_1024/log/plda_score.log \

ivector-plda-scoring --num-utts=ark:exp/ivector_enroll_1024/num_utts.ark \

exp/ivector_train_1024/plda \

ark:exp/ivector_enroll_1024/spk_ivector.ark \

"ark:ivector-normalize-length scp:exp/ivector_eval_1024/ivector.scp ark:- |" \

"cat '$trials' | awk '{print \\\$2, \\\$1}' |" exp/trials_out

#compute eer

awk '{print $3}' exp/trials_out | paste - $trials | awk '{print $1, $4}' | compute-eer -

在将测试集分成注册集和评估集之后,就开始分别提取注册集和评估集的 ivector,然后按照生成的 trials 打分,最终打分结果输出在exp/trials_outt 中, 最终跑出来的结果为 eer 为 0.183%。

流程图

流程图

python声纹识别_【kaldi学习.4】Aishell V1(说话人识别、声纹识别)中的run.sh详解...相关推荐

  1. python中split啥意思_python中split的用法详解_后端开发

    如何用python正则表达式匹配字符串?_后端开发 用python正则表达式匹配字符串的方法:1.当匹配单个位置的字符串时,可以使用[(.+?)]正则表达式来提取:2.当连续多个位置的字符串匹配时,可 ...

  2. python中的super用法详解_【Python】【类】super用法详解

    一.问题的发现与提出 在Python类的方法(method)中,要调用父类的某个方法,在Python 2.2以前,通常的写法如代码段1: 代码段1: class A: def __init__(sel ...

  3. python input函数详解_对Python3中的input函数详解

    下面介绍python3中的input函数及其在python2及pyhton3中的不同. python3中的ininput函数,首先利用help(input)函数查看函数信息: 以上信息说明input函 ...

  4. python开发的程序中以电子表格显示数据_使用 Python 读取电子表格中的数据实例详解...

    Python 是最流行.功能最强大的编程语言之一.由于它是自由开源的,因此每个人都可以使用.大多数 Fedora 系统都已安装了该语言.Python 可用于多种任务,其中包括处理逗号分隔值(CSV)数 ...

  5. [Python从零到壹] 十一.数据分析之Numpy、Pandas、Matplotlib和Sklearn入门知识万字详解(1)

    欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...

  6. [Python从零到壹] 十五.文本挖掘之数据预处理、Jieba工具和文本聚类万字详解

    欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...

  7. [Python从零到壹] 五十一.图像增强及运算篇之图像灰度直方图对比分析万字详解

    欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...

  8. 站长在线Python精讲:在Python中函数的调用详解

    欢迎你来到站长在线的站长学堂学习Python知识,本文学习的是<在Python中函数的调用详解>.本文的主要内容有:调用函数的基本语法和调用自定义函数的实例讲解. 目录 1.调用函数的基本 ...

  9. 离线强化学习(Offline RL)系列3: (算法篇)策略约束 - BEAR算法原理详解与实现

    论文信息:Stabilizing Off-Policy Q-Learning via Bootstrapping Error Reduction 本文由UC Berkeley的Sergey Levin ...

最新文章

  1. 关于移动端rem适配
  2. 事物(Jdbc) 例子
  3. python菜鸟教程函数-Python
  4. 《复盘+》把经验转化为能力
  5. AWS Lambda事件源映射:使您的触发器混乱无序
  6. 如何设置Linux操作系统shell命令的默认语言
  7. socket 编程:回射客户/服务程序
  8. 教你制作U盘,内存卡,硬盘等等等的漂亮背景
  9. Angular.js为什么如此火呢?
  10. Springboot的web开发-静态资源
  11. linux mdamd工具安装,ubuntu 13.04amd64安装 wine 1.5 office2010
  12. Burst Balloons
  13. Android ConstraintLayout 最新使用小结
  14. 免费会员管理管理系统
  15. Python使用quote、unquote、urlencode、urldecode对url编码解码
  16. 健身 宏效 -大道至简
  17. 一些RJS资源和演示入门教程
  18. PyTorch-09 循环神经网络RNNLSTM (时间序列表示、RNN循环神经网络、RNN Layer使用、时间序列预测案例、RNN训练难题、解决梯度离散LSTM、LSTM使用、情感分类问题实战)
  19. jquery遍历节点的方法
  20. 微信定向流量_我和小伙伴都玩微信定向流量了

热门文章

  1. 【AndroidStudio】使用网易 MUMU 模拟器调试
  2. 计算机学院优秀老师颁奖词,给老师的颁奖词
  3. Java中对数组降序排列
  4. 如何用科学的方法,保障数据准确性
  5. React+TS学习和使用(三):React Redux和项目的路由配置
  6. 【微前端开发环境下,加载远程子应用的实战。】
  7. 序列、列表、列表的方法以及遍历序列
  8. jBPM4的PVM实现解析
  9. 2021 CCPC 哈尔滨 E. Power and Modulo (思维题)
  10. Apollo(阿波罗)(一)环境搭建