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

kaldi学习笔记-01-sitw

简介

研究生阶段入坑了说话人识别方向,最近在学习如何使用Kaldi提取i-vector进行说话人识别,在这里记录一下学习的笔记。
这次实验使用的是kaldi中的示例程序,位于egs/sitw/v1中,使用的数据集分别有SITW,VoxCeleb1,VoxCeleb2以及数据增强用的混音数据集RIR_NOISES、MUSAN。脚本使用Voxceleb1和VoxCeleb2训练UBM和T矩阵,使用经过混音后的数据训练PLDA,使用SITW来评估系统性能。需要注意的是,VoxCeleb1数据集和评估数据集SITW中有60个说话人是重复的,因此训练时需要将VoxCeleb1中重复的说话人移除。评估结果使用EER和minDCF指标。

脚本修改

在运行程序前,我们需要修改脚本中的一些参数以及路径。
数据路径
首先要把脚本中各个数据集的路径改成自己存放的路径。

voxceleb1_root=../../../data/Voxceleb1
voxceleb2_root=../../../data/Voxceleb2
sitw_root=../../../data/SITW
musan_root=../../../data/musan

sitw_dev_trials_core=../../../data/SITW/dev/keys/core-core.lst
sitw_eval_trials_core=../../../data/SITW/eval/keys/core-core.lst

最后两行是SITW的trial key文件,改成自己的文件位置就可以了。
根目录下还有一个RIRS_NOISES文件,也要将文件里的RIR_NOISES数据集路径修改成自己的路径。
参数配置
如果是在一台服务器或者主机上面跑的话,首先打开根目录下的cmd.sh,将里面的

export train_cmd="queue.pl --mem 4G"

改成

export train_cmd="run.pl"

然后打开path.sh将第一行改成自己的kaldi根目录路径

export KALDI_ROOT=`pwd`/../..

pwd是linux指令,会打印出运行指令时的目录

接下来我们来修改提取特征和训练时要用到的各项参数
1、MFCC:conf/mfcc.config文件设定了提取MFCC特征时的参数

--sample-frequency=16000		#语音文件采样率
--frame-length=25 # the default is 25 帧长25ms
--low-freq=20 # the default. 
--high-freq=7600 # the default is zero meaning use the Nyquist (8k in this case).
--num-mel-bins=30	#梅尔滤波器数量
--num-ceps=24	#MFCC维度
--snip-edges=false

一般我们使用39维MFCC(13维MFCC系数+13维一阶差分系数+13维2阶差分系数),所以我将这里的–num-ceps修改成13,差分阶数将在后面修改。
2、UBM:在run.sh文件的stage 2部分(我将if [ $stage -le 2 ]; then 下的代码块称为stage 2 部分)的

sid/train_diag_ubm.sh --cmd "$train_cmd --mem 4G" \
    --nj 40 --num-threads 8 \
    data/train 2048 \
    exp/diag_ubm

其中2048代表了你想要的UBM维数。
3、ivector:在run.sh件的stage 3部分

sid/train_ivector_extractor.sh --cmd "$train_cmd --mem 16G" \
    --ivector-dim 400 --num-iters 5 \
    exp/full_ubm/final.ubm data/train_100k \
    exp/extractor

其中–ivector-dim 400是ivector的维度,–num-iters 5是EM训练T矩阵时迭代次数.

run.sh

stage 0 数据准备

local/make_voxceleb1.pl $voxceleb1_root data

整理voxceleb1数据集,第一个参数是voxceleb1数据集路径,第二个参数是整理后输出各个清单文件的目标目录.
make_voxceleb1.pl程序有两个功能
第一是根据voxceleb1_sitw_overlap.txt文件,将voxceleb1与sitw中重复说话人的数据从list中移除
第二是根据vox1_meta.csv(其中保存了每个说话人在vox中的id,在数据集中文件夹名,性别,国籍和所在子集)生成各类清单文件.各类清单文件的格式将在后面介绍

local/make_voxceleb2.pl $voxceleb2_root dev data/voxceleb2_train

整理voxceleb2数据集,第一个参数是数据集路径,第二个参数是要用到的数据集,第三个参数是输出路径.
voxceleb2中有两个子集,dev和test,这里我们只使用dev集.程序功能与make_voxceleb1.pl的第二个功能相同.

