Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
as350144
Mace
提交
78c77405
Mace
项目概览
as350144
/
Mace
与 Fork 源项目一致
Fork自
Xiaomi / Mace
通知
2
Star
1
Fork
1
代码
文件
提交
分支
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,发现更多精彩内容 >>
提交
78c77405
编写于
11月 06, 2017
作者:
Y
Yin Li
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Support quantized resizebilinear and atrous conv
上级
5b14efee
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
50 addition
and
6 deletion
+50
-6
mace/dsp/hexagon_control_wrapper.cc
mace/dsp/hexagon_control_wrapper.cc
+1
-1
mace/dsp/ops.h
mace/dsp/ops.h
+3
-0
mace/python/tools/dsp_ops.py
mace/python/tools/dsp_ops.py
+3
-0
mace/python/tools/tf_dsp_converter_lib.py
mace/python/tools/tf_dsp_converter_lib.py
+43
-5
未找到文件。
mace/dsp/hexagon_control_wrapper.cc
浏览文件 @
78c77405
...
...
@@ -80,7 +80,7 @@ bool HexagonControlWrapper::SetupGraph(NetDef net_def) {
for
(
const
OperatorDef
&
op
:
net_def
.
op
())
{
unsigned
int
op_id
;
MACE_CHECK
(
hexagon_nn_op_name_to_id
(
op
.
type
().
data
(),
&
op_id
)
==
0
,
"invalid op: "
,
op
.
name
());
"invalid op: "
,
op
.
name
()
,
", type: "
,
op
.
type
()
);
vector
<
hexagon_nn_input
>
inputs
(
op
.
node_input_size
());
for
(
size_t
i
=
0
;
i
<
op
.
node_input_size
();
++
i
)
{
inputs
[
i
].
src_id
=
node_id
(
op
.
node_input
(
i
).
node_id
());
...
...
mace/dsp/ops.h
浏览文件 @
78c77405
...
...
@@ -157,8 +157,11 @@ DEF_OP_WREF(QuantizedMinimum_8)
DEF_OP
(
Pad_f
)
DEF_OP
(
SpaceToBatchND_f
)
DEF_OP
(
BatchToSpaceND_f
)
DEF_OP
(
QuantizedSpaceToBatchND_8
)
DEF_OP
(
QuantizedBatchToSpaceND_8
)
DEF_OP
(
QuantizedPad_8
)
DEF_OP
(
ResizeBilinear_f
)
DEF_OP
(
QuantizedResizeBilinear_8
)
DEF_OP
(
ConcatV2_f
)
DEF_OP
(
ConcatV2_int32
)
DEF_OP
(
Prod_int32
)
...
...
mace/python/tools/dsp_ops.py
浏览文件 @
78c77405
...
...
@@ -18,6 +18,9 @@ class DspOps(object):
'QuantizedAvgPool'
:
'QuantizedAvgPool_8'
,
'QuantizedConcat'
:
'QuantizedConcat_8'
,
'QuantizedBiasAdd'
:
'QuantizedBiasAdd_8p8to32'
,
'QuantizedResizeBilinear'
:
'QuantizedResizeBilinear_8'
,
'QuantizedSpaceToBatchND'
:
'QuantizedSpaceToBatchND_8'
,
'QuantizedBatchToSpaceND'
:
'QuantizedBatchToSpaceND_8'
,
'Min'
:
'Min_f'
,
'Max'
:
'Max_f'
,
'QuantizeV2'
:
'Quantize'
,
...
...
mace/python/tools/tf_dsp_converter_lib.py
浏览文件 @
78c77405
...
...
@@ -17,6 +17,7 @@ padding_mode = {
node_count
=
0
node_ids
=
{}
resolved_ops
=
set
()
def
max_elem_size
(
tensor
):
if
len
(
tensor
.
shape
.
as_list
())
==
0
:
...
...
@@ -72,7 +73,10 @@ def convert_ops(unresolved_ops, net_def, output_node, dsp_ops):
print
(
'Op: '
,
first_op
.
name
,
first_op
.
type
,
first_op
.
outputs
[
0
].
shape
)
if
first_op
.
type
==
'Const'
:
if
first_op
.
name
in
resolved_ops
:
pass
elif
first_op
.
type
==
'Const'
:
print
(
'Add const node: '
,
first_op
.
name
)
tf_tensor
=
first_op
.
outputs
[
0
].
eval
()
tensor
=
net_def
.
tensors
.
add
()
...
...
@@ -99,10 +103,34 @@ def convert_ops(unresolved_ops, net_def, output_node, dsp_ops):
op_def
.
type
=
dsp_ops
.
map_nn_op
(
first_op
.
type
)
op_def
.
node_id
=
node_count
node_count
+=
1
register_node_id
(
op_def
.
name
,
op_def
.
node_id
)
op_def
.
padding
=
padding_mode
[
'NA'
]
if
has_padding_and_strides
(
first_op
):
if
len
(
first_op
.
outputs
)
>
0
and
first_op
.
type
==
'Dequantize'
\
and
len
(
first_op
.
outputs
[
0
].
consumers
())
>
0
\
and
(
first_op
.
outputs
[
0
].
consumers
()[
0
].
type
==
'SpaceToBatchND'
\
or
first_op
.
outputs
[
0
].
consumers
()[
0
].
type
==
'BatchToSpaceND'
):
input_tensor
=
first_op
.
inputs
[
0
]
min_tensor
=
first_op
.
inputs
[
1
]
max_tensor
=
first_op
.
inputs
[
2
]
s2b_op
=
first_op
.
outputs
[
0
].
consumers
()[
0
]
reshape_op
=
s2b_op
.
outputs
[
0
].
consumers
()[
0
]
min_op
=
reshape_op
.
outputs
[
0
].
consumers
()[
0
]
max_op
=
reshape_op
.
outputs
[
0
].
consumers
()[
1
]
quantize_op
=
min_op
.
outputs
[
0
].
consumers
()[
0
]
resolved_ops
.
add
(
s2b_op
.
name
)
resolved_ops
.
add
(
reshape_op
.
name
)
resolved_ops
.
add
(
min_op
.
name
)
resolved_ops
.
add
(
max_op
.
name
)
resolved_ops
.
add
(
quantize_op
.
name
)
op_def
.
name
=
quantize_op
.
name
op_def
.
type
=
dsp_ops
.
map_nn_op
(
'Quantized'
+
s2b_op
.
type
)
op_def
.
input
.
append
(
input_tensor
.
name
)
op_def
.
input
.
extend
([
t
.
name
for
t
in
s2b_op
.
inputs
[
1
:]])
op_def
.
input
.
extend
([
min_tensor
.
name
,
max_tensor
.
name
])
op_def
.
out_max_byte_size
.
extend
([
max_elem_size
(
out
)
for
out
in
quantize_op
.
outputs
])
elif
has_padding_and_strides
(
first_op
):
op_def
.
padding
=
padding_mode
[
first_op
.
get_attr
(
'padding'
)]
op_def
.
input
.
extend
([
t
.
name
for
t
in
first_op
.
inputs
])
if
'ksize'
in
first_op
.
node_def
.
attr
:
...
...
@@ -138,6 +166,8 @@ def convert_ops(unresolved_ops, net_def, output_node, dsp_ops):
else
:
raise
Exception
(
'Unsupported op: '
,
first_op
)
register_node_id
(
op_def
.
name
,
op_def
.
node_id
)
print
(
'Add op node: '
,
first_op
.
name
)
for
t
in
op_def
.
input
:
node
,
port
=
t
.
split
(
':'
)
...
...
@@ -146,6 +176,8 @@ def convert_ops(unresolved_ops, net_def, output_node, dsp_ops):
node_input
.
node_id
=
node_id
node_input
.
output_port
=
int
(
port
)
resolved_ops
.
add
(
first_op
.
name
)
for
i
in
range
(
resolved_count
):
del
unresolved_ops
[
0
]
...
...
@@ -190,8 +222,14 @@ def convert_to_mace_pb(input_graph_def, input_dim, output_node):
with
session
.
graph
.
as_default
()
as
graph
:
tf
.
import_graph_def
(
input_graph_def
,
name
=
""
)
ops
=
graph
.
get_operations
()
unresolved_ops
=
ops
dsp_ops
=
DspOps
()
# convert const node
unresolved_ops
=
[
op
for
op
in
ops
if
op
.
type
==
'Const'
]
while
len
(
unresolved_ops
)
>
0
:
convert_ops
(
unresolved_ops
,
net_def
,
output_node
,
dsp_ops
)
# convert op node
unresolved_ops
=
[
op
for
op
in
ops
if
op
.
type
!=
'Const'
]
while
len
(
unresolved_ops
)
>
0
:
convert_ops
(
unresolved_ops
,
net_def
,
output_node
,
dsp_ops
)
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录