comparison experiments/scripts/cnbh-syllables/run_training_and_testing/run_test_instance.sh @ 54:90eebc3c02ca

- Scripts for running recognition experiments using AIM-C and HTK to compare MFCCs against features generated with AIM-C
author tomwalters
date Wed, 04 Aug 2010 06:41:56 +0000
parents
children 37b084ec9770
comparison
equal deleted inserted replaced
53:c058da80d443 54:90eebc3c02ca
1 #!/bin/bash
2 # Script to run a single HMM train/test cycle with the given parameters.
3 # This script expects the following variables to be set
4 #
5 # total_hmm_states - total number of HMM states (including the 2 non-emitting states)
6 # mixture_components - number of components in the output distribution for each emitting state
7 # input_vector_size - number or elements in the input vector (normally 39 for MFCCs, 12 for AIM)
8 # feature_code - HTK feature type code for the features being used (normally MFCC_0_D_A for MFCCs and USER_E_D_A for AIM features)
9 # FEATURE_SUFFIXES - List of suffixes appended to the feature filenames. For the MFCCs this is just "mfc" but for the AIM feature, there can be multiple features generated from each run of AIMCopy
10 # WORK - working directory
11 # SYLLIST_COMPLETE
12
13 # Filenames generated here
14 HMMPROTO=hmm_prototype
15 HHED_SCRIPT=hhed_change_components_script
16 RECOUT=recognition_output
17 RESULTS_FILE=results
18 MISCLASSIFIED=misclassified_syllables
19
20 # Filenames used here
21 TRAIN_SCRIPT=training_script
22 TEST_SCRIPT=testing_script
23 SYLLIST_COMPLETE=syllable_list_with_silence
24
25 hmm_type=${total_hmm_states}states_${mixture_components}mixture_components
26 echo "HMM type: $hmm_type"
27 mkdir -p $WORK/$hmm_type
28
29 echo "Creating HMM structure..."
30 ./gen_hmmproto.py --input_size ${input_vector_size} --total_hmm_states ${total_hmm_states} --feature_type ${feature_code} > $WORK/$hmm_type/$HMMPROTO
31
32 echo "Adding output mixture components..."
33 ./gen_hhed_script.py --num_means ${mixture_components} --total_hmm_states ${total_hmm_states} > $WORK/$hmm_type/$HHED_SCRIPT
34
35
36 echo "Training HMM..."
37 echo "Setting up prototype HMM..."
38 mkdir -p $WORK/$hmm_type/hmm0
39 HCompV -C $WORK/$HMMCONFIG -f 0.01 -m -S $WORK/$TRAIN_SCRIPT -M $WORK/$hmm_type/hmm0 $WORK/$hmm_type/$HMMPROTO
40
41 echo "Generating HMM definitions..."
42 # Now take the prototype file from hmm0, and create the other HMM definitions
43 # from it
44 grep -A 9999 "<BEGINHMM>" $WORK/$hmm_type/hmm0/$HMMPROTO > $WORK/$hmm_type/hmm0/hmms
45 for syllable in $(cat $WORK/$SYLLIST_COMPLETE); do
46 echo "~h $syllable" >> $WORK/$hmm_type/$feature/hmm0/hmmdefs
47 cat $WORK/$hmm_type/$feature/hmm0/hmms >> $WORK/$hmm_type/$feature/hmm0/hmmdefs
48 done
49
50 echo -n "~o<STREAMINFO> 1 ${input_vector_size}<VECSIZE> ${input_vector_size}<NULLD><${feature_code}><DIAGC>" > $WORK/$hmm_type/$feature/hmm0/macros
51
52 cat $WORK/$hmm_type/$feature/hmm0/vFloors >> $WORK/$hmm_type/$feature/hmm0/macros
53
54 ${HTK_PREFIX}HHEd -H $WORK/$hmm_type/$feature/hmm0/macros -H $WORK/$hmm_type/$feature/hmm0/hmmdefs $WORK/$hmm_type/$HHED_SCRIPT $WORK/$SYLLIST_COMPLETE
55
56 for iter in $TRAINING_ITERATIONS_LIST; do
57 echo "Training iteration ${iter}..."
58 let "nextiter=$iter+1"
59 mkdir $WORK/$hmm_type/hmm$nextiter
60 ${HTK_PREFIX}HERest -C $WORK/$HMMCONFIG -I $WORK/$TRAIN_MLF \
61 -t 250.0 150.0 1000.0 -S $WORK/$TRAIN_SCRIPT \
62 -H $WORK/$hmm_type/hmm$iter/macros -H $WORK/$hmm_type/hmm$iter/hmmdefs \
63 -M $WORK/$hmm_type/hmm$nextiter $WORK/$SYLLIST_COMPLETE
64 done
65
66 for iter in $TESTING_ITERATIONS_LIST; do
67 echo "Testing iteration ${iter}..."
68 ${HTK_PREFIX}HVite -H $WORK/$hmm_type/hmm$iter/macros -H $WORK/$hmm_type/hmm$iter/hmmdefs \
69 -C $WORK/$HMMCONFIG -S $WORK/$TEST_SCRIPT -i $WORK/$hmm_type/$RECOUT \
70 -w $WORK/$WDNET -p 0.0 -s 5.0 $WORK/$DICT $WORK/$SYLLIST_COMPLETE
71 echo "Results from testing on iteration ${iter}..."
72 ${HTK_PREFIX}HResults -e "???" ${SILENCE} -I $WORK/$TEST_MLF $WORK/$SYLLIST_COMPLETE $WORK/$hmm_type/$RECOUT
73 ${HTK_PREFIX}HResults -p -t -e "???" ${SILENCE} \
74 -I $WORK/$TEST_MLF $WORK/$SYLLIST_COMPLETE $WORK/$hmm_type/$RECOUT > $WORK/$hmm_type/${RESULTS_FILE}_iteration_$iter
75 grep Aligned $WORK/$hmm_type/${RESULTS_FILE}_iteration_$iter| sed -E "s/.*\/..\/([a-z]{2})([0-9]{2,3}\.[0-9])p([0-9]{2,3}\.[0-9])s.*/\2 \3/" | sort | uniq -c > $WORK/$hmm_type/${MISCLASSIFIED}_iteration_$iter
76 done