Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
慢慢CG
Mace
提交
1b083ef3
Mace
项目概览
慢慢CG
/
Mace
与 Fork 源项目一致
Fork自
Xiaomi / Mace
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
Mace
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
1b083ef3
编写于
2月 01, 2018
作者:
L
liuqi
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Merge local_validate_model to validate_model.
上级
eb80f475
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
62 addition
and
155 deletion
+62
-155
local_validate_model.sh
local_validate_model.sh
+0
-132
validate_model.sh
validate_model.sh
+62
-23
未找到文件。
local_validate_model.sh
已删除
100755 → 0
浏览文件 @
eb80f475
#!/bin/bash
# Must run at root dir of mace project.
set
+x
Usage
()
{
echo
'Usage: bash tools/validate_model.sh tools/model.config'
}
if
[
$#
-lt
1
]
;
then
Usage
exit
-1
fi
source
$1
LIB_FOLDER_NAME
=
"libmace_v7"
if
[
x
"
$RUNTIME
"
=
x
"cpu"
]
;
then
DATA_TYPE
=
"DT_FLOAT"
DEVICE_TYPE
=
"CPU"
else
Usage
exit
-1
fi
LIBMACE_TAG
=
`
git describe
--abbrev
=
0
--tags
`
||
exit
-1
VLOG_LEVEL
=
0
MODEL_DIR
=
$(
dirname
${
TF_MODEL_FILE_PATH
}
)
LIBMACE_SOURCE_DIR
=
`
/bin/pwd
`
LIBMACE_BUILD_DIR
=
"
${
LIBMACE_SOURCE_DIR
}
/build"
INPUT_FILE_NAME
=
"model_input"
OUTPUT_FILE_NAME
=
"model.out"
OUTPUT_LIST_FILE
=
"model.list"
CODEGEN_DIR
=
${
LIBMACE_SOURCE_DIR
}
/codegen
MODEL_CODEGEN_DIR
=
${
CODEGEN_DIR
}
/models/
${
MODEL_TAG
}
CL_CODEGEN_DIR
=
${
CODEGEN_DIR
}
/opencl
CL_BIN_DIR
=
${
CODEGEN_DIR
}
/opencl_bin
TUNING_CODEGEN_DIR
=
${
CODEGEN_DIR
}
/tuning
VERSION_SOURCE_PATH
=
${
CODEGEN_DIR
}
/version
build_and_run
()
{
PRODUCTION_MODE
=
$1
if
[
"
$PRODUCTION_MODE
"
=
true
]
;
then
PRODUCTION_MODE_BUILD_FLAGS
=
"--define production=true"
fi
round
=
1
bazel build
--verbose_failures
-c
opt
--strip
always examples:mace_run
\
--copt
=
"-std=c++11"
\
--copt
=
"-D_GLIBCXX_USE_C99_MATH_TR1"
\
--copt
=
"-Werror=return-type"
\
--copt
=
"-DMACE_MODEL_TAG=
${
MODEL_TAG
}
"
\
--define
openmp
=
true
\
$PRODUCTION_MODE_BUILD_FLAGS
||
exit
-1
MACE_CPP_MIN_VLOG_LEVEL
=
$VLOG_LEVEL
\
bazel-bin/examples/mace_run
\
--input_shape
=
"
${
INPUT_SHAPE
}
"
\
--output_shape
=
"
${
OUTPUT_SHAPE
}
"
\
--input_file
=
${
MODEL_DIR
}
/
${
INPUT_FILE_NAME
}
\
--output_file
=
${
MODEL_DIR
}
/
${
OUTPUT_FILE_NAME
}
\
--device
=
${
DEVICE_TYPE
}
\
--round
=
$round
||
exit
-1
}
download_and_link_lib
()
{
if
[
!
-d
"
${
LIBMACE_SOURCE_DIR
}
/lib/
${
LIB_FOLDER_NAME
}
"
]
;
then
wget
-P
${
LIBMACE_SOURCE_DIR
}
/lib http://cnbj1-inner-fds.api.xiaomi.net/libmace/libs/
${
LIBMACE_TAG
}
/
${
LIB_FOLDER_NAME
}
.tar.gz
&&
\
tar
xvzf
${
LIBMACE_SOURCE_DIR
}
/lib/
${
LIB_FOLDER_NAME
}
.tar.gz
-C
${
LIBMACE_SOURCE_DIR
}
/lib/
||
exit
-1
echo
"
${
LIB_FOLDER_NAME
}
download successfully!"
else
echo
"
${
LIB_FOLDER_NAME
}
already exists!"
fi
echo
"Create link 'mace' of downloaded or existed
${
LIB_FOLDER_NAME
}
"
if
[
-L
${
LIBMACE_SOURCE_DIR
}
/lib/mace
]
;
then
unlink
${
LIBMACE_SOURCE_DIR
}
/lib/mace
fi
ln
-s
${
LIBMACE_SOURCE_DIR
}
/lib/
${
LIB_FOLDER_NAME
}
${
LIBMACE_SOURCE_DIR
}
/lib/mace
&&
\
rm
-rf
${
LIBMACE_SOURCE_DIR
}
/lib/
${
LIB_FOLDER_NAME
}
.tar.gz
||
exit
-1
}
echo
"Step 1: Generate input data"
rm
-rf
${
MODEL_DIR
}
/
${
INPUT_FILE_NAME
}
python tools/validate.py
--generate_data
true
\
--input_file
=
${
MODEL_DIR
}
/
${
INPUT_FILE_NAME
}
\
--input_shape
=
"
${
INPUT_SHAPE
}
"
||
exit
-1
echo
"Step 2: Convert tf model to mace model and optimize memory"
bazel build //lib/python/tools:tf_converter
||
exit
-1
rm
-rf
${
MODEL_CODEGEN_DIR
}
mkdir
-p
${
MODEL_CODEGEN_DIR
}
bazel-bin/lib/python/tools/tf_converter
--input
=
${
TF_MODEL_FILE_PATH
}
\
--output
=
${
MODEL_CODEGEN_DIR
}
/model.cc
\
--input_node
=
${
TF_INPUT_NODE
}
\
--output_node
=
${
TF_OUTPUT_NODE
}
\
--data_type
=
${
DATA_TYPE
}
\
--runtime
=
${
RUNTIME
}
\
--output_type
=
source
\
--template
=
${
LIBMACE_SOURCE_DIR
}
/lib/python/tools/model.template
\
--model_tag
=
${
MODEL_TAG
}
\
--input_shape
=
"
${
INPUT_SHAPE
}
"
\
--obfuscate
=
False
||
exit
-1
echo
"Step 3: Download mace static library"
download_and_link_lib
echo
"Step 4: remove the mace run result."
rm
-rf
${
MODEL_DIR
}
/
${
OUTPUT_FILE_NAME
}
echo
"Step 7: Run model on the phone using binary"
build_and_run
true
echo
"Step 9: Validate the result"
python tools/validate.py
--model_file
${
TF_MODEL_FILE_PATH
}
\
--input_file
${
MODEL_DIR
}
/
${
INPUT_FILE_NAME
}
\
--mace_out_file
${
MODEL_DIR
}
/
${
OUTPUT_FILE_NAME
}
\
--mace_runtime
${
RUNTIME
}
\
--input_node
${
TF_INPUT_NODE
}
\
--output_node
${
TF_OUTPUT_NODE
}
\
--input_shape
${
INPUT_SHAPE
}
\
--output_shape
${
OUTPUT_SHAPE
}
echo
"Step 10: Generate project static lib"
rm
-rf
${
LIBMACE_BUILD_DIR
}
mkdir
-p
${
LIBMACE_BUILD_DIR
}
/lib
cp
-rf
${
LIBMACE_SOURCE_DIR
}
/include
${
LIBMACE_BUILD_DIR
}
echo
"Done"
validate_model.sh
浏览文件 @
1b083ef3
...
@@ -22,16 +22,23 @@ else
...
@@ -22,16 +22,23 @@ else
exit
-1
exit
-1
fi
fi
MACE_RUNTIME
=
cpu
if
[
x
"
$RUNTIME
"
=
x
"dsp"
]
;
then
if
[
x
"
$RUNTIME
"
=
x
"dsp"
]
;
then
DATA_TYPE
=
"DT_UINT8"
DATA_TYPE
=
"DT_UINT8"
DEVICE_TYPE
=
"HEXAGON"
DEVICE_TYPE
=
"HEXAGON"
LIB_FOLDER_NAME
=
"
${
LIB_FOLDER_NAME
}
_dsp"
LIB_FOLDER_NAME
=
"
${
LIB_FOLDER_NAME
}
_dsp"
MACE_RUNTIME
=
$RUNTIME
elif
[
x
"
$RUNTIME
"
=
x
"gpu"
]
;
then
elif
[
x
"
$RUNTIME
"
=
x
"gpu"
]
;
then
DATA_TYPE
=
"DT_HALF"
DATA_TYPE
=
"DT_HALF"
DEVICE_TYPE
=
"OPENCL"
DEVICE_TYPE
=
"OPENCL"
MACE_RUNTIME
=
$RUNTIME
elif
[
x
"
$RUNTIME
"
=
x
"cpu"
]
;
then
elif
[
x
"
$RUNTIME
"
=
x
"cpu"
]
;
then
DATA_TYPE
=
"DT_FLOAT"
DATA_TYPE
=
"DT_FLOAT"
DEVICE_TYPE
=
"CPU"
DEVICE_TYPE
=
"CPU"
elif
[
x
"
$RUNTIME
"
=
x
"local"
]
;
then
DATA_TYPE
=
"DT_FLOAT"
DEVICE_TYPE
=
"CPU"
else
else
Usage
Usage
exit
-1
exit
-1
...
@@ -108,6 +115,27 @@ build_and_run()
...
@@ -108,6 +115,27 @@ build_and_run()
--round
=
$round
||
exit
-1
--round
=
$round
||
exit
-1
}
}
local_build_and_run
()
{
bazel build
--verbose_failures
-c
opt
--strip
always examples:mace_run
\
--copt
=
"-std=c++11"
\
--copt
=
"-D_GLIBCXX_USE_C99_MATH_TR1"
\
--copt
=
"-Werror=return-type"
\
--copt
=
"-DMACE_MODEL_TAG=
${
MODEL_TAG
}
"
\
--define
openmp
=
true
\
--define
production
=
true
||
exit
-1
MACE_CPP_MIN_VLOG_LEVEL
=
$VLOG_LEVEL
\
bazel-bin/examples/mace_run
\
--input_shape
=
"
${
INPUT_SHAPE
}
"
\
--output_shape
=
"
${
OUTPUT_SHAPE
}
"
\
--input_file
=
${
MODEL_DIR
}
/
${
INPUT_FILE_NAME
}
\
--output_file
=
${
MODEL_DIR
}
/
${
OUTPUT_FILE_NAME
}
\
--device
=
${
DEVICE_TYPE
}
\
--round
=
1
||
exit
-1
}
download_and_link_lib
()
download_and_link_lib
()
{
{
if
[
!
-d
"
${
LIBMACE_SOURCE_DIR
}
/lib/
${
LIB_FOLDER_NAME
}
"
]
;
then
if
[
!
-d
"
${
LIBMACE_SOURCE_DIR
}
/lib/
${
LIB_FOLDER_NAME
}
"
]
;
then
...
@@ -144,7 +172,7 @@ bazel-bin/lib/python/tools/tf_converter --input=${TF_MODEL_FILE_PATH} \
...
@@ -144,7 +172,7 @@ bazel-bin/lib/python/tools/tf_converter --input=${TF_MODEL_FILE_PATH} \
--input_node
=
${
TF_INPUT_NODE
}
\
--input_node
=
${
TF_INPUT_NODE
}
\
--output_node
=
${
TF_OUTPUT_NODE
}
\
--output_node
=
${
TF_OUTPUT_NODE
}
\
--data_type
=
${
DATA_TYPE
}
\
--data_type
=
${
DATA_TYPE
}
\
--runtime
=
${
RUNTIME
}
\
--runtime
=
${
MACE_
RUNTIME
}
\
--output_type
=
source
\
--output_type
=
source
\
--template
=
${
LIBMACE_SOURCE_DIR
}
/lib/python/tools/model.template
\
--template
=
${
LIBMACE_SOURCE_DIR
}
/lib/python/tools/model.template
\
--model_tag
=
${
MODEL_TAG
}
\
--model_tag
=
${
MODEL_TAG
}
\
...
@@ -155,37 +183,48 @@ bazel-bin/lib/python/tools/tf_converter --input=${TF_MODEL_FILE_PATH} \
...
@@ -155,37 +183,48 @@ bazel-bin/lib/python/tools/tf_converter --input=${TF_MODEL_FILE_PATH} \
echo
"Step 3: Download mace static library"
echo
"Step 3: Download mace static library"
download_and_link_lib
download_and_link_lib
echo
"Step 4: Run model on the phone with files"
if
[
x
"
$RUNTIME
"
=
x
"local"
]
;
then
build_and_run
false
echo
"Step 5: Generate OpenCL binary program and config code"
echo
"Step 4: remove the mace run result."
rm
-rf
${
CL_BIN_DIR
}
rm
-rf
${
MODEL_DIR
}
/
${
OUTPUT_FILE_NAME
}
rm
-rf
${
CL_CODEGEN_DIR
}
mkdir
-p
${
CL_BIN_DIR
}
mkdir
-p
${
CL_CODEGEN_DIR
}
adb pull
${
KERNEL_DIR
}
/.
${
CL_BIN_DIR
}
python lib/python/tools/opencl_codegen.py
\
--cl_binary_dir
=
${
CL_BIN_DIR
}
--output_path
=
${
CL_CODEGEN_DIR
}
/opencl_compiled_program.cc
echo
"Step 6: Generate tuning source file"
echo
"Step 8: Run model on the local pc using binary"
adb pull
${
PHONE_DATA_DIR
}
/mace_run.config
${
CL_BIN_DIR
}
local_build_and_run
rm
-rf
${
TUNING_CODEGEN_DIR
}
mkdir
-p
${
TUNING_CODEGEN_DIR
}
python lib/python/tools/binary_codegen.py
\
--binary_file
=
${
CL_BIN_DIR
}
/mace_run.config
--output_path
=
${
TUNING_CODEGEN_DIR
}
/tuning_params.cc
echo
"Step 7: Run model on the phone using binary"
else
build_and_run
true
echo
"Step 4: Run model on the phone with files"
build_and_run
false
echo
"Step 5: Generate OpenCL binary program and config code"
rm
-rf
${
CL_BIN_DIR
}
rm
-rf
${
CL_CODEGEN_DIR
}
mkdir
-p
${
CL_BIN_DIR
}
mkdir
-p
${
CL_CODEGEN_DIR
}
adb pull
${
KERNEL_DIR
}
/.
${
CL_BIN_DIR
}
python lib/python/tools/opencl_codegen.py
\
--cl_binary_dir
=
${
CL_BIN_DIR
}
--output_path
=
${
CL_CODEGEN_DIR
}
/opencl_compiled_program.cc
echo
"Step 6: Generate tuning source file"
adb pull
${
PHONE_DATA_DIR
}
/mace_run.config
${
CL_BIN_DIR
}
rm
-rf
${
TUNING_CODEGEN_DIR
}
mkdir
-p
${
TUNING_CODEGEN_DIR
}
python lib/python/tools/binary_codegen.py
\
--binary_file
=
${
CL_BIN_DIR
}
/mace_run.config
--output_path
=
${
TUNING_CODEGEN_DIR
}
/tuning_params.cc
echo
"Step 7: Run model on the phone using binary"
build_and_run
true
echo
"Step 8: Pull the mace run result."
rm
-rf
${
MODEL_DIR
}
/
${
OUTPUT_FILE_NAME
}
adb </dev/null pull
${
PHONE_DATA_DIR
}
/
${
OUTPUT_FILE_NAME
}
${
MODEL_DIR
}
echo
"Step 8: Pull the mace run result."
fi
rm
-rf
${
MODEL_DIR
}
/
${
OUTPUT_FILE_NAME
}
adb </dev/null pull
${
PHONE_DATA_DIR
}
/
${
OUTPUT_FILE_NAME
}
${
MODEL_DIR
}
echo
"Step 9: Validate the result"
echo
"Step 9: Validate the result"
python tools/validate.py
--model_file
${
TF_MODEL_FILE_PATH
}
\
python tools/validate.py
--model_file
${
TF_MODEL_FILE_PATH
}
\
--input_file
${
MODEL_DIR
}
/
${
INPUT_FILE_NAME
}
\
--input_file
${
MODEL_DIR
}
/
${
INPUT_FILE_NAME
}
\
--mace_out_file
${
MODEL_DIR
}
/
${
OUTPUT_FILE_NAME
}
\
--mace_out_file
${
MODEL_DIR
}
/
${
OUTPUT_FILE_NAME
}
\
--mace_runtime
${
RUNTIME
}
\
--mace_runtime
${
MACE_
RUNTIME
}
\
--input_node
${
TF_INPUT_NODE
}
\
--input_node
${
TF_INPUT_NODE
}
\
--output_node
${
TF_OUTPUT_NODE
}
\
--output_node
${
TF_OUTPUT_NODE
}
\
--input_shape
${
INPUT_SHAPE
}
\
--input_shape
${
INPUT_SHAPE
}
\
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录