Mercurial > hg > aimc
changeset 165:f75123cf39ce
- Scripts for running recognition experiments using AIM-C and HTK to compare MFCCs against features generated with AIM-C
line wrap: on
line diff
--- a/experiments/README.txt Thu Jul 22 19:03:51 2010 +0000 +++ b/experiments/README.txt Wed Aug 04 06:41:56 2010 +0000 @@ -1,1 +1,1 @@ -Scripts to run various experiments on scale-invariant feature representations. Most of these are related to experiments in Tom Walters' PhD thesis: 'Auditory-Based processing of communication sounds'. +Scripts to run \ No newline at end of file
--- a/experiments/scripts/HTK/install_htk.sh Thu Jul 22 19:03:51 2010 +0000 +++ b/experiments/scripts/HTK/install_htk.sh Wed Aug 04 06:41:56 2010 +0000 @@ -1,17 +1,15 @@ #!/bin/bash set -e set -u -WORKING=$1 -PREV_DIR=`pwd` -if [ ! -e $WORKING/.htk_installed_success ]; then -mkdir -p $WORKING -cd $WORKING +if [ ! -e /mnt/experiments/htk/.htk_installed_success ]; then +sudo mkdir /mnt/experiments/htk +sudo chown ubuntu /mnt/experiments/htk +cd /mnt/experiments/htk wget --user $HTK_USERNAME --password $HTK_PASSWORD http://htk.eng.cam.ac.uk/ftp/software/HTK-3.4.1.tar.gz tar -xzf HTK-3.4.1.tar.gz cd htk ./configure --disable-hslab make sudo make install -touch $WORKING/.htk_installed_success -fi -cd $PREV_DIR +touch /mnt/experiments/htk/.htk_installed_success +fi \ No newline at end of file
--- a/experiments/scripts/aimc/build_aimc.sh Thu Jul 22 19:03:51 2010 +0000 +++ b/experiments/scripts/aimc/build_aimc.sh Wed Aug 04 06:41:56 2010 +0000 @@ -1,16 +1,12 @@ #!/bin/bash # Set up AIM-C on an Amazon EC2 instance. A useful reference for building. -set -e -set -u +AIMC_DIR=/mnt/experiments/aimc -AIMC_DIR=$1 -PREV_DIR=`pwd` -mkdir -p $AIMC_DIR +sudo mkdir -p $AIMC_DIR +sudo chown ubuntu $AIMC_DIR cd $AIMC_DIR svn checkout http://aimc.googlecode.com/svn/trunk/ aimc-read-only cd aimc-read-only scons cd .. -export PATH=$PATH:$AIMC_DIR/aimc-read-only/build/posix-release/ -touch $AIMC_DIR/.aimc_build_success -cd $PREV_DIR +export PATH=$PATH:$AIMC_DIR/aimc-read-only/build/posix-release/ \ No newline at end of file
--- a/experiments/scripts/cnbh-syllables/feature_generation/convert_flac_to_wav.sh Thu Jul 22 19:03:51 2010 +0000 +++ b/experiments/scripts/cnbh-syllables/feature_generation/convert_flac_to_wav.sh Wed Aug 04 06:41:56 2010 +0000 @@ -8,24 +8,24 @@ set -e set -u -SOUNDS_ROOT=$1 +$SOUNDS_ROOT=$1 -if [ ! -e $SOUNDS_ROOT/clean/.make_clean_wavs_success ]; then +if [ ! -e $SOUNDS_ROOT/clean/.make_clean_wavs_success ] then mkdir -p $SOUNDS_ROOT/clean VOWELS="a e i o u" CONSONANTS="b d f g h k l m n p r s t v w x y z" for v in $VOWELS; do - mkdir -p $SOUNDS_ROOT/clean/$v$v + mkdir $SOUNDS_ROOT/clean/$v$v for c in $CONSONANTS; do - mkdir -p $SOUNDS_ROOT/clean/$c$v - mkdir -p $SOUNDS_ROOT/clean/$v$c + mkdir $SOUNDS_ROOT/clean/$c$v + mkdir $SOUNDS_ROOT/clean/$v$c done done CURRENT_DIR=`pwd` cd $SOUNDS_ROOT/cnbh-syllables/ for file in `find . -iname "*.flac"`; do - sox $file ../clean/${file%flac}wav + sox $file ../clean/${file%flac}.wav done touch $SOUNDS_ROOT/clean/.make_clean_wavs_success cd $CURRENT_DIR -fi \ No newline at end of file +done \ No newline at end of file
--- a/experiments/scripts/cnbh-syllables/feature_generation/gen_hcopy_aimcopy_script.sh Thu Jul 22 19:03:51 2010 +0000 +++ b/experiments/scripts/cnbh-syllables/feature_generation/gen_hcopy_aimcopy_script.sh Wed Aug 04 06:41:56 2010 +0000 @@ -13,7 +13,6 @@ FEATURES_DIR=$1 SOUND_SOURCE=$2 -SUFFIX=$3 FULL_LIST=feature_generation_script @@ -36,7 +35,6 @@ fi for v in $VOWELS; do - echo $v$v >> $FEATURES_DIR/$SYLLIST.tmp.tmp for c in $CONSONANTS; do echo $v$c >> $FEATURES_DIR/$SYLLIST.tmp.tmp echo $c$v >> $FEATURES_DIR/$SYLLIST.tmp.tmp @@ -113,7 +111,7 @@ for syllable in $(cat $FEATURES_DIR/${SYLLIST}.tmp); do for speaker in $(cat $FEATURES_DIR/${TALKERS}.tmp); do SOURCE_FILENAME=$SOUND_SOURCE/$syllable/${syllable}${speaker}.wav - DEST_FILENAME=$FEATURES_DIR/$syllable/${syllable}${speaker}.$SUFFIX + DEST_FILENAME=$FEATURES_DIR/$syllable/${syllable}${speaker}.htk echo "$SOURCE_FILENAME ${DEST_FILENAME}" >&3 done done
--- a/experiments/scripts/cnbh-syllables/feature_generation/pink_noise.sh Thu Jul 22 19:03:51 2010 +0000 +++ b/experiments/scripts/cnbh-syllables/feature_generation/pink_noise.sh Wed Aug 04 06:41:56 2010 +0000 @@ -20,7 +20,6 @@ cd $CLEAN_SYLLABLES_DATABASE_PATH for SNR in ${SIGNAL_TO_NOISE_RATIOS}; do - echo "Generating noisy data for SNR ${SNR}dB" if [ ! -e ../snr_${SNR}dB/.pink_noise_success ] then mkdir -p ../snr_${SNR}dB/
--- a/experiments/scripts/cnbh-syllables/feature_generation/run_aimcopy.sh Thu Jul 22 19:03:51 2010 +0000 +++ b/experiments/scripts/cnbh-syllables/feature_generation/run_aimcopy.sh Wed Aug 04 06:41:56 2010 +0000 @@ -2,17 +2,15 @@ # Test for the existence of AIMCopy in the path AIMCOPY=`which AIMCopy` -if [ "$AIMCOPY" == "" ]; then +if [ $AIMCOPY == "" ]; then echo "Please build AIM-C and make AIMCopy available in the path" - exit -1 fi set -e set -u -AIMCOPY_CONFIGURATION_FILE=$1 -FEATURES_DIR=$2 -MACHINE_CORES=$3 +FEATURES_DIR=$1 +MACHINE_CORES=$2 FILE_LIST=feature_generation_script echo "Splitting data files over cores..." @@ -33,7 +31,7 @@ echo " tasks..." for ((c=1;c<=$MACHINE_CORES;c+=1)); do s=${splits[$element]} - AIMCopy -C $AIMCOPY_CONFIGURATION_FILE -D $FEATURES_DIR/aimcopy_config.out -S $s -G $FEATURES_DIR/aimcopy_graph.dot & + AIMCopy -D $FEATURES_DIR/aimcopy_config.out -S $s & let element=element+1 done
--- a/experiments/scripts/cnbh-syllables/feature_generation/run_hcopy.sh Thu Jul 22 19:03:51 2010 +0000 +++ b/experiments/scripts/cnbh-syllables/feature_generation/run_hcopy.sh Wed Aug 04 06:41:56 2010 +0000 @@ -1,7 +1,7 @@ #!/bin/bash HCOPY=`which HCopy` -if [ "$HCOPY" == "" ]; then +if [ $HCOPY == "" ]; then echo "Please build HTK and make the binaries available in the path" fi @@ -54,7 +54,7 @@ echo " tasks..." for ((c=1;c<=$MACHINE_CORES;c+=1)); do s=${splits[$element]} - HCopy -T 1 -C $FEATURES_DIR/${HCOPY_CONFIG} -S $s & + HCopy -T 1 -C $WORK/$HCOPY_CONFIG -S $s & let element=element+1 done
--- a/experiments/scripts/cnbh-syllables/feature_generation/run_mfcc_vtln_conversion.sh Thu Jul 22 19:03:51 2010 +0000 +++ b/experiments/scripts/cnbh-syllables/feature_generation/run_mfcc_vtln_conversion.sh Wed Aug 04 06:41:56 2010 +0000 @@ -1,8 +1,8 @@ #!/bin/bash # -HCOPY_CONFIG=hcopy.config + HCOPY=`which HCopy` -if [ "$HCOPY" == "" ]; then +if [ $HCOPY == "" ]; then echo "Please build HTK and make the binaries available in the path" fi @@ -33,7 +33,6 @@ fi for v in $VOWELS; do - echo $v$v >> $FEATURES_DIR/$SYLLIST.tmp.tmp for c in $CONSONANTS; do echo $v$c >> $FEATURES_DIR/$SYLLIST.tmp.tmp echo $c$v >> $FEATURES_DIR/$SYLLIST.tmp.tmp @@ -105,6 +104,16 @@ 215.2p121.0s EOF +echo "Generating script..." +exec 3> $FEATURES_DIR/$FULL_LIST +for syllable in $(cat $FEATURES_DIR/${SYLLIST}.tmp); do + for speaker in $(cat $FEATURES_DIR/${TALKERS}.tmp); do + SOURCE_FILENAME=$SOUND_SOURCE/$syllable/${syllable}${speaker}.wav + DEST_FILENAME=$FEATURES_DIR/$syllable/${syllable}${speaker}.htk + echo "$SOURCE_FILENAME ${DEST_FILENAME}" >&3 + done +done +exec 3>&- # Make the necessary directories for the computed features echo "Making directory structure..." @@ -112,6 +121,7 @@ mkdir -p $FEATURES_DIR/$syllable done + echo "Creating HCopy config file..." cat <<"EOF" > $FEATURES_DIR/${HCOPY_CONFIG} # Coding parameters @@ -132,31 +142,25 @@ WARPLCUTOFF = 10 # Upper frequency is the Nyquist freq. (24000Hz) # so choose the break freq. close to that -#WARPUCUTOFF = 23000 -WARPUCUTOFF = 10500 +WARPUCUTOFF = 23000 EOF -for TALKER in $(cat $FEATURES_DIR/${TALKERS}.tmp); do - echo "Generating script..." - exec 3> $FEATURES_DIR/${FULL_LIST}_$TALKER - for syllable in $(cat $FEATURES_DIR/${SYLLIST}.tmp); do - SOURCE_FILENAME=$SOUND_SOURCE/$syllable/${syllable}${TALKER}.wav - DEST_FILENAME=$FEATURES_DIR/$syllable/${syllable}${TALKER}.htk - echo "$SOURCE_FILENAME ${DEST_FILENAME}" >&3 - done - exec 3>&- +#echo "Splitting data files..." +#cat $WORK/${TRAIN_LIST} $WORK/${TEST_LIST} > $WORK/${COMBINED_LIST} + +for TALKER in $(cat $FEATURES_DIR/$TALKERS); do cp $FEATURES_DIR/${HCOPY_CONFIG} $FEATURES_DIR/${HCOPY_CONFIG}_$TALKER - scale=`echo $TALKER | sed 's/.*p//' | sed 's/s.*//'` + scale=`echo $speaker | sed 's/.*p//' | sed 's/s.*//'` warpfactor=0`echo "scale=4; 100.0/$scale" | bc` - echo "WARPFREQ = $warpfactor" >> $FEATURES_DIR/${HCOPY_CONFIG}_$TALKER - HCopy -T 1 -C $FEATURES_DIR/${HCOPY_CONFIG}_$TALKER -S $FEATURES_DIR/${FULL_LIST}_$TALKER + echo "WARPFREQ = $warpfactor" >> $WORK/${HCOPY_CONFIG}_$TALKER + ${HTK_PREFIX}HCopy -T 1 -C $FEATURES_DIR/${HCOPY_CONFIG}_$TALKER -S $FEATURES_DIR/${TRAIN_LIST}_$TALKER & done -#echo "Waiting for tasks to complete..." -#wait -#echo "Done!" +echo "Waiting for tasks to complete..." +wait +echo "Done!" rm $FEATURES_DIR/$SYLLIST.tmp rm $FEATURES_DIR/${TALKERS}.tmp touch $FEATURES_DIR/.features_script_success -fi +fi \ No newline at end of file
--- a/experiments/scripts/cnbh-syllables/results_plotting/plot_all_results.m Thu Jul 22 19:03:51 2010 +0000 +++ b/experiments/scripts/cnbh-syllables/results_plotting/plot_all_results.m Wed Aug 04 06:41:56 2010 +0000 @@ -3,21 +3,16 @@ % Nick Fyson and Martin Vestergaard. % Copyright 2009 University of Cambridge % Author: Tom Walters <tcw24@cam> -function plot_all_results(exp_path, iteration, plot_end_numbers) - -plot_numbers = true; -if nargin < 3 - plot_end_numbers = false; -end +function plot_all_results(exp_path) % Load the results from the experimental directory -misclassified = load([exp_path 'misclassified_syllables_iteration_' num2str(iteration)]); +load([exp_path 'misclassified.txt_iter15']); % The total number of syllables in the CNBH syllable database num_points = 185; target_VTL = 15; -misclassified(:, 1) = 1 - misclassified(:, 1) / num_points; +misclassified(:, 1) = 1 - misclassified(:, 1) / num_points; %#ok<NODEF> % The individual data points are plotted as spheres sphere_size_x = 1.2; @@ -66,30 +61,20 @@ y_pos_2 = spokes{i}(j, 2); z_pos_2 = results{i}(j); - j=1; - - if (~plot_numbers && plot_end_numbers) - text(x_pos + 0.3*(x_pos - x_pos_2), y_pos + 0.3*(y_pos - y_pos_2), z_pos + 0.3*(z_pos - z_pos_2) , [num2str(results{i}(j), 3) '%']); + text(x_pos + 0.3*(x_pos - x_pos_2), y_pos + 0.3*(y_pos - y_pos_2), z_pos + 0.3*(z_pos - z_pos_2) , [num2str(results{i}(j), 3) '%']); + for j = 1:length(spokes{i}) + [X Y Z] = sphere(10); + X = sphere_size_x.*X + spokes{i}(j,1); + Y = sphere_size_y.*Y + spokes{i}(j,2); + Z = sphere_size_z.*Z + results{i}(j); + % C = zeros(size(X)); + plot3([spokes{i}(j, 1) spokes{i}(j, 1)], ... + [spokes{i}(j, 2),spokes{i}(j, 2)], [0 results{i}(j)], '-k.', ... + 'LineWidth', 1, 'Color', [0.8 0.8 0.8]); + surf(X, Y, Z, ones(size(Z)) .* (results{i}(j)), 'LineStyle', 'none'); end - for j = 1:length(spokes{i}) - if (plot_numbers) - text(spokes{i}(j,1), spokes{i}(j,2), results{i}(j), [num2str(results{i}(j), 3) '%']); - else - [X Y Z] = sphere(10); - X = sphere_size_x.*X + spokes{i}(j,1); - Y = sphere_size_y.*Y + spokes{i}(j,2); - Z = sphere_size_z.*Z + results{i}(j); - % C = zeros(size(X)); - plot3([spokes{i}(j, 1) spokes{i}(j, 1)], ... - [spokes{i}(j, 2),spokes{i}(j, 2)], [0 results{i}(j)], '-k.', ... - 'LineWidth', 1, 'Color', [0.8 0.8 0.8]); - surf(X, Y, Z, ones(size(Z)) .* (results{i}(j)), 'LineStyle', 'none'); - end - end - if (~plot_numbers) - plot3(spokes{i}(:,1), spokes{i}(:,2), results{i}(:), '-', 'LineWidth', 2, ... - 'Color', [0.2 0.2 0.2]); - end + plot3(spokes{i}(:,1), spokes{i}(:,2), results{i}(:), '-', 'LineWidth', 2, ... + 'Color', [0.2 0.2 0.2]); end % Plot a zero-sized sphere at zero to get the autoscaling of the colour bar % correct @@ -114,9 +99,8 @@ set(axes1, 'YDir', 'reverse'); set(axes1, 'ZTick', [0 20 40 60 80 100]); hold('all'); -%print('-depsc', [exp_path 'results_plot_iteration_' num2str(iteration) '.eps']); -% saveas(gcf, [exp_path 'results_plot_iteration_' num2str(iteration) '.fig']); -%!open results_plot.eps +print('-depsc', 'results_plot.eps'); +!open results_plot.eps
--- a/experiments/scripts/cnbh-syllables/run_training_and_testing/run_test_instance.sh Thu Jul 22 19:03:51 2010 +0000 +++ b/experiments/scripts/cnbh-syllables/run_training_and_testing/run_test_instance.sh Wed Aug 04 06:41:56 2010 +0000 @@ -7,102 +7,70 @@ # input_vector_size - number or elements in the input vector (normally 39 for MFCCs, 12 for AIM) # 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) # 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 -# WORKING_DIRECTORY - working directory +# WORK - working directory # SYLLIST_COMPLETE -set -e -set -u - # Filenames generated here - -# This must be named 'proto' to keep HCompV happy. -HMMPROTO=proto +HMMPROTO=hmm_prototype HHED_SCRIPT=hhed_change_components_script RECOUT=recognition_output RESULTS_FILE=results MISCLASSIFIED=misclassified_syllables # Filenames used here -#TRAIN_SCRIPT=training_script -#TEST_SCRIPT=testing_script +TRAIN_SCRIPT=training_script +TEST_SCRIPT=testing_script SYLLIST_COMPLETE=syllable_list_with_silence -#TEST_MLF=testing_master_label_file -DICT=dictionary -WDNET=word_network - -SILENCE=sil - -THIS_DIR=`dirname $0` - -hmm_type=${total_hmm_states}_states_${mixture_components}_mixture_components -echo "HMM type: ${hmm_type}..." - -if [ -e $WORKING_DIRECTORY/$hmm_type/.hmm_success ]; then - echo " already done" - return 0 -fi - -mkdir -p $WORKING_DIRECTORY/$hmm_type +hmm_type=${total_hmm_states}states_${mixture_components}mixture_components +echo "HMM type: $hmm_type" +mkdir -p $WORK/$hmm_type echo "Creating HMM structure..." -$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 +./gen_hmmproto.py --input_size ${input_vector_size} --total_hmm_states ${total_hmm_states} --feature_type ${feature_code} > $WORK/$hmm_type/$HMMPROTO echo "Adding output mixture components..." -$THIS_DIR/gen_hhed_script.py --num_means ${mixture_components} --total_hmm_states ${total_hmm_states} > $WORKING_DIRECTORY/$hmm_type/$HHED_SCRIPT +./gen_hhed_script.py --num_means ${mixture_components} --total_hmm_states ${total_hmm_states} > $WORK/$hmm_type/$HHED_SCRIPT echo "Training HMM..." echo "Setting up prototype HMM..." -mkdir -p $WORKING_DIRECTORY/$hmm_type/hmm0 -HCompV -C $WORKING_DIRECTORY/$HMMCONFIG -f 0.01 -m -S $TRAIN_SCRIPT -M $WORKING_DIRECTORY/$hmm_type/hmm0 $WORKING_DIRECTORY/$hmm_type/$HMMPROTO +mkdir -p $WORK/$hmm_type/hmm0 +HCompV -C $WORK/$HMMCONFIG -f 0.01 -m -S $WORK/$TRAIN_SCRIPT -M $WORK/$hmm_type/hmm0 $WORK/$hmm_type/$HMMPROTO echo "Generating HMM definitions..." # Now take the prototype file from hmm0, and create the other HMM definitions # from it -grep -A 9999 "<BEGINHMM>" $WORKING_DIRECTORY/$hmm_type/hmm0/$HMMPROTO > $WORKING_DIRECTORY/$hmm_type/hmm0/hmms -if [ -e $WORKING_DIRECTORY/$hmm_type/hmm0/hmmdefs ]; then - rm $WORKING_DIRECTORY/$hmm_type/hmm0/hmmdefs -fi -for syllable in $(cat $WORKING_DIRECTORY/$SYLLIST_COMPLETE); do - echo "~h $syllable" >> $WORKING_DIRECTORY/$hmm_type/hmm0/hmmdefs - cat $WORKING_DIRECTORY/$hmm_type/hmm0/hmms >> $WORKING_DIRECTORY/$hmm_type/hmm0/hmmdefs +grep -A 9999 "<BEGINHMM>" $WORK/$hmm_type/hmm0/$HMMPROTO > $WORK/$hmm_type/hmm0/hmms +for syllable in $(cat $WORK/$SYLLIST_COMPLETE); do + echo "~h $syllable" >> $WORK/$hmm_type/$feature/hmm0/hmmdefs + cat $WORK/$hmm_type/$feature/hmm0/hmms >> $WORK/$hmm_type/$feature/hmm0/hmmdefs done + +echo -n "~o<STREAMINFO> 1 ${input_vector_size}<VECSIZE> ${input_vector_size}<NULLD><${feature_code}><DIAGC>" > $WORK/$hmm_type/$feature/hmm0/macros -echo -n "~o<STREAMINFO> 1 ${input_vector_size}<VECSIZE> ${input_vector_size}<NULLD><${feature_code}><DIAGC>" > $WORKING_DIRECTORY/$hmm_type/hmm0/macros +cat $WORK/$hmm_type/$feature/hmm0/vFloors >> $WORK/$hmm_type/$feature/hmm0/macros -cat $WORKING_DIRECTORY/$hmm_type/hmm0/vFloors >> $WORKING_DIRECTORY/$hmm_type/hmm0/macros - -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 +${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 for iter in $TRAINING_ITERATIONS_LIST; do echo "Training iteration ${iter}..." let "nextiter=$iter+1" - if [ ! -d $WORKING_DIRECTORY/$hmm_type/hmm$nextiter ]; then - mkdir $WORKING_DIRECTORY/$hmm_type/hmm$nextiter - HERest -C $WORKING_DIRECTORY/$HMMCONFIG -I $TRAIN_MLF \ - -t 250.0 150.0 1000.0 -S $TRAIN_SCRIPT \ - -H $WORKING_DIRECTORY/$hmm_type/hmm$iter/macros -H $WORKING_DIRECTORY/$hmm_type/hmm$iter/hmmdefs \ - -M $WORKING_DIRECTORY/$hmm_type/hmm$nextiter $WORKING_DIRECTORY/$SYLLIST_COMPLETE - fi + mkdir $WORK/$hmm_type/hmm$nextiter + ${HTK_PREFIX}HERest -C $WORK/$HMMCONFIG -I $WORK/$TRAIN_MLF \ + -t 250.0 150.0 1000.0 -S $WORK/$TRAIN_SCRIPT \ + -H $WORK/$hmm_type/hmm$iter/macros -H $WORK/$hmm_type/hmm$iter/hmmdefs \ + -M $WORK/$hmm_type/hmm$nextiter $WORK/$SYLLIST_COMPLETE done for iter in $TESTING_ITERATIONS_LIST; do echo "Testing iteration ${iter}..." - if [ ! -f $WORKING_DIRECTORY/$hmm_type/${RESULTS_FILE}_iteration_$iter ]; then - HVite -H $WORKING_DIRECTORY/$hmm_type/hmm$iter/macros -H $WORKING_DIRECTORY/$hmm_type/hmm$iter/hmmdefs \ - -C $WORKING_DIRECTORY/$HMMCONFIG -S $TEST_SCRIPT -i $WORKING_DIRECTORY/$hmm_type/$RECOUT \ - -w $WORKING_DIRECTORY/$WDNET -p 0.0 -s 5.0 $WORKING_DIRECTORY/$DICT $WORKING_DIRECTORY/$SYLLIST_COMPLETE - echo "Results from testing on iteration ${iter}..." - HResults -e "???" ${SILENCE} -I $TEST_MLF $WORKING_DIRECTORY/$SYLLIST_COMPLETE $WORKING_DIRECTORY/$hmm_type/$RECOUT - HResults -p -t -e "???" ${SILENCE} \ - -I $TEST_MLF $WORKING_DIRECTORY/$SYLLIST_COMPLETE $WORKING_DIRECTORY/$hmm_type/$RECOUT > $WORKING_DIRECTORY/$hmm_type/${RESULTS_FILE}_iteration_$iter - fi - # Count the number of instances of each talker appearing in the list of errors. - 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.*/\2p\3s/" | sort | uniq -c > $WORKING_DIRECTORY/$hmm_type/${MISCLASSIFIED}_iteration_$iter - python ./cnbh-syllables/results_plotting/gen_results.py --input_file=$WORKING_DIRECTORY/$hmm_type/${MISCLASSIFIED}_iteration_$iter --train_talkers=$WORKING_DIRECTORY/training_talkers --test_talkers=$WORKING_DIRECTORY/testing_talkers --spoke_pattern=$SPOKE_PATTERN_FILE > $WORKING_DIRECTORY/$hmm_type/results_iteration_${iter}.txt - python ./cnbh-syllables/results_plotting/spider_plot.py --input_file=$WORKING_DIRECTORY/$hmm_type/results_iteration_${iter}.txt --output_file=$WORKING_DIRECTORY/$hmm_type/results_iteration_${iter}.pdf + ${HTK_PREFIX}HVite -H $WORK/$hmm_type/hmm$iter/macros -H $WORK/$hmm_type/hmm$iter/hmmdefs \ + -C $WORK/$HMMCONFIG -S $WORK/$TEST_SCRIPT -i $WORK/$hmm_type/$RECOUT \ + -w $WORK/$WDNET -p 0.0 -s 5.0 $WORK/$DICT $WORK/$SYLLIST_COMPLETE + echo "Results from testing on iteration ${iter}..." + ${HTK_PREFIX}HResults -e "???" ${SILENCE} -I $WORK/$TEST_MLF $WORK/$SYLLIST_COMPLETE $WORK/$hmm_type/$RECOUT + ${HTK_PREFIX}HResults -p -t -e "???" ${SILENCE} \ + -I $WORK/$TEST_MLF $WORK/$SYLLIST_COMPLETE $WORK/$hmm_type/$RECOUT > $WORK/$hmm_type/${RESULTS_FILE}_iteration_$iter + 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 done -touch $WORKING_DIRECTORY/$hmm_type/.hmm_success - -
--- a/experiments/scripts/cnbh-syllables/run_training_and_testing/test_features.sh Thu Jul 22 19:03:51 2010 +0000 +++ b/experiments/scripts/cnbh-syllables/run_training_and_testing/test_features.sh Wed Aug 04 06:41:56 2010 +0000 @@ -5,7 +5,7 @@ # # Copyright 2009-2010 University of Cambridge # Author: Thomas Walters <tom@acousticscale.org> -# +# # Run multiple HMMs set -e @@ -18,26 +18,35 @@ MIXTURE_COMPONENTS_LIST=$5 TRAINING_ITERATIONS_LIST=$6 TESTING_ITERATIONS_LIST=$7 -input_vector_size=$8 -feature_code=$9 -TRAIN_SCRIPT=${10} -TEST_SCRIPT=${11} -TRAIN_MLF=${12} -TEST_MLF=${13} -SPOKE_PATTERN_FILE=${14} +FEATURE_SIZE=$8 +FEATURE_TYPE=$9 -HMMCONFIG=hmm_configuration -THIS_DIR=`dirname $0` +TRAIN_SPEAKERS=train_speakers +TEST_SPEAKERS=test_speakers -if [ "$feature_code" == "MFCC_0_D_A" ] +# These are not +SYLLIST_COMPLETE=syllist +GRAM=gram +DICT=dict +WDNET=wdnet +TRAIN_MLF=train.mlf +TEST_MLF=test.mlf +HMMCONFIG=hmmconfig + + + + + + +if [ "$MFCC_FEATURES" ] then - cat <<"EOF" > $WORKING_DIRECTORY/$HMMCONFIG + cat <<"EOF" > $WORK/$HMMCONFIG # Coding parameters SOURCEFORMAT= HTK EOF else - cat <<"EOF" > $WORKING_DIRECTORY/$HMMCONFIG + cat <<"EOF" > $WORK/$HMMCONFIG # Coding parameters # The TARGETKIND and SOURCEKIND lines are to add deltas and delta-deltas to # the AIM features @@ -47,10 +56,9 @@ EOF fi -for total_hmm_states in $HMM_STATES_LIST; do - for mixture_components in $MIXTURE_COMPONENTS_LIST; do - . $THIS_DIR/run_test_instance.sh & - #. $THIS_DIR/run_test_instance.sh +for total_hmm_states in 3 4 5 6 7 8; do + for mixture_components in 1 2 3 4 5 6 7; do + . run_test_instance.sh & done done echo "Waiting..."
--- a/experiments/scripts/cnbh-syllables/run_training_and_testing/train_test_sets/generate_train_test_lists.sh Thu Jul 22 19:03:51 2010 +0000 +++ b/experiments/scripts/cnbh-syllables/run_training_and_testing/train_test_sets/generate_train_test_lists.sh Wed Aug 04 06:41:56 2010 +0000 @@ -23,21 +23,14 @@ TEST_SCRIPT=testing_script SYLLIST=syllable_list -BASEDIR=`dirname $0` - if [ $TALKERS == "inner_talkers" ]; then - $BASEDIR/train_on_central.sh $WORK/training_talkers $WORK/testing_talkers + ./train_on_central.sh $WORK/training_talkers $WORK/testing_talkers fi if [ $TALKERS == "outer_talkers" ]; then - $BASEDIR/train_on_extrema.sh $WORK/training_talkers $WORK/testing_talkers + ./train_on_extrema.sh $WORK/training_talkers $WORK/testing_talkers fi -# In general, we want to do our testing on all the talkers (training talkers and -# testing talkers) so the train and test talkers are combined here to make a single -# testing set. -cat $WORK/training_talkers $WORK/testing_talkers > $WORK/all_talkers - # The vowels and consonants that make up the CNBH database VOWELS="a e i o u" CONSONANTS="b d f g h k l m n p r s t v w x y z" @@ -88,7 +81,7 @@ echo "$SILENCE" >&4 echo "." >&4 done - for speaker in $(cat $WORK/all_talkers); do + for speaker in $(cat $WORK/testing_talkers); do DEST_FILENAME=$FEATURES_DIR/$syllable/${syllable}${speaker} echo "'\"${DEST_FILENAME}.lab\"'" >&6 echo "$SILENCE" >&6 @@ -116,7 +109,7 @@ DEST_FILENAME=$FEATURES_DIR/$syllable/${syllable}${speaker} echo "'${DEST_FILENAME}.${FEATURE_NAME}'" >&7 done - for speaker in $(cat $WORK/all_talkers); do + for speaker in $(cat $WORK/testing_talkers); do DEST_FILENAME=$FEATURES_DIR/$syllable/${syllable}${speaker} echo "'${DEST_FILENAME}.${FEATURE_NAME}'" >&8 done @@ -125,7 +118,4 @@ exec 8>&- rm $WORK/${SYLLIST} -# Note: don't delete 'all_talkers', 'training_talkers' or 'testing_talkers' because -# they're used later by the plotting scripts. - - +rm $WORK/training_talkers $WORK/testing_talkers \ No newline at end of file
--- a/experiments/scripts/master.sh Thu Jul 22 19:03:51 2010 +0000 +++ b/experiments/scripts/master.sh Wed Aug 04 06:41:56 2010 +0000 @@ -4,42 +4,19 @@ # Run a series of experiments which compare MFCC features generated by HTK to # AIM features generated using AIM-C using a series of syllable recogntiton # tasks. -# This script expects to be run from within the AIM-C source tree. -# It builds the HTK binaries and AIM-C AIMCopy binary if they're not -# present. -# The following environment varaibles should be set before this script is run: -# SYLLABLES_DATABASE_URL - URL of a tar file containing the CNBH syllables -# database in FLAC format -# HTK_USERNAME and HTK_PASSWORD - username and password for the site at -# http://htk.eng.cam.ac.uk/ -# NUMBER_OF_CORES - total number of machine cores - -sudo apt-get -y update -sudo apt-get -y install bc subversion scons pkg-config \ - libsndfile1-dev build-essential libboost-dev \ - python sox python-matplotlib libcairo-dev - -# For 64-bit systems, uncomment this line: -sudo apt-get -y install libc6-dev-i386 +# This script expects the HTK binaries and AIM-C AIMCopy binary to be present +# in the PATH. # Set these to be the location of your input database, and desired output -# locations. (Note: the user running this script needs write permissions on -# the $WORKING_VOLUME.) -WORKING_VOLUME=/mnt/scratch0/aim - -SYLLABLES_DATABASE_TAR=$WORKING_VOLUME/001-downloaded_sounds_data/cnbh-syllables.tar -SOUNDS_ROOT=$WORKING_VOLUME/002-sounds/ -FEATURES_ROOT=$WORKING_VOLUME/003-features/ -HMMS_ROOT=$WORKING_VOLUME/004-hmms/ -HTK_ROOT=$WORKING_VOLUME/software/htk/ -AIMC_ROOT=$WORKING_VOLUME/software/aimc/ - -THIS_DIR=`dirname $0` -AIMCOPY_CONFIGURATION_FILE=$THIS_DIR/cnbh-syllables/feature_generation/ssi_profile_features.aimcopycfg +# locations. +SYLLABLES_DATABASE_TAR=/media/sounds/cnbh-syllables.tar +SOUNDS_ROOT=/mnt/experiments/sounds/ +FEATURES_ROOT=/mnt/experiments/features/ +HMMS_ROOT=/mnt/experiments/hmms/ # Number of cores on the experimental machine. Various scripts will try to use # this if it's set. -# NUMBER_OF_CORES=8 +NUMBER_OF_CORES=2 # Fail if any command fails set -e @@ -47,41 +24,27 @@ # Fail if any variable is unset set -u -###### -# Step 001 - Get the sounds database -if [ ! -e $SYLLABLES_DATABASE_TAR ]; then - mkdir -p `dirname $SYLLABLES_DATABASE_TAR` - wget -O $SYLLABLES_DATABASE_TAR $SYLLABLES_DATABASE_URL -fi - if [ ! -d $SOUNDS_ROOT ]; then mkdir -p $SOUNDS_ROOT fi -# Untar the CNBH syllables database, and convert the files from FLAC to WAV. +# Untar the CNBH syllables database, and convert the files from FLAC to WAV if [ ! -e $SOUNDS_ROOT/.untar_db_success ]; then tar -x -C $SOUNDS_ROOT -f $SYLLABLES_DATABASE_TAR touch $SOUNDS_ROOT/.untar_db_success fi # Convert the database to .WAV format and place it in $SOUNDS_ROOT/clean -echo "Converting CNBH-syllables database from FLAC to WAV..." -./cnbh-syllables/feature_generation/convert_flac_to_wav.sh $SOUNDS_ROOT -# -###### +./cnbh-syllables/convert_flac_to_wave.sh $SOUNDS_ROOT -##### -# Step 002 - # Generate versions of the CNBH syllables spoke pattern with a range of # signal-to-noise ratios (SNRs). The versions are put in the directory # ${SOUNDS_ROOT}/${SNR}_dB/ for each SNR in $SNRS. -SNRS="45"#" 42 39 36 33" #" 30 27 24 21 18 15 12 9 6 3 0" -#SNRS="30" # For testing -./cnbh-syllables/feature_generation/pink_noise.sh $SOUNDS_ROOT/clean/ "$SNRS" +SNRS="30 27 24 21 18 15 12 9 6 3 0" +./cnbh-syllables/pink_noise.sh $SOUNDS_ROOT/clean/ $SNRS # Make the list of all feature drectories -#FEATURE_DIRS="clean" -FEATURE_DIRS="" +FEATURE_DIRS="clean" for SNR in $SNRS; do FEATURE_DIRS="$FEATURE_DIRS snr_${SNR}dB" done @@ -89,185 +52,44 @@ # Generate feature sets (for the full range of SNRs in $FEATURE_DIRS) # 1. Standard MFCC features # 2. AIM features -# 3. MFCC features with optimal VTLN - -if [ ! -d $FEATURES_ROOT ]; then - mkdir -p $FEATURES_ROOT -fi - -if [ ! -e $HTK_ROOT/.htk_installed_success ]; then - ./HTK/install_htk.sh $HTK_ROOT -fi - -if [ ! -e $AIMC_ROOT/.aimc_build_success ]; then - ./aimc/build_aimc.sh $AIMC_ROOT -fi -export PATH=$PATH:$AIMC_ROOT/build/posix-release/ - +# 3. MFCC features with optimal VTLN for SOURCE_SNR in $FEATURE_DIRS; do - if [ ! -e $FEATURES_ROOT/mfcc/$SOURCE_SNR/.make_mfcc_features_success ]; then + + if [ ! -e $FEATURES_ROOT/mfcc/$SOURCE_SNR/.make_mfcc_features_success] + then mkdir -p $FEATURES_ROOT/mfcc/$SOURCE_SNR/ # Generate the list of files to convert - ./cnbh-syllables/feature_generation/gen_hcopy_aimcopy_script.sh $FEATURES_ROOT/mfcc/$SOURCE_SNR/ $SOUNDS_ROOT/$SOURCE_SNR/ htk + ./cnbh-syllables/feature_generation/gen_hcopy_aimcopy_script.sh $FEATURES_ROOT/mfcc/$SOURCE_SNR/ $SOUNDS_ROOT/$SOURCE_SNR/ # Run the conversion ./cnbh-syllables/feature_generation/run_hcopy.sh $FEATURES_ROOT/mfcc/$SOURCE_SNR/ $NUMBER_OF_CORES touch $FEATURES_ROOT/mfcc/$SOURCE_SNR/.make_mfcc_features_success - fi + done - if [ ! -e $FEATURES_ROOT/mfcc_vtln/$SOURCE_SNR/.make_mfcc_vtln_features_success ]; then + if [ ! -e $FEATURES_ROOT/mfcc_vtln/$SOURCE_SNR/.make_mfcc_vtln_features_success] + then mkdir -p $FEATURES_ROOT/mfcc_vtln/$SOURCE_SNR/ # Generate the file list and run the conversion (all one step, since this - # version uses a different configuration for each talker) + # version uses a different configuraiton for each talker) ./cnbh-syllables/feature_generation/run_mfcc_vtln_conversion.sh $FEATURES_ROOT/mfcc_vtln/$SOURCE_SNR/ $SOUNDS_ROOT/$SOURCE_SNR/ touch $FEATURES_ROOT/mfcc_vtln/$SOURCE_SNR/.make_mfcc_vtln_features_success - fi + done - if [ ! -e $FEATURES_ROOT/aim/$SOURCE_SNR/.make_aim_features_success ]; then - mkdir -p $FEATURES_ROOT/aim/$SOURCE_SNR/ - ./cnbh-syllables/feature_generation/gen_hcopy_aimcopy_script.sh $FEATURES_ROOT/aim/$SOURCE_SNR/ $SOUNDS_ROOT/$SOURCE_SNR/ "" + if [ ! -e $FEATURES_ROOT/aim/$SOURCE_SNR/.make_aim_features_success] + then + mkdir -p $FEATURES_ROOT/aim/$SOURCE_SNR/ + ./cnbh-syllables/feature_generation/gen_hcopy_aimcopy_script.sh $FEATURES_ROOT/aim/$SOURCE_SNR/ $SOUNDS_ROOT/$SOURCE_SNR/ # Run the conversion - ./cnbh-syllables/feature_generation/run_aimcopy.sh $AIMCOPY_CONFIGURATION_FILE $FEATURES_ROOT/aim/$SOURCE_SNR/ $NUMBER_OF_CORES + ./cnbh-syllables/feature_generation/run_aimcopy.sh $FEATURES_ROOT/aim/$SOURCE_SNR/ $NUMBER_OF_CORES touch $FEATURES_ROOT/aim/$SOURCE_SNR/.make_aim_features_success - fi -done - -mkdir -p $HMMS_ROOT + done +done # Now run a bunch of experiments. # For each of the feature types, we want to run HMMs with a bunch of # parameters. -TRAINING_ITERATIONS="0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15" # 16 17 18 19 20" -#TESTING_ITERATIONS="0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15" #" 16 17 18 19 20" -TESTING_ITERATIONS="15" -#HMM_STATES="3 4 5 6 7 8" -HMM_STATES="4" -#HMM_OUTPUT_COMPONENTS="1 2 3 4 5 6 7" -HMM_OUTPUT_COMPONENTS="4" +TRAINING_ITERATIONS="0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20" +TESTING_ITERATIONS="1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20" +HMM_STATES="3 4 5 6 7 8" +HMM_OUTPUT_COMPONENTS="" -run_train_test () { -# TODO(tom): Make sure that the training SNR is generated first -for SOURCE_SNR in $FEATURE_DIRS; do -WORK=$HMMS_ROOT/$FEATURE_CLASS/$FEATURE_SUFFIX/$SOURCE_SNR/$TALKERS/ -mkdir -p $WORK -FEATURES_DIR=$FEATURES_ROOT/$FEATURE_CLASS/$SOURCE_SNR/ -SPOKE_PATTERN_FILE=`pwd`/cnbh-syllables/run_training_and_testing/train_test_sets/gen_spoke_points/spoke_pattern.txt -./cnbh-syllables/run_training_and_testing/train_test_sets/generate_train_test_lists.sh \ - $TALKERS \ - $WORK \ - $FEATURES_DIR \ - $FEATURE_SUFFIX - -if [ $TRAINING_SNR == 'random' ]; then - TRAINING_SCRIPT=$HMMS_ROOT/$FEATURE_CLASS/$FEATURE_SUFFIX/clean/$TALKERS/training_script - TRAINING_MASTER_LABEL_FILE=$HMMS_ROOT/$FEATURE_CLASS/$FEATURE_SUFFIX/clean/$TALKERS/training_master_label_file - RANDOMIZED_TRAINING_SCRIPT=$HMMS_ROOT/$FEATURE_CLASS/$FEATURE_SUFFIX/clean/$TALKERS/training_script_randomized - RANDOMIZED_TRAINING_MASTER_LABEL_FILE=$HMMS_ROOT/$FEATURE_CLASS/$FEATURE_SUFFIX/clean/$TALKERS/training_master_label_file_randomized - ./cnbh-syllables/run_training_and_testing/train_test_sets/randomize_snrs.py -s clean -f $TRAINING_SCRIPT -m $TRAINING_MASTER_LABEL_FILE -o $RANDOMIZED_TRAINING_SCRIPT -p $RANDOMIZED_TRAINING_MASTER_LABEL_FILE - TRAINING_SCRIPT=$RANDOMIZED_TRAINING_SCRIPT - TRAINING_MASTER_LABEL_FILE=$RANDOMIZED_TRAINING_MASTER_LABEL_FILE -else - TRAINING_SCRIPT=$HMMS_ROOT/$FEATURE_CLASS/$FEATURE_SUFFIX/$TRAINING_SNR/$TALKERS/training_script - TRAINING_MASTER_LABEL_FILE=$HMMS_ROOT/$FEATURE_CLASS/$FEATURE_SUFFIX/$TRAINING_SNR/$TALKERS/training_master_label_file -fi - -TESTING_SCRIPT=$WORK/testing_script -TESTING_MASTER_LABEL_FILE=$WORK/testing_master_label_file - -./cnbh-syllables/run_training_and_testing/gen_htk_base_files.sh $WORK - -./cnbh-syllables/run_training_and_testing/test_features.sh \ - "$WORK" \ - "$FEATURES_ROOT/$FEATURE_CLASS/$SOURCE_SNR/" \ - "$FEATURE_SUFFIX" \ - "$HMM_STATES" \ - "$HMM_OUTPUT_COMPONENTS" \ - "$TRAINING_ITERATIONS" \ - "$TESTING_ITERATIONS" \ - "$FEATURE_SIZE" \ - "$FEATURE_TYPE" \ - "$TRAINING_SCRIPT" \ - "$TESTING_SCRIPT" \ - "$TRAINING_MASTER_LABEL_FILE" \ - "$TESTING_MASTER_LABEL_FILE" \ - "$SPOKE_PATTERN_FILE" -done -} - -######################## -# Standard MFCCs -FEATURE_CLASS=mfcc -FEATURE_SUFFIX=htk -FEATURE_SIZE=39 -FEATURE_TYPE=MFCC_0_D_A -TALKERS=inner_talkers -TRAINING_SNR=random -run_train_test -######################## - -######################## -# Standard MFCCs -# Train on extrema -FEATURE_CLASS=mfcc -FEATURE_SUFFIX=htk -FEATURE_SIZE=39 -FEATURE_TYPE=MFCC_0_D_A -TALKERS=outer_talkers -TRAINING_SNR=clean -#run_train_test -######################## - -######################## -# MFCCs with VTLN -FEATURE_CLASS=mfcc_vtln -FEATURE_SUFFIX=htk -FEATURE_SIZE=39 -FEATURE_TYPE=MFCC_0_D_A -TALKERS=inner_talkers -TRAINING_SNR=random -run_train_test -######################## - -######################## -# MFCCs with VTLN -# Train on extrema -FEATURE_CLASS=mfcc_vtln -FEATURE_SUFFIX=htk -FEATURE_SIZE=39 -FEATURE_TYPE=MFCC_0_D_A -TALKERS=outer_talkers -TRAINING_SNR=random -#run_train_test -######################## - -AIM_FEATURE_SUFFIXES="slice_1_no_cutoff ssi_profile_no_cutoff slice_1_cutoff ssi_profile_cutoff smooth_nap_profile" -for f in $AIM_FEATURE_SUFFIXES -do -######################## -# AIM Features -# Inner talkers -FEATURE_CLASS=aim -FEATURE_SUFFIX=$f -FEATURE_SIZE=12 -FEATURE_TYPE=USER_E_D_A -TALKERS=inner_talkers -TRAINING_SNR=random -run_train_test -######################## - -######################## -# AIM Features -# Inner talkers -FEATURE_CLASS=aim -FEATURE_SUFFIX=$f -FEATURE_SIZE=12 -FEATURE_TYPE=USER_E_D_A -TALKERS=outer_talkers -TRAINING_SNR=clean -#run_train_test -######################## -done - - - -
--- a/experiments/scripts/setup_aws_instance.sh Thu Jul 22 19:03:51 2010 +0000 +++ b/experiments/scripts/setup_aws_instance.sh Wed Aug 04 06:41:56 2010 +0000 @@ -1,19 +1,4 @@ #!/bin/bash # Run ami-2fc2e95b (32 bit) or ami-05c2e971 (64 bit) in eu-west zone -# ec2-run-instances --user-data-file ec2_user_data.sh --key tom_eu_west --instance-type m1.small --instance-count 1 --region eu-west-1 --availability-zone eu-west-1b ami-2fc2e95b -# ec2-run-instances --user-data-file ec2_user_data.sh --key tom_eu_west --instance-type c1.xlarge --instance-count 1 --region eu-west-1 --availability-zone eu-west-1b ami-05c2e971 -su ubuntu sudo apt-get -y update -sudo apt-get -y install bc subversion scons pkg-config libsndfile1-dev build-essential libboost-dev python sox python-matplotlib - -# For 64-bit systems, uncomment this line: -sudo apt-get -y install libc6-dev-i386 - -sudo mkdir -p /mnt/aimc -sudo chown `whoami` /mnt/aimc -sudo mkdir -p /mnt/log -sudo chown `whoami` /mnt/log -cd /mnt/aimc -svn checkout http://aimc.googlecode.com/svn/trunk/ aimc-read-only -cd aimc-read-only/experiments/scripts/ -./master.sh &> /mnt/log/log.log +sudo apt-get -y install subversion scons pkg-config libsndfile-dev build-essential libboost-dev libc6-dev-i386 python