Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Xiaomi
Mace
提交
09772f22
Mace
项目概览
Xiaomi
/
Mace
通知
106
Star
40
Fork
27
代码
文件
提交
分支
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看板
体验新版 GitCode,发现更多精彩内容 >>
提交
09772f22
编写于
1月 31, 2018
作者:
L
liuqi
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Support run on local PC.
上级
0eff4f35
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
139 addition
and
1 deletion
+139
-1
local_validate_model.sh
local_validate_model.sh
+131
-0
validate.py
validate.py
+2
-1
validate_model.sh
validate_model.sh
+6
-0
未找到文件。
local_validate_model.sh
0 → 100755
浏览文件 @
09772f22
#!/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
}
"
\
$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.py
浏览文件 @
09772f22
...
@@ -43,7 +43,8 @@ def valid_output(out_shape, mace_out_file, tf_out_value):
...
@@ -43,7 +43,8 @@ def valid_output(out_shape, mace_out_file, tf_out_value):
if
mace_out_value
.
size
!=
0
:
if
mace_out_value
.
size
!=
0
:
similarity
=
(
1
-
spatial
.
distance
.
cosine
(
tf_out_value
.
flat
,
mace_out_value
))
similarity
=
(
1
-
spatial
.
distance
.
cosine
(
tf_out_value
.
flat
,
mace_out_value
))
print
'MACE VS TF similarity: '
,
similarity
print
'MACE VS TF similarity: '
,
similarity
if
(
FLAGS
.
mace_runtime
==
"gpu"
and
similarity
>
0.995
)
or
\
if
(
FLAGS
.
mace_runtime
==
"cpu"
and
similarity
>
0.999
)
or
\
(
FLAGS
.
mace_runtime
==
"gpu"
and
similarity
>
0.995
)
or
\
(
FLAGS
.
mace_runtime
==
"dsp"
and
similarity
>
0.930
):
(
FLAGS
.
mace_runtime
==
"dsp"
and
similarity
>
0.930
):
print
'=======================Similarity Test Passed======================'
print
'=======================Similarity Test Passed======================'
else
:
else
:
...
...
validate_model.sh
浏览文件 @
09772f22
...
@@ -29,6 +29,9 @@ if [ x"$RUNTIME" = x"dsp" ]; then
...
@@ -29,6 +29,9 @@ if [ x"$RUNTIME" = x"dsp" ]; then
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"
elif
[
x
"
$RUNTIME
"
=
x
"cpu"
]
;
then
DATA_TYPE
=
"DT_FLOAT"
DEVICE_TYPE
=
"CPU"
else
else
Usage
Usage
exit
-1
exit
-1
...
@@ -62,6 +65,9 @@ build_and_run()
...
@@ -62,6 +65,9 @@ build_and_run()
if
[[
"
${
TUNING_OR_NOT
}
"
!=
"0"
&&
"
$PRODUCTION_MODE
"
!=
true
]]
;
then
if
[[
"
${
TUNING_OR_NOT
}
"
!=
"0"
&&
"
$PRODUCTION_MODE
"
!=
true
]]
;
then
tuning_flag
=
1
tuning_flag
=
1
round
=
0
# only warm up
round
=
0
# only warm up
elif
[[
"
$PRODUCTION_MODE
"
!=
true
]]
;
then
tuning_flag
=
0
round
=
1
else
else
tuning_flag
=
0
tuning_flag
=
0
round
=
2
round
=
2
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录