acb7574c02086a5c1438de52fee2f6499e9b4404
[platform/core/ml/nnfw.git] / compiler / pota-quantization-value-test / test_record_minmax.sh
1 #!/bin/bash
2
3 # This script tests the basic behavior of record-minmax
4 #
5 # HOW TO USE
6 #
7 # ./test_record_minmax.sh <path/to/test.config> <path/to/work_dir> <TEST 1> <TEST 2> ...
8 # test.config : set ${RECORD_MINMAX_PATH} and ${CIRCLE2CIRCLE_PATH}
9 # work_dir : build directory of quantization-value-test (ex: build/compiler/quantization-value-test)
10
11 SOURCE_PATH="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
12 GEN_SCRIPT_PATH="${SOURCE_PATH}/gen_h5_explicit_inputs.py"
13 COMPARE_SCRIPT_PATH="${SOURCE_PATH}/compare_tensors.py"
14 CONFIG_PATH="$1"; shift
15 BIN_PATH=$(dirname "${CONFIG_PATH}")
16 TEST_INPUT_PATH="${SOURCE_PATH}/test_inputs"
17 WORKDIR="$1"; shift
18
19 source "${CONFIG_PATH}"
20
21 echo "-- Found RECORD-MINMAX: ${RECORD_MINMAX_PATH}"
22 echo "-- Found CIRCLE_TENSORDUMP: ${CIRCLE_TENSORDUMP_PATH}"
23 echo "-- Found workdir: ${WORKDIR}"
24
25 TESTED=()
26 PASSED=()
27 FAILED=()
28
29 pushd "${WORKDIR}"
30 while [ "$1" != "" ]; do  
31   MODELNAME=$1; shift
32   GRANULARITY=$1; shift
33   DTYPE=$1; shift
34   TESTCASE="${MODELNAME}.${GRANULARITY}.${DTYPE}"
35
36   TESTED+=("${TESTCASE}")
37
38   TESTCASE_FILE="${WORKDIR}/${TESTCASE}"
39   TEST_RESULT_FILE="${BIN_PATH}/${TESTCASE}"
40
41   PASSED_TAG="${TEST_RESULT_FILE}.record_minmax.passed"
42   rm -f "${PASSED_TAG}"
43
44   cat > "${TEST_RESULT_FILE}_record_minmax.log" <(
45     exec 2>&1
46     set -ex
47
48     # Generate h5 input data
49     source "${VIRTUALENV}/bin/activate"
50     "${VIRTUALENV}/bin/python" "${GEN_SCRIPT_PATH}" \
51       --model "${WORKDIR}/${MODELNAME}.tflite" \
52       --input "${TEST_INPUT_PATH}/${MODELNAME}/${GRANULARITY}/${DTYPE}" \
53       --output "${TESTCASE_FILE}.input.h5"
54
55     if [[ $? -ne 0 ]]; then
56       echo "FAILED TO GENERATE INPUT"
57       continue
58     fi
59
60     # Run record-minmax
61     "${RECORD_MINMAX_PATH}" \
62       --input_model "${TEST_RESULT_FILE}.fake_quantized.circle" \
63       --input_data "${TESTCASE_FILE}.input.h5" \
64       --output_model "${TEST_RESULT_FILE}.minmax_recorded.circle" 
65
66     # Dump min/max values (circle-tensordump)
67     "${CIRCLE_TENSORDUMP_PATH}" \
68       "${TEST_RESULT_FILE}.minmax_recorded.circle" \
69       --tensors_to_hdf5 "${TEST_RESULT_FILE}.minmax_recorded.circle.h5"
70
71     # Compare result
72     "${VIRTUALENV}/bin/python" "${COMPARE_SCRIPT_PATH}" \
73       --input_h5 "${TEST_RESULT_FILE}.minmax_recorded.circle.h5" \
74       --expect_dir "${SOURCE_PATH}/expected_outputs/${MODELNAME}/${GRANULARITY}/${DTYPE}/record_minmax" \
75       --mode record_minmax
76
77     if [[ $? -eq 0 ]]; then
78       touch "${PASSED_TAG}"
79     fi
80   )
81
82   if [[ -f "${PASSED_TAG}" ]]; then
83     PASSED+=("$TESTCASE")
84   else
85     FAILED+=("$TESTCASE")
86   fi
87 done
88 popd
89
90 if [[ ${#TESTED[@]} -ne ${#PASSED[@]} ]]; then
91   echo "FAILED"
92   for TEST in "${FAILED[@]}"
93   do
94     echo "- ${TEST}"
95   done
96   exit 255
97 fi
98
99 echo "PASSED"
100 exit 0