代码

进入:~/kaldi/egs/aishell/v1

# 地址变量(引号可省略,但是=之间不可有空格!)
data=/export/a05/xna/data
data_url=www.openslr.org/resources/33# 载入引用文件(使用.,类似import)
. ./cmd.sh
. ./path.sh# 设置bash出错则退出
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
#(download_and_untar.sh <数据/数据下载地址> <数据输出位置>)# 数据准备(应该是提取出wav数据,并且生成“说明文档”?)
local/aishell_data_prep.sh $data/data_aishell/wav $data/data_aishell/transcript# 提取MFCC特征(建议使用一个大容量的磁盘来储存mfcc)
# 每个wav首先被分为很多帧,每帧用一串数字来表示,mfcc就是这串数字mfccdir=mfccfor x in train test; dosteps/make_mfcc.sh --cmd "$train_cmd" --nj 10 data/$x exp/make_mfcc/$x $mfccdir# make_mfcc.sh <数据所在文件夹> <日志文件夹> <mfcc输出文件夹>;# -- 符号后面接的都是超参数设置sid/compute_vad_decision.sh --nj 10 --cmd "$train_cmd" data/$x exp/make_mfcc/$x $mfccdir# compute_vad_decision.sh <数据所在文件夹> <日志文件夹> <mfcc输出文件夹>utils/fix_data_dir.sh data/$x# fix_data_dir.sh 只需要一个参数done# 训练 diag ubm
sid/train_diag_ubm.sh --nj 10 --cmd "$train_cmd" --num-threads 16 \data/train 1024 exp/diag_ubm_1024# 训练 full ubm
sid/train_full_ubm.sh --nj 10 --cmd "$train_cmd" data/train \exp/diag_ubm_1024 exp/full_ubm_1024# 训练 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# 提取 ivector
sid/extract_ivectors.sh --cmd "$train_cmd" --nj 10 \exp/extractor_1024 data/train exp/ivector_train_1024# 训练 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# --- ↓ 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/evallocal/split_data_enroll_eval.py data/test/utt2spk  data/test/enroll/utt2spk  data/test/eval/utt2spk
# split_data_enroll_eval.py
# 将测试集(utt2spk)拆分为注册集和验证集
# 输入:test utt2spk;输出:enroll utt2spk, eval utt2spk
# 对每一个说话人,随机选取其下的3条音频作为验证集,剩下其它的用作验证集测试trials=data/test/aishell_speaker_ver.lst
local/produce_trials.py data/test/eval/utt2spk $trials
# local/produce_trials.py
# 这个脚本用来生成 trails 文件:uttid spkid target|nontargetutils/fix_data_dir.sh data/test/enroll
utils/fix_data_dir.sh data/test/eval
# utils/fix_data_dir.sh
# This script makes sure that only the segments present in
# all of "feats.scp", "wav.scp" [if present], segments [if present]
# text, and utt2spk are present in any of them.
# It puts the original contents of data-dir into
# data-dir/.backup# --- ↑ split the test to enroll and eval ↑ ---# 提取注册集的 ivector
sid/extract_ivectors.sh --cmd "$train_cmd" --nj 10 \exp/extractor_1024 data/test/enroll  exp/ivector_enroll_1024# 提取验证集的 ivector
sid/extract_ivectors.sh --cmd "$train_cmd" --nj 10 \exp/extractor_1024 data/test/eval  exp/ivector_eval_1024# 计算 plda 分数$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# ~kaldi/src/ivectorbin/ivector-plda-scoring.cc
# 使用PLDA模型计算trails的对数似然比(og-likelihood ratios)
# 输入(trials-file):"<key1> <key2>\n"
# 输出: "<key1> <key2> [<dot-product>]\n"# 计算 EER
awk '{print $3}' exp/trials_out | paste - $trials | awk '{print $1, $4}' | compute-eer -# Result
# Scoring against data/test/aishell_speaker_ver.lst
# Equal error rate is 0.140528%, at threshold -12.018exit 0

收获

  1. linux shell 脚本的一些基础知识:比如$变量<赋>=<值>--超参数设置.载入
  2. kaldi做说话人识别的大致框架

参考:

  1. 从说话人识别demo开始学习kaldi–(1)run.sh
  2. kaldi入门:搭建第一个中文ASR (AISHELL-1)

