Kaldi 实战学习(1)说话人识别小例子(egs/aishell/v1)
代码
进入:~/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
收获
- linux shell 脚本的一些基础知识:比如
$变量
、<赋>=<值>
、--超参数设置
、.载入
- kaldi做说话人识别的大致框架
参考:
- 从说话人识别demo开始学习kaldi–(1)run.sh
- kaldi入门:搭建第一个中文ASR (AISHELL-1)
Kaldi 实战学习(1)说话人识别小例子(egs/aishell/v1)相关推荐
- Q-learning学习的一个小例子
强化学习的难点,在于其引入了时间这个维度,不管是有监督还是无监督学习,都是能获得即使反馈,但到了强化学习中,反馈来的没那么及时.在周志华的<机器学习>中,举过一个种西瓜的例子.种瓜有很多步 ...
- Kaldi学习笔记:01(kaldi/egs/sitw/v1)run.sh解析
kaldi学习笔记-01-sitw 简介 脚本修改 run.sh 简介 研究生阶段入坑了说话人识别方向,最近在学习如何使用Kaldi提取i-vector进行说话人识别,在这里记录一下学习的笔记. 这次 ...
- 深度学习与计算机视觉系列(9)_串一串神经网络之动手实现小例子
深度学习与计算机视觉系列(9)_串一串神经网络之动手实现小例子 作者:寒小阳 时间:2016年1月. 出处:http://blog.csdn.net/han_xiaoyang/article/de ...
- python 真多线程_Python之路200个小例子,在线网页版来了,从此学习更方便!
历史两个月,利用所有业余时间,与朋友一起搜集.创作Python小例子,截止目前已超过200个例子,全新整合汇总为九大章节: 感受Python之美 | 一.Python基础 | 二.Python字符串和 ...
- python声纹识别_【kaldi学习.4】Aishell V1(说话人识别、声纹识别)中的run.sh详解...
下面打算用aishell来做声纹识别,在做声纹识别之前,肯定是要对run.sh这个文件做个深入的了解,才可以继续往下走,接下来会记录如何修改run.sh去运行自己的数据,而不是手动输入自己的数据... ...
- 小柏实战学习Liunx(图文教程二十一)
前言:一定要知道每一个命令是啥意思,并且要学会看报错信息,学会使用搜索引擎. 前情回顾:小柏实战学习Liunx(图文教程二十)_Shaun-sheng的博客-CSDN博客 本节课主题:Linux安装A ...
- Qt小例子学习52 - 卡片游戏
Qt小例子学习52 - 卡片游戏 Card.qml import QtQuick 2.0 import QtQuick.Layouts 1.3Item {id: cardLayout.fillWidt ...
- Qt 小例子学习33 - QTableWidget 显示点击的行列
Qt 小例子学习33 - QTableWidget 显示点击的行列 #include <QApplication> #include <QDebug> #include < ...
- Qt 小例子学习26 - 画网格
Qt 小例子学习26 - 画网格 GraphicsScene.h #ifndef GRAPHICSSCENE_H #define GRAPHICSSCENE_H#include <QGraphi ...
最新文章
- 汇编语言实验 3 编程、编译、连接、跟踪
- WordPress get_allowed_mime_types函数(wp-includes/functions.php)存在跨站脚本漏洞
- C# 用IrisSkin4.dll美化你的WinForm
- 批量提取文件创建时间_批量采集新浪微博用户内容
- C语言开发笔记(八)static
- 洛克人html5,《洛克人Zero/Zx合集》:跳票冷饭,与预期有差但依旧很香
- python解析原理_Python 中 -m 的典型用法、原理解析与发展演变
- 恶意软件可以使用风扇噪音盗取数据
- C语言理论小学案例试讲,【精选】C语言试讲 演示文稿C语言试讲 演示文稿.ppt
- git 无法上传vender目录(其中一个包被当成submodule)
- 清橙OJ A1046 加法器
- P1567 统计天数
- 网安、ctf常用网址
- 为什么软件外包不再“起作用”了
- 鼠标移动事件(鼠标移动到主菜单上显示子菜单)
- 常见的POS打印机分类
- GreaseMonkey
- AWD 线下攻防生存之道(Web 方向)
- 机器学习 | R语言中的方差分析汇总
- C#中的递归APS和CPS模式详解(转载)