Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion egs/madcat_ar/v1/cmd.sh
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,4 @@
# conf/queue.conf in http://kaldi-asr.org/doc/queue.html for more information,
# or search for the string 'default_config' in utils/queue.pl or utils/slurm.pl.

export cmd="queue.pl"
export cmd="retry.pl queue.pl"
8 changes: 4 additions & 4 deletions egs/madcat_ar/v1/local/chain/compare_wer.sh
Original file line number Diff line number Diff line change
Expand Up @@ -22,28 +22,28 @@ echo

echo -n "# WER "
for x in $*; do
wer=$(cat $x/decode_test/scoring_kaldi/best_wer | awk '{print $2}')
wer=$(cat $x/decode_test.5k/scoring_kaldi/best_wer | awk '{print $2}')
printf "% 10s" $wer
done
echo

echo -n "# WER (rescored) "
for x in $*; do
wer=$(cat $x/decode_test_rescored/scoring_kaldi/best_wer | awk '{print $2}')
wer=$(cat $x/decode_test.5k_rescored/scoring_kaldi/best_wer | awk '{print $2}')
printf "% 10s" $wer
done
echo

echo -n "# CER "
for x in $*; do
cer=$(cat $x/decode_test/scoring_kaldi/best_cer | awk '{print $2}')
cer=$(cat $x/decode_test.5k/scoring_kaldi/best_cer | awk '{print $2}')
printf "% 10s" $cer
done
echo

echo -n "# CER (rescored) "
for x in $*; do
cer=$(cat $x/decode_test_rescored/scoring_kaldi/best_cer | awk '{print $2}')
cer=$(cat $x/decode_test.5k_rescored/scoring_kaldi/best_cer | awk '{print $2}')
printf "% 10s" $cer
done
echo
Expand Down
1 change: 0 additions & 1 deletion egs/madcat_ar/v1/local/chain/run_cnn.sh

This file was deleted.

1 change: 0 additions & 1 deletion egs/madcat_ar/v1/local/chain/run_cnn_chainali.sh

This file was deleted.

Original file line number Diff line number Diff line change
@@ -1,32 +1,17 @@
#!/bin/bash

set -e -o pipefail

stage=0

nj=70
train_set=train
gmm=tri3 # this is the source gmm-dir that we'll use for alignments; it
# should have alignments for the specified training data.
nnet3_affix= # affix for exp dirs, e.g. it was _cleaned in tedlium.
affix=_1a #affix for TDNN+LSTM directory e.g. "1a" or "1b", in case we change the configuration.
ali=tri3_ali
chain_model_dir=exp/chain${nnet3_affix}/cnn_1a
common_egs_dir=
reporting_email=
lats_affix=
# chain options
train_stage=-10
xent_regularize=0.1
chunk_width=340,300,200,100
num_leaves=500
tdnn_dim=450
remove_egs=false
lang_decode=data/lang
lang_decode=data/lang_test
lang_rescore=data/lang_rescore_6g
dropout_schedule='0,0@0.20,0.2@0.50,0'
# End configuration section.
echo "$0 $@" # Print the command line for logging

. ./cmd.sh
. ./path.sh
. ./utils/parse_options.sh
Expand All @@ -39,21 +24,19 @@ where "nvcc" is installed.
EOF
fi

gmm_dir=exp/${gmm}
ali_dir=exp/${ali}
lat_dir=exp/chain${nnet3_affix}/${gmm}_${train_set}_lats_chain_$lats_affix
gmm_lat_dir=exp/chain${nnet3_affix}/${gmm}_${train_set}_lats
dir=exp/chain${nnet3_affix}/cnn_chainali${affix}
affix=_1a_${train_set}
chain_model_dir=exp/chain/cnn_e2eali${affix}
ali_dir=exp/chain/e2eali_$train_set
lat_dir=exp/chain/chainali_${train_set}_lats
dir=exp/chain/cnn_chainali${affix}
train_data_dir=data/${train_set}
tree_dir=exp/chain${nnet3_affix}/tree_chain_$lats_affix

tree_dir=exp/chain/tree_chainali_${train_set}
xent_regularize=0.1
# the 'lang' directory is created by this script.
# If you create such a directory with a non-standard topology
# you should probably name it differently.
lang=data/lang_chain
for f in $train_data_dir/feats.scp \
$train_data_dir/feats.scp $gmm_dir/final.mdl \
$ali_dir/ali.1.gz $gmm_dir/final.mdl; do
for f in $train_data_dir/feats.scp; do
[ ! -f $f ] && echo "$0: expected file $f to exist" && exit 1
done

Expand Down Expand Up @@ -88,7 +71,7 @@ if [ $stage -le 2 ]; then
--acoustic-scale 1.0 \
--scale-opts '--transition-scale=1.0 --self-loop-scale=1.0' \
${train_data_dir} data/lang $chain_model_dir $lat_dir
cp $gmm_lat_dir/splice_opts $lat_dir/splice_opts
cp exp/chain/e2eali_${train_set}_lats/splice_opts $lat_dir/splice_opts
fi

