美文网首页
sid/nnet3/xvector/allocate_egs.p

sid/nnet3/xvector/allocate_egs.p

作者: Faceless_Man | 来源:发表于2019-03-01 18:26 被阅读0次

sid/nnet3/xvector/allocate_egs.py

调用者:sid/nnet3/xvector/get_egs.sh

eg:

$cmd $dir/log/allocate_examples_train.log \

    sid/nnet3/xvector/allocate_egs.py \

      --num-repeats=$num_repeats \

      --min-frames-per-chunk=$min_frames_per_chunk \ 200

      --max-frames-per-chunk=$max_frames_per_chunk \ 400

      --frames-per-iter=$frames_per_iter \  1000000000

      --num-archives=$num_train_archives --num-jobs=$nj \

      --utt2len-filename=$dir/temp/utt2num_frames.train \

      --utt2int-filename=$dir/temp/utt2int.train --egs-dir=$dir  || exit 1

参数含义:

frames-per-iter : 表示一个archive包含的总帧数,不是输出文件range包含的总帧数

num-archives : 输出的archive个数

    num-jobs : 可以理解为多少个job工作于输出

输出文件: 该源码会在egs目录下面产生3中类型的文件,

temp/[prefix-]archive_chunk_lengths

temp/[prefix-]/range.[1-num-archives]

temp/[prefix-]/output.[1-num-jobs]

函数作用:

该函数的输出通过nnet3-xvector-get-egs产生egs,可以理解为产生egs前的准备工作。num-archives表示输出archive的个数,archive可以理解为egs文件,里面包含多个utt

num-job表示有多少个job来产生这些archive,如有2个job产生5个archive,则有一个job需要产生3个archive,另一个需要产生2个archive。

输出文件output的个数,就是job的个数,output文件里面的内容就表示该job需要产生的archive文件名,output文件里面有几个文件名就表示这个job需要产生多少个archive,这里面的文件名会用于nnet3-xvector-get-egs产生的输出。 

archive_chunk_lengths里面存放的是每个archive对应的random-length,每个random-length都是位于min-frames-per-chunk 和max-frames-per-chunk之间的随机数,该随机数用于求每个utt的‘随机相对偏移量’,‘随机相对偏移量’是说一个utt帧长为utt-length,则‘随机相对偏移量’就是在(0, (utt-length - random-lenth) )之间的一个随机数。这个‘随机相对偏移量’会被写入输出文件range的第4列。

接下来说说range文件是如何产生的,每个archive产生一个random-length,该值用于确定archive里面的utt的个数的"上限" num-utt=(frames-per-iter / random-lenth + 1),

然后确定每个utt的信息,保证range中相邻的utt来自不同的说话人,具体做法为,首先获取所有的spk列表,然后重复num-repeats份,随机打乱,生成一个重复的说话人列表spk_list,这样在spk_list中相邻的spk几乎不是同一个。

    从spk_list中弹出一个spk,从这个spk对应的utt中随机取一个utt,然后求这个utt的‘随机相对偏移量’构成<utt,s随机相对偏移量>对,重复min(num-utt, num_repeats*num_spk)次,这样一个archive的所有utt和对应的‘随机相对偏移量’已经确定,

接下来确定range中的剩余的4列,range文件中每一行形式(101-126861-0002 0 1 340 213 2),共6列,第一列是utt,第4列是‘随机相对偏移量’,第5列是‘random-length’,与archive_chunk中的值保持一致。第2列和第3列是有num-job和num-archives决定的。由调用该脚本之前的脚本(get_egs.sh)可知,num-job<=num-archives,比如2个job要产生5个archive,其中一个job要产生3个,另一个产生2个,range文件的第2列就表示这个job产生3个archive中的第几个archive(从0开始),第3列表示是num-archives中的索引。

相关文章

网友评论

      本文标题:sid/nnet3/xvector/allocate_egs.p

      本文链接:https://www.haomeiwen.com/subject/lwljuqtx.html