Kaldi 实战学习(1)说话人识别小例子(egs/aishell/v1)相关推荐

  1. Q-learning学习的一个小例子

    强化学习的难点,在于其引入了时间这个维度,不管是有监督还是无监督学习,都是能获得即使反馈,但到了强化学习中,反馈来的没那么及时.在周志华的<机器学习>中,举过一个种西瓜的例子.种瓜有很多步 ...

  2. Kaldi学习笔记:01(kaldi/egs/sitw/v1)run.sh解析

    kaldi学习笔记-01-sitw 简介 脚本修改 run.sh 简介 研究生阶段入坑了说话人识别方向,最近在学习如何使用Kaldi提取i-vector进行说话人识别,在这里记录一下学习的笔记. 这次 ...

  3. 深度学习与计算机视觉系列(9)_串一串神经网络之动手实现小例子

    深度学习与计算机视觉系列(9)_串一串神经网络之动手实现小例子 作者:寒小阳  时间:2016年1月.  出处:http://blog.csdn.net/han_xiaoyang/article/de ...

  4. python 真多线程_Python之路200个小例子,在线网页版来了,从此学习更方便!

    历史两个月,利用所有业余时间,与朋友一起搜集.创作Python小例子,截止目前已超过200个例子,全新整合汇总为九大章节: 感受Python之美 | 一.Python基础 | 二.Python字符串和 ...

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

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

  6. 小柏实战学习Liunx(图文教程二十一)

    前言:一定要知道每一个命令是啥意思,并且要学会看报错信息,学会使用搜索引擎. 前情回顾:小柏实战学习Liunx(图文教程二十)_Shaun-sheng的博客-CSDN博客 本节课主题:Linux安装A ...

  7. Qt小例子学习52 - 卡片游戏

    Qt小例子学习52 - 卡片游戏 Card.qml import QtQuick 2.0 import QtQuick.Layouts 1.3Item {id: cardLayout.fillWidt ...

  8. Qt 小例子学习33 - QTableWidget 显示点击的行列

    Qt 小例子学习33 - QTableWidget 显示点击的行列 #include <QApplication> #include <QDebug> #include < ...

  9. Qt 小例子学习26 - 画网格

    Qt 小例子学习26 - 画网格 GraphicsScene.h #ifndef GRAPHICSSCENE_H #define GRAPHICSSCENE_H#include <QGraphi ...

最新文章

  1. 汇编语言实验 3 编程、编译、连接、跟踪
  2. WordPress get_allowed_mime_types函数(wp-includes/functions.php)存在跨站脚本漏洞
  3. C# 用IrisSkin4.dll美化你的WinForm
  4. 批量提取文件创建时间_批量采集新浪微博用户内容
  5. C语言开发笔记(八)static
  6. 洛克人html5,《洛克人Zero/Zx合集》:跳票冷饭,与预期有差但依旧很香
  7. python解析原理_Python 中 -m 的典型用法、原理解析与发展演变
  8. 恶意软件可以使用风扇噪音盗取数据
  9. C语言理论小学案例试讲,【精选】C语言试讲 演示文稿C语言试讲 演示文稿.ppt
  10. git 无法上传vender目录(其中一个包被当成submodule)
  11. 清橙OJ A1046 加法器
  12. P1567 统计天数
  13. 网安、ctf常用网址
  14. 为什么软件外包不再“起作用”了
  15. 鼠标移动事件(鼠标移动到主菜单上显示子菜单)
  16. 常见的POS打印机分类
  17. GreaseMonkey
  18. AWD 线下攻防生存之道(Web 方向)
  19. 机器学习 | R语言中的方差分析汇总
  20. C#中的递归APS和CPS模式详解(转载)

热门文章

  1. CTA测试需要注意的几点
  2. Windows11 拒绝访问压缩(zipped)文件夹
  3. ps学习笔记2(修复无损、水印等方法)
  4. android--graphics
  5. 从零开始配置ROS机器人系统环境-总结版
  6. 智能佳-E-PUCK2分布式单体智能集群协作机器人
  7. 云桌面技术哪家强?亲身体验后才知道 | 华为云测评
  8. 炒股入门基础知识之指标公式江恩八线和角度指标解释
  9. R12-EBS TAX新税种问题-增值税16%
  10. 如何用wireshark过滤媒体流