if [ $stage -le 3 ]; then
Expand All @@ -102,88 +85,74 @@ if [ $stage -le 3 ]; then
fi
steps/nnet3/chain/build_tree.sh \
--frame-subsampling-factor 4 \
--alignment-subsampling-factor 1 \
--context-opts "--context-width=2 --central-position=1" \
--cmd "$cmd" $num_leaves $train_data_dir \
$lang $ali_dir $tree_dir
fi

if [ $stage -le 4 ]; then
mkdir -p $dir
echo "$0: creating neural net configs using the xconfig parser";

num_targets=$(tree-info $tree_dir/tree | grep num-pdfs | awk '{print $2}')
num_targets=$(tree-info $tree_dir/tree |grep num-pdfs|awk '{print $2}')
learning_rate_factor=$(echo "print 0.5/$xent_regularize" | python)
common1="required-time-offsets= height-offsets=-2,-1,0,1,2 num-filters-out=36"
common2="required-time-offsets= height-offsets=-2,-1,0,1,2 num-filters-out=70"
common3="required-time-offsets= height-offsets=-1,0,1 num-filters-out=70"
mkdir -p $dir/configs
cat <<EOF > $dir/configs/network.xconfig
input dim=40 name=input
conv-relu-batchnorm-layer name=cnn1 height-in=40 height-out=40 time-offsets=-3,-2,-1,0,1,2,3 $common1
conv-relu-batchnorm-layer name=cnn2 height-in=40 height-out=20 time-offsets=-2,-1,0,1,2 $common1 height-subsample-out=2
conv-relu-batchnorm-layer name=cnn3 height-in=20 height-out=20 time-offsets=-4,-2,0,2,4 $common2
conv-relu-batchnorm-layer name=cnn4 height-in=20 height-out=20 time-offsets=-4,-2,0,2,4 $common2
conv-relu-batchnorm-layer name=cnn5 height-in=20 height-out=10 time-offsets=-4,-2,0,2,4 $common2 height-subsample-out=2
conv-relu-batchnorm-layer name=cnn6 height-in=10 height-out=10 time-offsets=-4,0,4 $common3
conv-relu-batchnorm-layer name=cnn7 height-in=10 height-out=10 time-offsets=-4,0,4 $common3
relu-batchnorm-layer name=tdnn1 input=Append(-4,0,4) dim=$tdnn_dim
relu-batchnorm-layer name=tdnn2 input=Append(-4,0,4) dim=$tdnn_dim
relu-batchnorm-layer name=tdnn3 input=Append(-4,0,4) dim=$tdnn_dim
## adding the layers for chain branch
conv-relu-batchnorm-dropout-layer name=cnn1 height-in=40 height-out=40 time-offsets=-3,-2,-1,0,1,2,3 $common1 dropout-proportion=0.0
conv-relu-batchnorm-dropout-layer name=cnn2 height-in=40 height-out=20 time-offsets=-2,-1,0,1,2 $common1 height-subsample-out=2 dropout-proportion=0.0
conv-relu-batchnorm-dropout-layer name=cnn3 height-in=20 height-out=20 time-offsets=-4,-2,0,2,4 $common2
conv-relu-batchnorm-dropout-layer name=cnn4 height-in=20 height-out=20 time-offsets=-4,-2,0,2,4 $common2
conv-relu-batchnorm-dropout-layer name=cnn5 height-in=20 height-out=10 time-offsets=-4,-2,0,2,4 $common2 height-subsample-out=2
conv-relu-batchnorm-dropout-layer name=cnn6 height-in=10 height-out=10 time-offsets=-4,0,4 $common3
conv-relu-batchnorm-dropout-layer name=cnn7 height-in=10 height-out=10 time-offsets=-4,0,4 $common3
relu-batchnorm-dropout-layer name=tdnn1 input=Append(-4,-2,0,2,4) dim=$tdnn_dim dropout-proportion=0.0
relu-batchnorm-dropout-layer name=tdnn2 input=Append(-4,0,4) dim=$tdnn_dim dropout-proportion=0.0
relu-batchnorm-dropout-layer name=tdnn3 input=Append(-4,0,4) dim=$tdnn_dim dropout-proportion=0.0
relu-batchnorm-layer name=prefinal-chain dim=$tdnn_dim target-rms=0.5
output-layer name=output include-log-softmax=false dim=$num_targets max-change=1.5
# adding the layers for xent branch
# This block prints the configs for a separate output that will be
# trained with a cross-entropy objective in the 'chain' mod?els... this
# has the effect of regularizing the hidden parts of the model. we use
# 0.5 / args.xent_regularize as the learning rate factor- the factor of
# 0.5 / args.xent_regularize is suitable as it means the xent
# final-layer learns at a rate independent of the regularization
# constant; and the 0.5 was tuned so as to make the relative progress
# similar in the xent and regular final layers.
relu-batchnorm-layer name=prefinal-xent input=tdnn3 dim=$tdnn_dim target-rms=0.5
output-layer name=output-xent dim=$num_targets learning-rate-factor=$learning_rate_factor max-change=1.5
EOF
steps/nnet3/xconfig_to_configs.py --xconfig-file $dir/configs/network.xconfig --config-dir $dir/configs/
fi

