validate_gcn.sh 3.0 KB
Newer Older
L
liuqi 已提交
1 2
#!/bin/bash
# Must run at root dir of mace project.
Y
Yin Li 已提交
3
set +x
L
liuqi 已提交
4
Usage() {
L
liuqi 已提交
5
  echo 'Usage: bash tools/validate_gcn.sh tf_model_path image_size'
L
liuqi 已提交
6 7
}

L
liuqi 已提交
8
if [ $# != 2 ];then
L
liuqi 已提交
9 10 11 12 13 14 15 16 17
  Usage
  exit -1
fi

TF_MODEL_FILE_PATH=$1
MODEL_DIR=$(dirname ${TF_MODEL_FILE_PATH})
MACE_MODEL_NAME='mace_model.pb'
INPUT_FILE_NAME='model_input'
OUTPUT_FILE_NAME='gcn.out'
L
liuqi 已提交
18
OUTPUT_LIST_FILE='gcn.list'
L
liuqi 已提交
19 20
PHONE_DATA_DIR="/data/local/tmp/${MACE_MODEL_NAME}"
KERNEL_DIR="${PHONE_DATA_DIR}/cl/"
L
liuqi 已提交
21
IMAGE_SIZE=$2
L
liuqi 已提交
22

L
liuqi 已提交
23 24 25 26
# Step 1: Generate input data
echo "Step 1: Generate input data"
python tools/validate.py --generate_data true --random_seed 1 \
 --input_file=${MODEL_DIR}/${INPUT_FILE_NAME} \
L
liuqi 已提交
27
 --input_shape="${IMAGE_SIZE},${IMAGE_SIZE},3"
L
liuqi 已提交
28 29

# Step 2: convert tf model to mace model
L
liuqi 已提交
30 31 32 33 34 35 36 37
#echo "Step 2: convert tf model to mace model and optimize memory"
#bazel build //mace/python/tools:tf_converter
#bazel-bin/mace/python/tools/tf_converter --input=${TF_MODEL_FILE_PATH} \
#                                         --output=${MODEL_DIR}/${MACE_MODEL_NAME} \
#                                         --input_node=input \
#                                         --output_node=GCN/br_result_2/fcn_br \
#                                         --data_type=DT_HALF \
#                                         --runtime=gpu
L
liuqi 已提交
38 39 40 41 42 43 44 45 46 47 48

# Step 3: Run model on the phone
echo "Step 3: Run model on the phone"
bazel build -c opt --strip always mace/examples:mace_run  \
    --crosstool_top=//external:android/crosstool \
    --host_crosstool_top=@bazel_tools//tools/cpp:toolchain \
    --cpu=arm64-v8a

adb shell "mkdir -p ${PHONE_DATA_DIR}"
adb shell "mkdir -p ${KERNEL_DIR}"
adb push mace/kernels/opencl/cl/* ${KERNEL_DIR}
L
liuqi 已提交
49
#adb push ${MODEL_DIR}/${MACE_MODEL_NAME} ${PHONE_DATA_DIR}
L
liuqi 已提交
50 51 52
adb push ${MODEL_DIR}/${INPUT_FILE_NAME} ${PHONE_DATA_DIR}
adb push bazel-bin/mace/examples/mace_run ${PHONE_DATA_DIR}

L
liuqi 已提交
53
num_threads=${1:-4}
L
liuqi 已提交
54

L
liuqi 已提交
55 56
adb </dev/null shell MACE_CPP_MIN_VLOG_LEVEL=0 \
        MACE_RUN_PARAMETER_PATH=${PHONE_DATA_DIR}/mace_run.config \
L
liuqi 已提交
57 58 59
        MACE_KERNEL_PATH=$KERNEL_DIR \
        OMP_NUM_THREADS=$num_threads \
        ${PHONE_DATA_DIR}/mace_run \
60
          --model=${PHONE_DATA_DIR}/${MACE_MODEL_NAME} \
L
liuqi 已提交
61 62
          --input=mace_input_node \
          --output=mace_output_node \
L
liuqi 已提交
63
          --input_shape="1,${IMAGE_SIZE},${IMAGE_SIZE},3"\
L
liuqi 已提交
64 65
          --input_file=${PHONE_DATA_DIR}/${INPUT_FILE_NAME} \
          --output_file=${PHONE_DATA_DIR}/${OUTPUT_FILE_NAME} \
Y
Yin Li 已提交
66 67
          --device=OPENCL   \
          --round=1
L
liuqi 已提交
68 69 70

# Step 4: pull the mace run result.
echo "Step 4: pull the mace run result."
L
liuqi 已提交
71 72
rm -rf ${MODEL_DIR}/${OUTPUT_FILE_NAME}
adb </dev/null pull ${PHONE_DATA_DIR}/${OUTPUT_FILE_NAME} ${MODEL_DIR}
L
liuqi 已提交
73 74 75 76

# Step 5: validate the result
echo "Step 5: validate the result"
python tools/validate.py --model_file ${TF_MODEL_FILE_PATH} \
L
liuqi 已提交
77 78 79 80
    --input_file ${MODEL_DIR}/${INPUT_FILE_NAME} \
    --mace_out_file ${MODEL_DIR}/${OUTPUT_FILE_NAME} \
    --input_node input \
    --output_node GCN/br_result_2/fcn_br\
L
liuqi 已提交
81 82
    --input_shape "${IMAGE_SIZE},${IMAGE_SIZE},3" \
    --output_shape "1,${IMAGE_SIZE},${IMAGE_SIZE},2"