【含泪总结!】kaldi声纹识别模型 跑通aishell中的v1遇到的坑

本文记录了作者在项目中遭遇的路径问题、集群配置难题和机子故障,强调了使用绝对路径的重要性,以及在遇到技术挑战时的解决策略和经验教训。

跑了整整19个小时!终于跑出来了QAQ

为了防止自己忘记,也方便以后要是遇到坑可以对照着看一看,写下此文
 

1、路径问题

典型错误案例!
千万千万不要跟图中一样用相对路径!
千万千万不要跟图中一样用v1目录下的data!
在这里插入图片描述
憨憨的我直接2个错都犯了。。
如果不写绝对路径后面会遇到下图这个报错。。
在这里插入图片描述
然后下面的步骤会用到v1文件夹下的data,所以最好不要撞车。。我直接在kaldi文件夹外头新建了个文件夹用来存

2、集群问题

我后来遇到了下面这个问题
在这里插入图片描述
根据学长的指点将cmd.sh里的queue.pl改成run.pl就好了,可能是不太会用实验室的集群,所以换成单机emm确实就好了

3、机子问题

别问,问就是不知道!
居然一条error都没有它报错!搞了半天最后换了台机子就好使了,我也不知道为啥,总结的经验就是如果一台机子不行就换一台。。
在这里插入图片描述

4、等候时长问题

年轻不懂事的我,在这一步卡了半个小时没动还以为是机子卡死了,然后用htop看了一下,内存、核啥的都满了
在这里插入图片描述
在train_ivector_extractor.sh里头,把三个参数都改成了3
在这里插入图片描述
内存不吃紧了,然后一共有4个pass,一个pass3个半小时左右,我直呼好家伙!

5、眼神问题

历尽千辛万苦终于跑出来了以后,憨批的我以为0.4是40%,看人家才14%惊慌失措,问了好多好多好多人以后才发现,单位是%,0.4%和人家0.14%也没差多些。。
在这里插入图片描述

总结

1.人家用绝对路径就也用绝对路径!别直接放在项目里头!不然就取个牛逼的名字!别重!

2.跑集群可能会出锅!

3.有时候可能真的是机器的问题!可以试着换个机器试试!

4.稳住!跑的时间长可能不是电脑卡了,而是真的需要这么长。。

5.注意看到百分号。。

### Kaldi框架在声纹识别中的应用 Kaldi 是一个开源的语音识别工具包,广泛应用于学术界和工业界的语音技术研究。它不仅支持传统的 GMM-HMM 方法,也兼容基于深度学习的方法。对于声纹识别(Speaker Verification),Kaldi 提供了一套完整的流程来完成从数据准备到模型训练的任务。 #### 数据准备 在 Kaldi 中,`data/` 文件夹用于存储所有的输入数据,包括音频文件路径列表、转录文本以及分割后的片段信息。这些数据过 `local/prepare_data.sh` 脚本来生成[^1]。 #### 特征提取 特征提取是声纹识别的重要环节之一。Kaldi 使用 Mel 频率倒谱系数 (MFCC) 作为基础特征表示形式。以下是典型的 MFCC 特征提取命令: ```bash mfccdir=mfcc for x in train dev test; do steps/make_mfcc.sh --cmd "$train_cmd" --nj $feats_nj data/$x exp/make_mfcc/$x $mfccdir steps/compute_cmvn_stats.sh data/$x exp/make_mfcc/$x $mfccdir done ``` 上述代码实现了对训练集 (`train`)、开发集 (`dev`) 和测试集 (`test`) 的 MFCC 计算,并进行了全局均值方差归一化 (CMVN)[^4]。 #### 流程控制脚本 Kaldi 的核心在于其灵活的 Shell 脚本设计。`run.sh` 是整个实验的核心脚本,负责协调不同阶段的操作。无论采用哪种具体的声纹模型(如 i-vector, x-vector 等),该脚本都会调用一系列子模块完成任务。例如,在第三步中提到的 `cmd.sh` 定义了计算资源分配策略——可以指定是在本地机器上执行还是提交至分布式集群环境运行[^3]。 #### 模型训练与评估 现代声纹识别系统倾向于利用神经网络抽取固定长度嵌入向量(Embedding Vector)。X-vectors 就是一种流行的端到端解决方案。以下是一个简单的 X-vector 模型构建过程概述: - **预处理**: 对原始波形信号进行分帧加窗操作; - **DNN 层级结构定义**: 构建多层感知器架构; - **损失函数优化**: 应用 softmax cross entropy loss 来区分不同的说话者类别; 具体实现细节可参考官方文档或者第三方教程资料,比如《ASV-Subtools 声纹识别实战》课程提供了详尽的学习指导和支持服务[^5]。 --- ### 示例代码:简单版 X-vector 训练配置 假设我们已经完成了前期的数据准备工作,则可以过如下方式启动 x-vector 模型训练: ```bash # Step 1: Prepare the necessary directories and configurations. local/nnet3/xvector/prepare_feats_for_egs.sh \ --nj ${num_jobs} \ --cmd "${train_cmd}" \ data/train_cleaned exp/xvectors_train_cleaned # Step 2: Generate examples from features. if [ ! -d "${egs_dir}/storage" ]; then local/nnet3/xvector/get_egs.sh --cmd "${train_cmd}" --frames-per-eg 800 data/train_cleaned egs fi # Step 3: Train TDNN model with specified topology settings. steps/nnet3/xvec/train_tdnn.sh --stage 0 --cmd "${cuda_cmd}" \ --feat-type raw \ --cmvn-opts "--norm-means=true --norm-vars=false" \ --splice-indexes "-2,-1,0,1,2" \ --relu-dim 512 \ --final-layer-dim 512 \ --use-batchnorm true \ ${egs_dir} data/train_cleaned exp/xvector_nnet_tdnn_5l ``` 以上脚本展示了如何使用 Kaldi 工具链搭建并训练一个五层全连接 DNN 结构的 x-vector extractor。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值