automatic commit
[folded-ctf.git] / run.sh
1 #!/bin/bash
2
3 #########################################################################
4 # This program is free software: you can redistribute it and/or modify  #
5 # it under the terms of the version 3 of the GNU General Public License #
6 # as published by the Free Software Foundation.                         #
7 #                                                                       #
8 # This program is distributed in the hope that it will be useful, but   #
9 # WITHOUT ANY WARRANTY; without even the implied warranty of            #
10 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU      #
11 # General Public License for more details.                              #
12 #                                                                       #
13 # You should have received a copy of the GNU General Public License     #
14 # along with this program. If not, see <http://www.gnu.org/licenses/>.  #
15 #                                                                       #
16 # Written by Francois Fleuret, (C) IDIAP                                #
17 # Contact <francois.fleuret@idiap.ch> for comments & bug reports        #
18 #########################################################################
19
20 MAIN_URL="http://www.idiap.ch/folded-ctf"
21
22 # Compiling
23
24 make -j -k
25
26 if [[ $? != 0 ]]; then
27     echo "Compilation failed." >&2
28     exit 1
29 fi
30
31 echo
32
33 ######################################################################
34 # Generating the pool file
35
36 DATA_PATH=./rmk-data
37 POOL_NAME=${DATA_PATH}/rmk.pool
38
39 if [[ -d ${DATA_PATH} ]]; then
40
41     if [[ -f ${POOL_NAME} ]]; then
42
43         echo "The pool file exists."
44
45     else
46
47         echo "Can not find the pool file, checking the data integrity."
48
49         md5sum -c ${DATA_PATH}/list.md5
50
51         if [[ $? != 0 ]]; then
52             echo "The data set is corrupted. You can download it" >&2
53             echo "from ${MAIN_URL}" >&2
54             exit 1
55         fi
56
57         echo "Generating the pool file."
58
59         ./list_to_pool ${DATA_PATH}/full.lst ${DATA_PATH} ${POOL_NAME}.wrk
60
61         if [[ $? == 0 ]]; then
62             mv ${POOL_NAME}.wrk ${POOL_NAME}
63         else
64             \rm ${POOL_NAME}.wrk 2> /dev/null
65             echo "Pool generation failed." >&2
66             exit 1
67         fi
68
69     fi
70
71 else
72
73     echo "Can not find the RateMyKitten images in ${DATA_PATH}. You can download" >&2
74     echo "them from ${MAIN_URL}" >&2
75     exit 1
76
77 fi
78
79 ######################################################################
80 # Running the computation per se
81
82 RESULT_DIR=./results
83
84 if [[ ! -d ${RESULT_DIR} ]]; then
85     mkdir ${RESULT_DIR}
86 fi
87
88 for SEED in {0..9}; do
89
90     for MODE in hb h+b; do
91
92         EXPERIMENT_RESULT_DIR="${RESULT_DIR}/${MODE}-${SEED}"
93
94         mkdir ${EXPERIMENT_RESULT_DIR} 2> /dev/null
95
96         if [[ $? == 0 ]]; then
97
98             OPTS="--random-seed=${SEED} --wanted-true-positive-rate=0.75"
99
100             if [[ $MODE == "h+b" ]]; then
101                 OPTS="${OPTS} --force-head-belly-independence=yes"
102             fi
103
104             if [[ $1 == "valgrind" ]]; then
105                 OPTS="${OPTS} --nb-classifiers-per-level=1 --nb-weak-learners-per-classifier=10"
106                 OPTS="${OPTS} --proportion-for-train=0.1 --proportion-for-validation=0.025 --proportion-for-test=0.01"
107                 OPTS="${OPTS} --wanted-true-positive-rate=0.1"
108                 DEBUGGER="valgrind --db-attach=yes --leak-check=full --show-reachable=yes"
109             fi
110
111             ${DEBUGGER} ./folding \
112                 --niceness=15 \
113                 --pool-name=${POOL_NAME} \
114                 --nb-levels=2 \
115                 --nb-classifiers-per-level=25 --nb-weak-learners-per-classifier=100 \
116                 --result-path=${EXPERIMENT_RESULT_DIR} \
117                 --detector-name=${EXPERIMENT_RESULT_DIR}/default.det \
118                 ${OPTS} \
119                 open-pool \
120                 train-detector \
121                 compute-thresholds \
122                 write-detector \
123                 sequence-test-detector | tee -a ${EXPERIMENT_RESULT_DIR}/stdout
124
125         else
126
127             echo "${EXPERIMENT_RESULT_DIR} exists, aborting experiment."
128
129         fi
130
131     done
132
133 done