annotate experiments/scripts/cnbh-syllables/run_training_and_testing/run_test_instance.sh @ 165:f75123cf39ce

- 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 9d12efd43513
children d7dc7014b0af
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@165 10 # WORK - working directory
tomwalters@54 11 # SYLLIST_COMPLETE
tomwalters@54 12
tomwalters@54 13 # Filenames generated here
tomwalters@165 14 HMMPROTO=hmm_prototype
tomwalters@54 15 HHED_SCRIPT=hhed_change_components_script
tomwalters@54 16 RECOUT=recognition_output
tomwalters@54 17 RESULTS_FILE=results
tomwalters@54 18 MISCLASSIFIED=misclassified_syllables
tomwalters@54 19
tomwalters@54 20 # Filenames used here
tomwalters@165 21 TRAIN_SCRIPT=training_script
tomwalters@165 22 TEST_SCRIPT=testing_script
tomwalters@54 23 SYLLIST_COMPLETE=syllable_list_with_silence
tomwalters@54 24
tomwalters@165 25 hmm_type=${total_hmm_states}states_${mixture_components}mixture_components
tomwalters@165 26 echo "HMM type: $hmm_type"
tomwalters@165 27 mkdir -p $WORK/$hmm_type
tomwalters@54 28
tomwalters@54 29 echo "Creating HMM structure..."
tomwalters@165 30 ./gen_hmmproto.py --input_size ${input_vector_size} --total_hmm_states ${total_hmm_states} --feature_type ${feature_code} > $WORK/$hmm_type/$HMMPROTO
tomwalters@54 31
tomwalters@54 32 echo "Adding output mixture components..."
tomwalters@165 33 ./gen_hhed_script.py --num_means ${mixture_components} --total_hmm_states ${total_hmm_states} > $WORK/$hmm_type/$HHED_SCRIPT
tomwalters@54 34
tomwalters@54 35
tomwalters@54 36 echo "Training HMM..."
tomwalters@54 37 echo "Setting up prototype HMM..."
tomwalters@165 38 mkdir -p $WORK/$hmm_type/hmm0
tomwalters@165 39 HCompV -C $WORK/$HMMCONFIG -f 0.01 -m -S $WORK/$TRAIN_SCRIPT -M $WORK/$hmm_type/hmm0 $WORK/$hmm_type/$HMMPROTO
tomwalters@54 40
tomwalters@54 41 echo "Generating HMM definitions..."
tomwalters@54 42 # Now take the prototype file from hmm0, and create the other HMM definitions
tomwalters@54 43 # from it
tomwalters@165 44 grep -A 9999 "<BEGINHMM>" $WORK/$hmm_type/hmm0/$HMMPROTO > $WORK/$hmm_type/hmm0/hmms
tomwalters@165 45 for syllable in $(cat $WORK/$SYLLIST_COMPLETE); do
tomwalters@165 46 echo "~h $syllable" >> $WORK/$hmm_type/$feature/hmm0/hmmdefs
tomwalters@165 47 cat $WORK/$hmm_type/$feature/hmm0/hmms >> $WORK/$hmm_type/$feature/hmm0/hmmdefs
tomwalters@54 48 done
tomwalters@165 49
tomwalters@165 50 echo -n "~o<STREAMINFO> 1 ${input_vector_size}<VECSIZE> ${input_vector_size}<NULLD><${feature_code}><DIAGC>" > $WORK/$hmm_type/$feature/hmm0/macros
tomwalters@101 51
tomwalters@165 52 cat $WORK/$hmm_type/$feature/hmm0/vFloors >> $WORK/$hmm_type/$feature/hmm0/macros
tomwalters@54 53
tomwalters@165 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
tomwalters@54 55
tomwalters@54 56 for iter in $TRAINING_ITERATIONS_LIST; do
tomwalters@54 57 echo "Training iteration ${iter}..."
tomwalters@54 58 let "nextiter=$iter+1"
tomwalters@165 59 mkdir $WORK/$hmm_type/hmm$nextiter
tomwalters@165 60 ${HTK_PREFIX}HERest -C $WORK/$HMMCONFIG -I $WORK/$TRAIN_MLF \
tomwalters@165 61 -t 250.0 150.0 1000.0 -S $WORK/$TRAIN_SCRIPT \
tomwalters@165 62 -H $WORK/$hmm_type/hmm$iter/macros -H $WORK/$hmm_type/hmm$iter/hmmdefs \
tomwalters@165 63 -M $WORK/$hmm_type/hmm$nextiter $WORK/$SYLLIST_COMPLETE
tomwalters@54 64 done
tomwalters@54 65
tomwalters@54 66 for iter in $TESTING_ITERATIONS_LIST; do
tomwalters@54 67 echo "Testing iteration ${iter}..."
tomwalters@165 68 ${HTK_PREFIX}HVite -H $WORK/$hmm_type/hmm$iter/macros -H $WORK/$hmm_type/hmm$iter/hmmdefs \
tomwalters@165 69 -C $WORK/$HMMCONFIG -S $WORK/$TEST_SCRIPT -i $WORK/$hmm_type/$RECOUT \
tomwalters@165 70 -w $WORK/$WDNET -p 0.0 -s 5.0 $WORK/$DICT $WORK/$SYLLIST_COMPLETE
tomwalters@165 71 echo "Results from testing on iteration ${iter}..."
tomwalters@165 72 ${HTK_PREFIX}HResults -e "???" ${SILENCE} -I $WORK/$TEST_MLF $WORK/$SYLLIST_COMPLETE $WORK/$hmm_type/$RECOUT
tomwalters@165 73 ${HTK_PREFIX}HResults -p -t -e "???" ${SILENCE} \
tomwalters@165 74 -I $WORK/$TEST_MLF $WORK/$SYLLIST_COMPLETE $WORK/$hmm_type/$RECOUT > $WORK/$hmm_type/${RESULTS_FILE}_iteration_$iter
tomwalters@165 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
tomwalters@54 76 done