Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
PaddlePaddle
X2Paddle
提交
47de9f50
X
X2Paddle
项目概览
PaddlePaddle
/
X2Paddle
大约 1 年 前同步成功
通知
328
Star
698
Fork
167
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
26
列表
看板
标记
里程碑
合并请求
4
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
X
X2Paddle
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
26
Issue
26
列表
看板
标记
里程碑
合并请求
4
合并请求
4
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
47de9f50
编写于
1月 04, 2022
作者:
Y
yeliang2258
浏览文件
操作
浏览文件
下载
差异文件
Merge remote-tracking branch 'upstream/develop' into idg_dev
上级
73451bb8
203fd120
变更
6
隐藏空白更改
内联
并排
Showing
6 changed file
with
64 addition
and
22 deletion
+64
-22
docs/inference_model_convertor/demo/tensorflow2paddle.ipynb
docs/inference_model_convertor/demo/tensorflow2paddle.ipynb
+2
-2
x2paddle/core/program.py
x2paddle/core/program.py
+3
-3
x2paddle/decoder/onnx_decoder.py
x2paddle/decoder/onnx_decoder.py
+2
-1
x2paddle/op_mapper/caffe2paddle/caffe_op_mapper.py
x2paddle/op_mapper/caffe2paddle/caffe_op_mapper.py
+6
-5
x2paddle/op_mapper/onnx2paddle/opset9/opset.py
x2paddle/op_mapper/onnx2paddle/opset9/opset.py
+30
-7
x2paddle/op_mapper/pytorch2paddle/aten.py
x2paddle/op_mapper/pytorch2paddle/aten.py
+21
-4
未找到文件。
docs/inference_model_convertor/demo/tensorflow2paddle.ipynb
浏览文件 @
47de9f50
...
...
@@ -81,7 +81,7 @@
"source": [
"## 模型迁移\n",
"### 1. 获取MobileNetV1的FrozenModel\n",
"由于X2Paddle只支持TensorFlow中FrozenModel的转换,如果为纯checkpoint模型,需要参考参考X2Paddle官方[文档](https://github.com/PaddlePaddle/X2Paddle/blob/
develop
/docs/user_guides/export_tf_model.md),将其转换为FrozenModel,本示例中提供的模型为FrozenModel,所以无需转换。"
"由于X2Paddle只支持TensorFlow中FrozenModel的转换,如果为纯checkpoint模型,需要参考参考X2Paddle官方[文档](https://github.com/PaddlePaddle/X2Paddle/blob/
release-1.1
/docs/user_guides/export_tf_model.md),将其转换为FrozenModel,本示例中提供的模型为FrozenModel,所以无需转换。"
]
},
{
...
...
@@ -210,4 +210,4 @@
},
"nbformat": 4,
"nbformat_minor": 4
}
}
\ No newline at end of file
x2paddle/core/program.py
浏览文件 @
47de9f50
...
...
@@ -558,9 +558,9 @@ class PaddleGraph(object):
paddle
.
save
(
self
.
parameters
,
save_path
)
def
dygraph2static
(
self
,
save_dir
,
input_shapes
=
[],
input_types
=
[]):
s
ep
c_list
=
list
()
s
pe
c_list
=
list
()
for
i
,
name
in
enumerate
(
self
.
inputs
):
s
ep
c_list
.
append
(
s
pe
c_list
.
append
(
paddle
.
static
.
InputSpec
(
shape
=
input_shapes
[
i
],
name
=
name
,
dtype
=
input_types
[
i
]))
path
=
osp
.
abspath
(
save_dir
)
...
...
@@ -574,7 +574,7 @@ class PaddleGraph(object):
else
:
model
.
set_dict
(
restore
)
model
.
eval
()
static_model
=
paddle
.
jit
.
to_static
(
model
,
input_spec
=
s
ep
c_list
)
static_model
=
paddle
.
jit
.
to_static
(
model
,
input_spec
=
s
pe
c_list
)
try
:
paddle
.
jit
.
save
(
static_model
,
osp
.
join
(
save_dir
,
"inference_model/model"
))
...
...
x2paddle/decoder/onnx_decoder.py
浏览文件 @
47de9f50
...
...
@@ -583,7 +583,8 @@ class ONNXDecoder(object):
item
.
name
=
self
.
make_variable_name
(
item
.
name
)
for
node
in
graph
.
node
:
node
.
name
=
node
.
output
[
0
]
if
":"
in
node
.
name
and
len
(
node
.
output
)
>
1
:
if
":"
in
node
.
name
and
len
(
node
.
output
)
>
1
and
node
.
op_type
!=
"LSTM"
:
node
.
name
=
node
.
name
.
split
(
':'
)[
0
]
node
.
name
=
self
.
make_variable_name
(
node
.
name
)
for
i
in
range
(
len
(
node
.
input
)):
...
...
x2paddle/op_mapper/caffe2paddle/caffe_op_mapper.py
浏览文件 @
47de9f50
...
...
@@ -966,11 +966,12 @@ class CaffeOpMapper():
inputs
=
{
"x"
:
input
.
name
},
outputs
=
[
node
.
layer_name
],
**
layer_attrs
)
self
.
paddle_graph
.
add_layer
(
"paddle.pow"
,
inputs
=
{
"x"
:
node
.
layer_name
},
outputs
=
[
node
.
layer_name
],
exponent
=
params
.
power
)
if
params
.
power
!=
1
:
self
.
paddle_graph
.
add_layer
(
"paddle.pow"
,
inputs
=
{
"x"
:
node
.
layer_name
,
"y"
:
params
.
power
},
outputs
=
[
node
.
layer_name
])
def
Reduction
(
self
,
node
):
assert
len
(
...
...
x2paddle/op_mapper/onnx2paddle/opset9/opset.py
浏览文件 @
47de9f50
...
...
@@ -2277,14 +2277,35 @@ class OpSet9():
paddings
,
var_x
=
self
.
_pad_if_asymmetric
(
node
,
pads
,
val_x
)
output_size
=
[
0
,
0
]
if
len
(
output_size
)
!=
0
:
paddings
=
[
0
]
*
4
total_paddings
=
list
()
total_paddings
.
append
((
val_x
.
out_shapes
[
0
][
2
]
-
1
)
*
strides
[
0
]
+
dilations
[
0
]
*
(
kernel_shape
[
0
]
-
1
)
+
1
+
out_padding
[
0
]
-
output_size
[
0
])
total_paddings
.
append
((
val_x
.
out_shapes
[
0
][
3
]
-
1
)
*
strides
[
1
]
+
dilations
[
1
]
*
(
kernel_shape
[
1
]
-
1
)
+
1
+
out_padding
[
1
]
-
output_size
[
1
])
if
auto_pad
==
"SAME_UPPER"
:
for
i
in
range
(
len
(
total_paddings
)):
paddings
[
2
*
i
]
=
total_paddings
[
0
]
-
total_paddings
[
0
]
//
2
paddings
[
2
*
i
+
1
]
=
total_paddings
[
0
]
//
2
else
:
for
i
in
range
(
len
(
total_paddings
)):
paddings
[
2
*
i
]
=
total_paddings
[
0
]
//
2
paddings
[
2
*
i
+
1
]
=
total_paddings
[
0
]
-
total_paddings
[
0
]
//
2
else
:
output_size
=
[
0
,
0
]
output_size
[
0
]
=
(
val_x
.
out_shapes
[
0
][
2
]
-
1
)
*
strides
[
0
]
-
2
*
paddings
[
0
]
+
dilations
[
0
]
*
(
kernel_shape
[
0
]
-
1
)
+
1
+
out_padding
[
0
]
output_size
[
1
]
=
(
val_x
.
out_shapes
[
0
][
3
]
-
1
)
*
strides
[
1
]
-
2
*
paddings
[
1
]
+
dilations
[
1
]
*
(
kernel_shape
[
1
]
-
1
)
+
1
+
out_padding
[
1
]
output_size
[
0
]
=
(
val_x
.
out_shapes
[
0
][
2
]
-
1
)
*
strides
[
0
]
-
2
*
paddings
[
0
]
+
dilations
[
0
]
*
(
kernel_shape
[
0
]
-
1
)
+
1
+
out_padding
[
0
]
output_size
[
1
]
=
(
val_x
.
out_shapes
[
0
][
3
]
-
1
)
*
strides
[
1
]
-
2
*
paddings
[
1
]
+
dilations
[
1
]
*
(
kernel_shape
[
1
]
-
1
)
+
1
+
out_padding
[
1
]
# Conv2DTranspose缺少output_size,只能在forward里头传进output_size
inputs_dict
=
{
'x'
:
val_x
if
isinstance
(
val_x
,
str
)
else
val_x
.
name
}
...
...
@@ -2327,6 +2348,8 @@ class OpSet9():
if
val_b
is
not
None
:
_rename_or_remove_weight
(
self
.
weights
,
val_b
.
name
,
op_name
+
'.bias'
)
else
:
layer_attrs
[
"bias_attr"
]
=
False
self
.
paddle_graph
.
add_layer
(
kernel
=
paddle_op
,
inputs
=
inputs_dict
,
...
...
x2paddle/op_mapper/pytorch2paddle/aten.py
浏览文件 @
47de9f50
...
...
@@ -1315,8 +1315,10 @@ def aten__convolution(mapper, graph, node):
weights
=
mapper
.
pytorch_params
[
inputs_name
[
1
]]
if
len
(
weights
.
shape
)
==
3
:
op_name
=
name_generator
(
"conv1d"
,
mapper
.
nn_name2id
)
el
se
:
el
if
len
(
weights
.
shape
)
==
4
:
op_name
=
name_generator
(
"conv2d"
,
mapper
.
nn_name2id
)
else
:
op_name
=
name_generator
(
"conv3d"
,
mapper
.
nn_name2id
)
output_name
=
mapper
.
_get_outputs_name
(
node
)[
0
]
layer_outputs
=
[
op_name
,
output_name
]
layer_inputs
=
{}
...
...
@@ -1364,7 +1366,22 @@ def aten__convolution(mapper, graph, node):
else
:
layer_attrs
[
'in_channels'
]
=
weights
.
shape
[
1
]
*
mapper
.
attrs
[
inputs_name
[
8
]]
if
len
(
weights
.
shape
)
==
4
:
if
len
(
weights
.
shape
)
==
3
:
if
mapper
.
attrs
[
inputs_name
[
6
]]:
graph
.
add_layer
(
"paddle.nn.Conv1DTranspose"
,
inputs
=
layer_inputs
,
outputs
=
layer_outputs
,
scope_name
=
scope_name
,
**
layer_attrs
)
else
:
graph
.
add_layer
(
"paddle.nn.Conv1D"
,
inputs
=
layer_inputs
,
outputs
=
layer_outputs
,
scope_name
=
scope_name
,
**
layer_attrs
)
elif
len
(
weights
.
shape
)
==
4
:
if
mapper
.
attrs
[
inputs_name
[
6
]]:
graph
.
add_layer
(
"paddle.nn.Conv2DTranspose"
,
...
...
@@ -1382,14 +1399,14 @@ def aten__convolution(mapper, graph, node):
else
:
if
mapper
.
attrs
[
inputs_name
[
6
]]:
graph
.
add_layer
(
"paddle.nn.Conv
1
DTranspose"
,
"paddle.nn.Conv
3
DTranspose"
,
inputs
=
layer_inputs
,
outputs
=
layer_outputs
,
scope_name
=
scope_name
,
**
layer_attrs
)
else
:
graph
.
add_layer
(
"paddle.nn.Conv
1
D"
,
"paddle.nn.Conv
3
D"
,
inputs
=
layer_inputs
,
outputs
=
layer_outputs
,
scope_name
=
scope_name
,
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录