5 ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
8 if [ "$#" -le 0 ]; then
11 command -v "$@" > /dev/null 2>&1
16 echo "Convert TensorFlow model to nnpackage."
17 echo "Usage: tf2nnpkg --info <path/to/info> --graphdef <path/to/pb> [OPTION] -o <path/to/nnpkg/directory>"
21 # Parse command-line arguments
23 while [ "$#" -ne 0 ]; do
35 export GRAPHDEF_FILE="$2"
39 export OUTPUT_DIR="$2"
49 if [ -z ${GRAPHDEF_FILE} ] || [ ! -e ${GRAPHDEF_FILE} ]; then
50 echo "pb is not found. Please check --graphdef is correct."
54 if [ -z ${INFO_FILE} ] || [ ! -e ${INFO_FILE} ]; then
55 echo "info is not found. Please check --info is correct."
59 if [ -z ${OUTPUT_DIR} ]; then
60 echo "output directory is not specifed. Please check -o is correct.."
64 FILE_BASE=$(basename ${GRAPHDEF_FILE})
65 MODEL_NAME="${FILE_BASE%.*}"
67 trap "{ rm -rf $TMPDIR; }" EXIT
69 # activate python virtual environment
70 VIRTUALENV_LINUX="${ROOT}/bin/venv/bin/activate"
71 VIRTUALENV_WINDOWS="${ROOT}/bin/venv/Scripts/activate"
73 if [ -e ${VIRTUALENV_LINUX} ]; then
74 source ${VIRTUALENV_LINUX}
75 elif [ -e ${VIRTUALENV_WINDOWS} ]; then
76 source ${VIRTUALENV_WINDOWS}
79 # parse inputs, outputs from info file
80 INPUT=$(awk -F, '/^input/ { print $2 }' ${INFO_FILE} | cut -d: -f1 | tr -d ' ' | paste -d, -s)
81 OUTPUT=$(awk -F, '/^output/ { print $2 }' ${INFO_FILE} | cut -d: -f1 | tr -d ' ' | paste -d, -s)
83 INPUT_SHAPES=$(grep ^input ${INFO_FILE} | cut -d "[" -f2 | cut -d "]" -f1 | tr -d ' ' | xargs | tr ' ' ':')
85 # generate tflite file
86 python "${ROOT}/bin/tf2tfliteV2.py" --v2 --input_path ${GRAPHDEF_FILE} \
87 --output_path "${TMPDIR}/${MODEL_NAME}.tflite" \
88 --input_arrays ${INPUT} --output_arrays ${OUTPUT} || \
89 python "${ROOT}/bin/tf2tfliteV2.py" --v1 --input_path ${GRAPHDEF_FILE} \
90 --output_path "${TMPDIR}/${MODEL_NAME}.tflite" \
91 --input_arrays ${INPUT} --input_shapes ${INPUT_SHAPES} \
92 --output_arrays ${OUTPUT}
94 # convert .tflite to .circle
95 "${ROOT}/bin/tflite2circle" "${TMPDIR}/${MODEL_NAME}.tflite" "${TMPDIR}/${MODEL_NAME}.tmp.circle"
98 "${ROOT}/bin/circle2circle" --all "${TMPDIR}/${MODEL_NAME}.tmp.circle" "${TMPDIR}/${MODEL_NAME}.circle"
100 "${ROOT}/bin/model2nnpkg.sh" -o "${OUTPUT_DIR}" "${TMPDIR}/${MODEL_NAME}.circle"