steps/nnet3/xconfig_to_configs.py --xconfig-file $dir/configs/network.xconfig --config-dir $dir/configs
fi

if [ $stage -le 5 ]; then
if [[ $(hostname -f) == *.clsp.jhu.edu ]] && [ ! -d $dir/egs/storage ]; then
utils/create_split_dir.pl \
/export/b0{3,4,5,6}/$USER/kaldi-data/egs/iam-$(date +'%m_%d_%H_%M')/s5/$dir/egs/storage $dir/egs/storage
fi

# no need to store the egs in a shared storage because we always
# remove them. Anyway, it takes only 5 minutes to generate them.
steps/nnet3/chain/train.py --stage=$train_stage \
--cmd="$cmd" \
--cmd "$cmd" \
--feat.cmvn-opts="--norm-means=false --norm-vars=false" \
--chain.leaky-hmm-coefficient 0.1 \
--chain.l2-regularize 0.00005 \
--chain.apply-deriv-weights true \
--egs.dir "$common_egs_dir" \
--chain.xent-regularize $xent_regularize \
--chain.leaky-hmm-coefficient=0.1 \
--chain.l2-regularize=0.00005 \
--chain.apply-deriv-weights=false \
--chain.lm-opts="--ngram-order=2 --no-prune-ngram-order=1 --num-extra-lm-states=1000" \
--chain.frame-subsampling-factor=4 \
--chain.alignment-subsampling-factor=1 \
--trainer.srand=0 \
--trainer.max-param-change=2.0 \
--trainer.num-epochs=4 \
--trainer.frames-per-iter=2000000 \
--trainer.optimization.num-jobs-initial=3 \
--trainer.optimization.num-jobs-final=16 \
--trainer.optimization.initial-effective-lrate=0.001 \
--trainer.optimization.final-effective-lrate=0.0001 \
--trainer.optimization.shrink-value=1.0 \
--trainer.num-chunk-per-minibatch=64,32 \
--egs.chunk-width=$chunk_width \
--egs.dir="$common_egs_dir" \
--egs.opts="--frames-overlap-per-eg 0" \
--cleanup.remove-egs=$remove_egs \
--use-gpu=true \
--reporting.email="$reporting_email" \
--feat-dir=$train_data_dir \
--tree-dir=$tree_dir \
--chain.frame-subsampling-factor 4 \
--chain.alignment-subsampling-factor 1 \
--trainer.num-chunk-per-minibatch 16,8 \
--trainer.frames-per-iter 500000 \
--trainer.num-epochs 4 \
--trainer.optimization.momentum 0 \
--trainer.optimization.num-jobs-initial 2 \
--trainer.optimization.num-jobs-final 4 \
--trainer.optimization.initial-effective-lrate 0.001 \
--trainer.optimization.final-effective-lrate 0.0001 \
--trainer.optimization.shrink-value 1.0 \
--trainer.max-param-change 2.0 \
--trainer.dropout-schedule $dropout_schedule \
--cleanup.remove-egs false \
--feat-dir data/${train_set} \
--tree-dir $tree_dir \
--lat-dir=$lat_dir \
--dir=$dir || exit 1;
--chain.left-tolerance 1 \
--chain.right-tolerance 1 \
--egs.chunk-width=$chunk_width \
--egs.opts="--frames-overlap-per-eg 0 --constrained false" \
--dir $dir || exit 1;
fi

if [ $stage -le 6 ]; then
Expand All @@ -200,14 +169,14 @@ fi

if [ $stage -le 7 ]; then
frames_per_chunk=$(echo $chunk_width | cut -d, -f1)
steps/nnet3/decode.sh --acwt 1.0 --post-decode-acwt 10.0 \
--frames-per-chunk $frames_per_chunk \
--nj $nj --cmd "$cmd" \
$dir/graph data/test $dir/decode_test || exit 1;

for decode_set in test.5k; do
steps/nnet3/decode.sh --acwt 1.0 --post-decode-acwt 10.0 \
--nj $nj --cmd "$cmd" \
$dir/graph data/$decode_set $dir/decode_$decode_set || exit 1;
done
steps/lmrescore_const_arpa.sh --cmd "$cmd" $lang_decode $lang_rescore \
data/test $dir/decode_test{,_rescored} || exit 1
data/$decode_set $dir/decode_${decode_set}{,_rescored} || exit 1
fi

echo "$0 Done. Date: $(date). Results:"
echo "Done. Date: $(date). Results:"
local/chain/compare_wer.sh $dir
Loading