annotate experiments/scripts/cnbh-syllables/run_training_and_testing/run_test_instance.sh @ 206:e4d1ed97d01a

- AWS
author tomwalters
date Fri, 13 Aug 2010 10:48:20 +0000
parents dd3dd0bd9e38
children 90935b3c21f5
rev   line source
tomwalters@54 1 #!/bin/bash
tomwalters@54 2 # Script to run a single HMM train/test cycle with the given parameters.
tomwalters@54 3 # This script expects the following variables to be set
tomwalters@54 4 #
tomwalters@54 5 # total_hmm_states - total number of HMM states (including the 2 non-emitting states)
tomwalters@54 6 # mixture_components - number of components in the output distribution for each emitting state
tomwalters@54 7 # input_vector_size - number or elements in the input vector (normally 39 for MFCCs, 12 for AIM)
tomwalters@54 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)
tomwalters@54 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
tomwalters@187 10 # WORKING_DIRECTORY - working directory
tomwalters@54 11 # SYLLIST_COMPLETE
tomwalters@54 12
tomwalters@54 13 # Filenames generated here
tomwalters@197 14
tomwalters@197 15 # This must be named 'proto' to keep HCompV happy.
tomwalters@197 16 HMMPROTO=proto
tomwalters@54 17 HHED_SCRIPT=hhed_change_components_script
tomwalters@54 18 RECOUT=recognition_output
tomwalters@54 19 RESULTS_FILE=results
tomwalters@54 20 MISCLASSIFIED=misclassified_syllables
tomwalters@54 21
tomwalters@54 22 # Filenames used here
tomwalters@206 23 #TRAIN_SCRIPT=training_script
tomwalters@206 24 #TEST_SCRIPT=testing_script
tomwalters@54 25 SYLLIST_COMPLETE=syllable_list_with_silence
tomwalters@206 26 #TEST_MLF=testing_master_label_file
tomwalters@54 27
tomwalters@200 28 DICT=dictionary
tomwalters@200 29 WDNET=word_network
tomwalters@200 30
tomwalters@187 31 SILENCE=sil
tomwalters@187 32
tomwalters@194 33 THIS_DIR=`dirname $0`
tomwalters@194 34
tomwalters@187 35 hmm_type=${total_hmm_states}_states_${mixture_components}_mixture_components
tomwalters@202 36 echo "HMM type: ${hmm_type}..."
tomwalters@202 37
tomwalters@202 38 if [ -e $WORKING_DIRECTORY/.hmm_success ]; then
tomwalters@202 39 echo " already done"
tomwalters@202 40 return 0
tomwalters@202 41 fi
tomwalters@202 42
tomwalters@187 43 mkdir -p $WORKING_DIRECTORY/$hmm_type
tomwalters@54 44
tomwalters@54 45 echo "Creating HMM structure..."
tomwalters@194 46 $THIS_DIR/gen_hmmproto.py --input_size ${input_vector_size} --total_hmm_states ${total_hmm_states} --feature_type ${feature_code} > $WORKING_DIRECTORY/$hmm_type/$HMMPROTO
tomwalters@54 47
tomwalters@54 48 echo "Adding output mixture components..."
tomwalters@194 49 $THIS_DIR/gen_hhed_script.py --num_means ${mixture_components} --total_hmm_states ${total_hmm_states} > $WORKING_DIRECTORY/$hmm_type/$HHED_SCRIPT
tomwalters@54 50
tomwalters@54 51
tomwalters@54 52 echo "Training HMM..."
tomwalters@54 53 echo "Setting up prototype HMM..."
tomwalters@187 54 mkdir -p $WORKING_DIRECTORY/$hmm_type/hmm0
tomwalters@206 55 HCompV -C $WORKING_DIRECTORY/$HMMCONFIG -f 0.01 -m -S $TRAIN_SCRIPT -M $WORKING_DIRECTORY/$hmm_type/hmm0 $WORKING_DIRECTORY/$hmm_type/$HMMPROTO
tomwalters@54 56
tomwalters@54 57 echo "Generating HMM definitions..."
tomwalters@54 58 # Now take the prototype file from hmm0, and create the other HMM definitions
tomwalters@54 59 # from it
tomwalters@187 60 grep -A 9999 "<BEGINHMM>" $WORKING_DIRECTORY/$hmm_type/hmm0/$HMMPROTO > $WORKING_DIRECTORY/$hmm_type/hmm0/hmms
tomwalters@198 61 for syllable in $(cat $WORKING_DIRECTORY/$SYLLIST_COMPLETE); do
tomwalters@198 62 echo "~h $syllable" >> $WORKING_DIRECTORY/$hmm_type/hmm0/hmmdefs
tomwalters@198 63 cat $WORKING_DIRECTORY/$hmm_type/hmm0/hmms >> $WORKING_DIRECTORY/$hmm_type/hmm0/hmmdefs
tomwalters@54 64 done
tomwalters@165 65
tomwalters@198 66 echo -n "~o<STREAMINFO> 1 ${input_vector_size}<VECSIZE> ${input_vector_size}<NULLD><${feature_code}><DIAGC>" > $WORKING_DIRECTORY/$hmm_type/hmm0/macros
tomwalters@101 67
tomwalters@198 68 cat $WORKING_DIRECTORY/$hmm_type/hmm0/vFloors >> $WORKING_DIRECTORY/$hmm_type/hmm0/macros
tomwalters@54 69
tomwalters@198 70 HHEd -H $WORKING_DIRECTORY/$hmm_type//hmm0/macros -H $WORKING_DIRECTORY/$hmm_type/hmm0/hmmdefs $WORKING_DIRECTORY/$hmm_type/$HHED_SCRIPT $WORKING_DIRECTORY/$SYLLIST_COMPLETE
tomwalters@54 71
tomwalters@54 72 for iter in $TRAINING_ITERATIONS_LIST; do
tomwalters@54 73 echo "Training iteration ${iter}..."
tomwalters@54 74 let "nextiter=$iter+1"
tomwalters@187 75 mkdir $WORKING_DIRECTORY/$hmm_type/hmm$nextiter
tomwalters@205 76 HERest -C $WORKING_DIRECTORY/$HMMCONFIG -I $TRAIN_MLF \
tomwalters@206 77 -t 250.0 150.0 1000.0 -S $TRAIN_SCRIPT \
tomwalters@187 78 -H $WORKING_DIRECTORY/$hmm_type/hmm$iter/macros -H $WORKING_DIRECTORY/$hmm_type/hmm$iter/hmmdefs \
tomwalters@187 79 -M $WORKING_DIRECTORY/$hmm_type/hmm$nextiter $WORKING_DIRECTORY/$SYLLIST_COMPLETE
tomwalters@54 80 done
tomwalters@54 81
tomwalters@54 82 for iter in $TESTING_ITERATIONS_LIST; do
tomwalters@54 83 echo "Testing iteration ${iter}..."
tomwalters@194 84 HVite -H $WORKING_DIRECTORY/$hmm_type/hmm$iter/macros -H $WORKING_DIRECTORY/$hmm_type/hmm$iter/hmmdefs \
tomwalters@206 85 -C $WORKING_DIRECTORY/$HMMCONFIG -S $TEST_SCRIPT -i $WORKING_DIRECTORY/$hmm_type/$RECOUT \
tomwalters@187 86 -w $WORKING_DIRECTORY/$WDNET -p 0.0 -s 5.0 $WORKING_DIRECTORY/$DICT $WORKING_DIRECTORY/$SYLLIST_COMPLETE
tomwalters@165 87 echo "Results from testing on iteration ${iter}..."
tomwalters@194 88 HResults -e "???" ${SILENCE} -I $WORKING_DIRECTORY/$TEST_MLF $WORKING_DIRECTORY/$SYLLIST_COMPLETE $WORKING_DIRECTORY/$hmm_type/$RECOUT
tomwalters@194 89 HResults -p -t -e "???" ${SILENCE} \
tomwalters@187 90 -I $WORKING_DIRECTORY/$TEST_MLF $WORKING_DIRECTORY/$SYLLIST_COMPLETE $WORKING_DIRECTORY/$hmm_type/$RECOUT > $WORKING_DIRECTORY/$hmm_type/${RESULTS_FILE}_iteration_$iter
tomwalters@187 91 grep Aligned $WORKING_DIRECTORY/$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 > $WORKING_DIRECTORY/$hmm_type/${MISCLASSIFIED}_iteration_$iter
tomwalters@54 92 done