utils/combine_data.sh data/train data/voxceleb2_train data/voxceleb1

整合训练用的数据集到一个文件夹下.第一个参数是整合后输出路径,后面的参数是要整合的各个文件路径.
具体来说,这行脚本将会把所有文件夹下的utt2spk utt2lang utt2dur feats.scp text cmvn.scp vad.scp reco2file_and_channel wav.scp spk2gender $extra_files文件分别整合到一个同名文件下并保存到输出路径.

local/make_sitw.sh $sitw_root data

整理sitw数据集,不说了,没意思

生成的文件格式
这里以voxceleb1数据集为例
我们先来看一下voxceleb1数据集的目录树

Voxceleb1
    -voxceleb1_wav
        -A.J._Buckley
            -1zcIwhmdeo4_0000001.wav
            -1zcIwhmdeo4_0000002.wav
            -......
      -A.R._Rahman
          -0_laIeN-Q44_0000001.wav
          -6WO410QOeuo_0000001.wav
          -......
      -......

spk2utt

A.J._Buckley A.J._Buckley-1zcIwhmdeo4-0000001 A.J._Buckley-1zcIwhmdeo4-0000002 A.J._Buckley-1zcIwhmdeo4-0000003 A.J._Buckley-7gWzIy6yIIk-0000001 A.J._Buckley-7gWzIy6yIIk-0000002 A.J._Buckley-7gWzIy6yIIk-0000003 A.J._Buckley-7gWzIy6yIIk-0000004 A.J._Buckley-7w0IBEWc9Qw-0000001 A.J._Buckley-7w0IBEWc9Qw-0000002 A.J._Buckley-7w0IBEWc9Qw-0000003 A.J._Buckley-7w0IBEWc9Qw-0000004 A.J._Buckley-7w0IBEWc9Qw-0000005 A.J._Buckley-7w0IBEWc9Qw-0000006 A.J._Buckley-7w0IBEWc9Qw-0000007 A.J._Buckley-7w0IBEWc9Qw-0000008 A.J._Buckley-7w0IBEWc9Qw-0000009 A.J._Buckley-7w0IBEWc9Qw-0000010 A.J._Buckley-9mQ11vBs1wc-0000001 A.J._Buckley-9mQ11vBs1wc-0000002 A.J._Buckley-9mQ11vBs1wc-0000003 A.J._Buckley-9mQ11vBs1wc-0000004 A.J._Buckley-DtdEYdViWdw-0000001 A.J._Buckley-DtdEYdViWdw-0000002 A.J._Buckley-DtdEYdViWdw-0000003 A.J._Buckley-J9lHsKG98U8-0000001 A.J._Buckley-J9lHsKG98U8-0000002 A.J._Buckley-J9lHsKG98U8-0000003 A.J._Buckley-J9lHsKG98U8-0000004 A.J._Buckley-J9lHsKG98U8-0000005 A.J._Buckley-J9lHsKG98U8-0000006 A.J._Buckley-J9lHsKG98U8-0000007 A.J._Buckley-J9lHsKG98U8-0000008 A.J._Buckley-J9lHsKG98U8-0000009 A.J._Buckley-J9lHsKG98U8-0000010 A.J._Buckley-J9lHsKG98U8-0000011 A.J._Buckley-J9lHsKG98U8-0000012 A.J._Buckley-J9lHsKG98U8-0000013 A.J._Buckley-J9lHsKG98U8-0000014 A.J._Buckley-J9lHsKG98U8-0000015 A.J._Buckley-J9lHsKG98U8-0000016 A.J._Buckley-J9lHsKG98U8-0000017 A.J._Buckley-J9lHsKG98U8-0000018 A.J._Buckley-J9lHsKG98U8-0000019 A.J._Buckley-J9lHsKG98U8-0000020 A.J._Buckley-J9lHsKG98U8-0000021 A.J._Buckley-J9lHsKG98U8-0000022 A.J._Buckley-J9lHsKG98U8-0000023 A.J._Buckley-J9lHsKG98U8-0000024 A.J._Buckley-J9lHsKG98U8-0000025 A.J._Buckley-J9lHsKG98U8-0000026 A.J._Buckley-Y8hIVOBuels-0000001 A.J._Buckley-Y8hIVOBuels-0000002 A.J._Buckley-Y8hIVOBuels-0000003 A.J._Buckley-Y8hIVOBuels-0000004 A.J._Buckley-Y8hIVOBuels-0000005 A.J._Buckley-Y8hIVOBuels-0000006 A.J._Buckley-Y8hIVOBuels-0000007 A.J._Buckley-Y8hIVOBuels-0000008 A.J._Buckley-Y8hIVOBuels-0000009 A.J._Buckley-Y8hIVOBuels-0000010 A.J._Buckley-eWIX7sfn-M0-0000001 A.J._Buckley-utrA-v8pPm4-0000001 A.J._Buckley-zELwAz2W6hM-0000001 A.J._Buckley-zELwAz2W6hM-0000002 A.J._Buckley-zELwAz2W6hM-0000003 A.J._Buckley-zELwAz2W6hM-0000004 A.J._Buckley-zELwAz2W6hM-0000005 A.J._Buckley-zELwAz2W6hM-0000006 A.J._Buckley-zELwAz2W6hM-0000007 A.J._Buckley-zELwAz2W6hM-0000008 A.J._Buckley-zELwAz2W6hM-0000009 A.J._Buckley-zELwAz2W6hM-0000010 A.J._Buckley-zELwAz2W6hM-0000011 A.J._Buckley-zELwAz2W6hM-0000012 A.J._Buckley-zELwAz2W6hM-0000013 A.J._Buckley-zELwAz2W6hM-0000014 A.J._Buckley-zELwAz2W6hM-0000015
A.R._Rahman A.R._Rahman-0_laIeN-Q44-0000001 A.R._Rahman-6WO410QOeuo-0000001 A.R._Rahman-6WO410QOeuo-0000002 A.R._Rahman-6WO410QOeuo-0000003 A.R._Rahman-6WO410QOeuo-0000004 A.R._Rahman-6WO410QOeuo-0000005 A.R._Rahman-6WO410QOeuo-0000006 A.R._Rahman-6WO410QOeuo-0000007 A.R._Rahman-6WO410QOeuo-0000008 A.R._Rahman-6WO410QOeuo-0000009 A.R._Rahman-6WO410QOeuo-0000010 A.R._Rahman-6WO410QOeuo-0000011 A.R._Rahman-C7k7C-PDvAA-0000001 A.R._Rahman-C7k7C-PDvAA-0000002 A.R._Rahman-Mpr9wqUuLQA-0000001 A.R._Rahman-Mpr9wqUuLQA-0000002 A.R._Rahman-Mpr9wqUuLQA-0000003 A.R._Rahman-QanuGhOhb9A-0000001 A.R._Rahman-QanuGhOhb9A-0000002 A.R._Rahman-QanuGhOhb9A-0000003 A.R._Rahman-QanuGhOhb9A-0000004 A.R._Rahman-QanuGhOhb9A-0000005 A.R._Rahman-QanuGhOhb9A-0000006 A.R._Rahman-QanuGhOhb9A-0000007 A.R._Rahman-QanuGhOhb9A-0000008 A.R._Rahman-QanuGhOhb9A-0000009 A.R._Rahman-QanuGhOhb9A-0000010 A.R._Rahman-QanuGhOhb9A-0000011 A.R._Rahman-QanuGhOhb9A-0000012 A.R._Rahman-QanuGhOhb9A-0000013 A.R._Rahman-QanuGhOhb9A-0000014 A.R._Rahman-QanuGhOhb9A-0000015 A.R._Rahman-QanuGhOhb9A-0000016 A.R._Rahman-QanuGhOhb9A-0000017 A.R._Rahman-QanuGhOhb9A-0000018 A.R._Rahman-QanuGhOhb9A-0000019 A.R._Rahman-QanuGhOhb9A-0000020 A.R._Rahman-QanuGhOhb9A-0000021 A.R._Rahman-QanuGhOhb9A-0000022 A.R._Rahman-QanuGhOhb9A-0000023 A.R._Rahman-QanuGhOhb9A-0000024 A.R._Rahman-QanuGhOhb9A-0000025 A.R._Rahman-QanuGhOhb9A-0000026 A.R._Rahman-QanuGhOhb9A-0000027 A.R._Rahman-QanuGhOhb9A-0000028 A.R._Rahman-QanuGhOhb9A-0000029 A.R._Rahman-QnnjJ9i5WFs-0000001 A.R._Rahman-QnnjJ9i5WFs-0000002 A.R._Rahman-RLKKsYiCMvc-0000001 A.R._Rahman-RLKKsYiCMvc-0000002 A.R._Rahman-RLKKsYiCMvc-0000003 A.R._Rahman-RLKKsYiCMvc-0000004 A.R._Rahman-RLKKsYiCMvc-0000005 A.R._Rahman-RLKKsYiCMvc-0000006 A.R._Rahman-RLKKsYiCMvc-0000007 A.R._Rahman-RLKKsYiCMvc-0000008 A.R._Rahman-RLKKsYiCMvc-0000009 A.R._Rahman-RLKKsYiCMvc-0000010 A.R._Rahman-RLKKsYiCMvc-0000011 A.R._Rahman-RLKKsYiCMvc-0000012 A.R._Rahman-RLKKsYiCMvc-0000013 A.R._Rahman-RLKKsYiCMvc-0000014 A.R._Rahman-RLKKsYiCMvc-0000015 A.R._Rahman-RLKKsYiCMvc-0000016 A.R._Rahman-RLKKsYiCMvc-0000017 A.R._Rahman-RLKKsYiCMvc-0000018 A.R._Rahman-RLKKsYiCMvc-0000019 A.R._Rahman-RLKKsYiCMvc-0000020 A.R._Rahman-RLKKsYiCMvc-0000021 A.R._Rahman-RLKKsYiCMvc-0000022 A.R._Rahman-RLKKsYiCMvc-0000023 A.R._Rahman-RLKKsYiCMvc-0000024 A.R._Rahman-RLKKsYiCMvc-0000025 A.R._Rahman-RLKKsYiCMvc-0000026 A.R._Rahman-RLKKsYiCMvc-0000027 A.R._Rahman-RLKKsYiCMvc-0000028 A.R._Rahman-RLKKsYiCMvc-0000029 A.R._Rahman-RLKKsYiCMvc-0000030 A.R._Rahman-RLKKsYiCMvc-0000031 A.R._Rahman-RLKKsYiCMvc-0000032 A.R._Rahman-RLKKsYiCMvc-0000033 A.R._Rahman-RLKKsYiCMvc-0000034 A.R._Rahman-RLKKsYiCMvc-0000035 A.R._Rahman-RLKKsYiCMvc-0000036 A.R._Rahman-SI4D2_YXvBE-0000001 A.R._Rahman-TqUbiOgEb0w-0000001 A.R._Rahman-TqUbiOgEb0w-0000002 A.R._Rahman-TqUbiOgEb0w-0000003 A.R._Rahman-TqUbiOgEb0w-0000004 A.R._Rahman-TqUbiOgEb0w-0000005 A.R._Rahman-TqUbiOgEb0w-0000006 A.R._Rahman-TqUbiOgEb0w-0000007 A.R._Rahman-TqUbiOgEb0w-0000008 A.R._Rahman-TqUbiOgEb0w-0000009 A.R._Rahman-TqUbiOgEb0w-0000010 A.R._Rahman-VMaXdHLz5Bk-0000001 A.R._Rahman-VMaXdHLz5Bk-0000002 A.R._Rahman-VMaXdHLz5Bk-0000003 A.R._Rahman-VMaXdHLz5Bk-0000004 A.R._Rahman-VMaXdHLz5Bk-0000005 A.R._Rahman-Y2Gr1I2DO7M-0000001 A.R._Rahman-cMGEuZ1zqXk-0000001 A.R._Rahman-cMGEuZ1zqXk-0000002 A.R._Rahman-cMGEuZ1zqXk-0000003 A.R._Rahman-cMGEuZ1zqXk-0000004 A.R._Rahman-eNc4LrrvV80-0000001 A.R._Rahman-eNc4LrrvV80-0000002 A.R._Rahman-eNc4LrrvV80-0000003 A.R._Rahman-eNc4LrrvV80-0000004 A.R._Rahman-eNc4LrrvV80-0000005 A.R._Rahman-eNc4LrrvV80-0000006 A.R._Rahman-eNc4LrrvV80-0000007 A.R._Rahman-eNc4LrrvV80-0000008 A.R._Rahman-eNc4LrrvV80-0000009 A.R._Rahman-eNc4LrrvV80-0000010 A.R._Rahman-eNc4LrrvV80-0000011 A.R._Rahman-eNc4LrrvV80-0000012 A.R._Rahman-eNc4LrrvV80-0000013 A.R._Rahman-gaQqIoV_aLY-0000001 A.R._Rahman-gaQqIoV_aLY-0000002 A.R._Rahman-gaQqIoV_aLY-0000003 A.R._Rahman-gaQqIoV_aLY-0000004 A.R._Rahman-gaQqIoV_aLY-0000005 A.R._Rahman-gaQqIoV_aLY-0000006 A.R._Rahman-gaQqIoV_aLY-0000007 A.R._Rahman-gaQqIoV_aLY-0000008 A.R._Rahman-w9H-ZMvdE9M-0000001 A.R._Rahman-wd_7oYV4dsU-0000001 A.R._Rahman-xTV-jFAUKcw-0000001 A.R._Rahman-xTV-jFAUKcw-0000002 A.R._Rahman-xTV-jFAUKcw-0000003
......
格式:
说话人id(文件夹名字) 语音数据1 语音数据2 语音数据3 ......语音数据n

