kaldi HMM-GMM全部训练脚本分解
train_mono.sh
单音素训练脚本:
//初始化,[topo feats] -> [0.mdl tree]
gmm-init-mono
//生成训练图,[0.mdl text l.fst] -> [train.fst]
compile-train-graph
//对标签进行初始化对齐[train.fst feats 0.mdl tree] -> [1.ali]
align-equal-compiled
//统计估计模型所需统计量,[feats 1.ali] -> [1.acc]
gmm-acc-stats-ali
//参数重估,估计新的模型 [1.acc] -> [1.mdl]
gmm-est
//迭代训练
for i < iteration
//重新统计所需统计量,[$i.ali] -> [$i.acc]
gmm-acc-stats-ali
//估计新的模型,[$i.acc] -> [$i.mdl]
gmm-est
//重新对齐,[train.fst $i.mdl] ->[$i+1.ali]
gmm-align-compiled
//输出最后的模型
final.mdl = $i.mdl
train_deltas.sh
三音素训练脚本:
//特征处理 [feats] -> [feats]
apply-cmvn | add-deltas
//由生成的单音素模型的对齐结果对三音素参数统计,用于生成决策树[final.ali feats] -> [treeacc]
acc-tree-stats
//三音素绑定,[treeacc] -> [tree]
cluster-phone
compile-questions
build-tree //该步骤完成决策树三音素聚类
//三音素模型初始化,[treeacc tree topo] -> [1.occ 1.mdl] -> [1.mdl]
gmm-init-model | gmm-mixup
//将单音素对其文件中的元素替换为决策树的叶子,[final.mdl 1.mdl final.ali] -> [ali.new]
convert-ali
//生成训练图,[1.mdl text l.fst] -> [train.fst]
compile-train-graph
//迭代训练
for i < iteration
//重新对齐,[train.fst $i.mdl] ->[$i+1.ali]
gmm-align-compiled
//重新统计所需统计量,[$i.ali] -> [$i.acc]
gmm-acc-stats-ali
//估计新的模型,[$i.acc] -> [$i.mdl]
gmm-est //该步骤增加混合高斯分量的数目
//输出最后的模型
final.mdl = $i.mdl
train_lda_mllt.sh
lda-mllt训练脚本,非说话人自适应,mllt的作用是减少协方差矩阵对角化的损失:
//生成先验概率,统计计算lda所需统计量,[splice-feats final.ali] -> [lda.acc]
ali-to-post
weight-silence-post
acc-lda
//估计lda矩阵,[lda.acc] -> [lda.mat]
est-lda
//通过对转换后的特征重新统计,用于生成决策树[final.ali feats.*lda.mat] -> [treeacc]
acc-tree-stats
//三音素绑定,[treeacc] -> [tree]
cluster-phone
compile-questions
build-tree //该步骤完成决策树三音素聚类
//三音素模型初始化,[treeacc tree topo] -> [1.occ 1.mdl]
gmm-init-model
//将三音素决策树的叶子替换为转换后模型决策树的叶子,[final.mdl 1.mdl final.ali] -> [ali.new]
convert-ali
//生成训练图,[1.mdl text l.fst] -> [train.fst]
compile-train-graph
//迭代训练
for i < iteration
//重新对齐,[train.fst $i.mdl] ->[$i+1.ali]
gmm-align-compiled
//同lda,估计mllt的矩阵
ali-to-post | weight-silence-post | gmm-acc-mllt
est-mllt
//对gmm模型进行变换,[mllt.mat mdl] -> [new.mdl]
gmm-transform-means
//组合变换矩阵,[lda.mat mllt.mat] -> [lda.mat]
compose-transforms
//重新统计所需统计量,[$i.ali] -> [$i.acc]
gmm-acc-stats-ali
//估计新的模型,[$i.acc] -> [$i.mdl]
gmm-est //该步骤增加混合高斯分量的数目
//输出最后的模型
final.mdl = $i.mdl
train_sat.sh
说话人自适应模型,fmllr训练脚本:
//生成先验概率,统计计算fmllr所需统计量,[splice-feats spk2utt] -> [trans]
ali-to-post
weight-silence-post
gmm-est-fmllr
//通过对转换后的特征重新统计,用于生成决策树[final.ali feats.*lda.mat] -> [treeacc]
acc-tree-stats
//三音素绑定,[treeacc] -> [tree]
cluster-phone
compile-questions
build-tree //该步骤完成决策树三音素聚类
//三音素模型初始化,[treeacc tree topo] -> [1.occ 1.mdl]
gmm-init-model
//将三音素决策树的叶子替换为转换后模型决策树的叶子,[final.mdl 1.mdl final.ali] -> [ali.new]
convert-ali
//生成训练图,[1.mdl text l.fst] -> [train.fst]
compile-train-graph
//迭代训练
for i < iteration
//重新对齐,[train.fst $i.mdl] ->[$i+1.ali]
gmm-align-compiled
//同lda,估计fmllr的矩阵 -> [fmllr.trans]
ali-to-post | weight-silence-post | gmm-est-fmllr
//组合变换矩阵,[trans.mat fmllr.trans] -> [trans.mat]
compose-transforms
//重新统计所需统计量,[$i.ali] -> [$i.acc]
gmm-acc-stats-ali
//估计新的模型,[$i.acc] -> [$i.mdl]
gmm-est //该步骤增加混合高斯分量的数目
//输出最后的模型
final.mdl = $i.mdl
kaldi HMM-GMM全部训练脚本分解的更多相关文章
- kaldi基于GMM的单音素模型 训练部分
目录 1. gmm-init-mono 模型初始化 2. compile-train-graghs 训练图初始化 3. align-equal-compiled 特征文件均匀分割 4. gmm-acc ...
- Kaldi单音素模型 训练部分
在Kaldi中,单音素GMM的训练用的是Viterbi training,而不是Baum-Welch training.因此就不是用HMM Baum-Welch那几个公式去更新参数,也就不用计算前向概 ...
- [转]kaldi基于GMM做分类问题
转自:http://blog.csdn.net/zjm750617105/article/details/55211992 对于每个类别的GMM有几种思路: 第一是将所有训练数据按类别分开,每类的数据 ...
- caffe训练脚本文件时遇到./build/tools/caffe: not found
原文转载:https://blog.csdn.net/zhongshaoyy/article/details/53502373 cifar10训练步骤如下: (1)打开终端,应用cd切换路径,如 cd ...
- caffe运行训练脚本时报错:Unknown bottom blob 'data' (layer 'conv1',bottom index 0)
报错的两种报错原因: 1.输入数的路径错误,需要将路径进行修改排查目录是否出错 2.训练原数据格式不对 3.train.prototxt文件中并未设置test层,而在solver层则设置了test的迭 ...
- Baum-Welch算法(EM算法)对HMM模型的训练
Baum-Welch算法就是EM算法,所以首先给出EM算法的Q函数 \[\sum_zP(Z|Y,\theta')\log P(Y,Z|\theta)\] 换成HMM里面的记号便于理解 \[Q(\lam ...
- lua脚本分解字符串
--local str = "文字45 文字 789 文们adsd45 文字 wowo 文字 文字 wowo我们 wowo456 wiwo 465我们 456sdf 45 45我们adsd4 ...
- Kaldi的关键词搜索(Keyword Search,KWS)
本文简单地介绍了KWS的原理--为Lattice中每个词生成索引并进行搜索:介绍了如何处理OOV--替补(Proxy,词典内对OOV的替补)关键词技术:介绍了KWS的语料库格式:介绍了KWS在Kald ...
- [转]异常声音检测之kaldi DNN 训练
转自:http://blog.csdn.net/huchad/article/details/52092796 使用kaldi的DNN做音频分类,异常声音检测. HMM/GMM -> HMM/D ...
随机推荐
- luajit 64位 for cocos2dx 编译ios解决方法
最近luajit发布了64位beta版,由于appstore上线必须是64位的应用,而且我的游戏项目用到lua脚本,所以必须要用到64位的luajit来编译lua脚本. 方法如下: 在luajit官网 ...
- Wireshark抓取Mqtt报文
安装版本较高的Wireshark,我的版本是2.4.6,然后在编辑--> 首选项--> 协议中找到MQTT,然后将端口改为你MQTT服务器的端口,然后就可以在抓包中抓到MQTT了
- c和c++单链表
c++版 #include<iostream> #include<malloc.h> using namespace std; struct node{ int data; n ...
- Linux面试笔试题带答案【详解】
一.填空题:1. 在Linux系统中,以 ,该文件属性是 目录.8. 前台起动的进程使用 Ctrl+c 终止.9. 静态路由设定后,若网络拓扑结构发生变化,需由系统管理员修改路由的设置.10. 网络管 ...
- MySQL:数据存在则更新,不存在则插入
前提:表结构存在主键或唯一索引,插入数据包含主键或唯一索引而导致记录重复插入失败. 单条记录更新插入: ,,) ,b,c; 多条记录批量更新插入: ,,),(,,) ON DUPLICATE KEY ...
- day 10 函数的进阶
动态传参 (重点) * ** 形参 * args在形参位置, *表示不定参数--接受的是位置参数 接受到的位置参数的动态传参: 都是元组 形参的顺序: 位置 *args 默认值 * ...
- Java学习笔记十八:Java面向对象的三大特性之封装
Java面向对象的三大特性之封装 一:面向对象的三大特性: 封装 继承 多态 二:封装的概念: 将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访 ...
- vim 版本更新
sudo add-apt-repository ppa:jonathonf/vim sudo apt update sudo apt install vim 如果您想要卸载它, 请使用如下命令 sud ...
- leetcode add_binary 采坑记
尽管add_binary在leetcode中是一个简单难度,但是踩了不少坑,记录一下 描述: 给两个字符串形式的二进制数,要求求和并输出字符串形式的结果,其中a和b均不为空字符串 样例: a=“101 ...
- NoSQL入门第三天——Redis配置文件与持久化
一.解析Redis配置文件redis.conf (Linux下配置多于编码) 1.它在哪 由于我是在root的家目录下载安装的,默认的安装位置就是: conf就在这里: 根据经验,出厂的conf永远不 ...