utt2spk

A.J._Buckley-1zcIwhmdeo4-0000001 A.J._Buckley
A.J._Buckley-1zcIwhmdeo4-0000002 A.J._Buckley
A.J._Buckley-1zcIwhmdeo4-0000003 A.J._Buckley
A.J._Buckley-7gWzIy6yIIk-0000001 A.J._Buckley
A.J._Buckley-7gWzIy6yIIk-0000002 A.J._Buckley
......
格式:
语音数据1 说话人id
语音数据2 说话人id

wav.scp

A.J._Buckley-1zcIwhmdeo4-0000001 ../../../data/Voxceleb1/voxceleb1_wav/A.J._Buckley/1zcIwhmdeo4_0000001.wav
A.J._Buckley-1zcIwhmdeo4-0000002 ../../../data/Voxceleb1/voxceleb1_wav/A.J._Buckley/1zcIwhmdeo4_0000002.wav
A.J._Buckley-1zcIwhmdeo4-0000003 ../../../data/Voxceleb1/voxceleb1_wav/A.J._Buckley/1zcIwhmdeo4_0000003.wav
......
格式:
语音数据1 数据路径
语音数据2 数据路径

stage 1 计算MFCC特征

 # Make MFCCs and compute the energy-based VAD for each dataset
  for name in sitw_eval_enroll sitw_eval_test sitw_dev_enroll sitw_dev_test train; do
    steps/make_mfcc.sh --write-utt2num-frames true --mfcc-config conf/mfcc.conf --nj 80 --cmd "$train_cmd" \
      data/${name} exp/make_mfcc $mfccdir
    utils/fix_data_dir.sh data/${name}
    sid/compute_vad_decision.sh --nj 80 --cmd "$train_cmd" \
      data/${name} exp/make_vad $vaddir
    utils/fix_data_dir.sh data/${name}
  done

1.计算MFCC特征

steps/make_mfcc.sh --write-utt2num-frames true --mfcc-config conf/mfcc.conf --nj 80 --cmd "$train_cmd" \
      data/${name} exp/make_mfcc $mfccdir
utils/fix_data_dir.sh data/${name}
命令功能
write-utt2num-frames true#生成utt2num-frames文件,文件内容格式为:语音文件 *(第二个参数可能是帧数)
mfcc-configconf/mfcc.conf #mfcc参数配置文件
nj 80并行任务数
cmd “$train_cmd”如何运行任务,单机or集群
data/${name}数据路径
exp/make_mfcc日志输出路径
$mfccdirmfcc文件目标路径
utils/fix_data_dir.sh data/${name} #修复数据路径(将list文件内容排序,去除重复数据,去除格式有问题的行)
  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值