Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
PaddlePaddle
X2Paddle
提交
56ee75d9
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看板
提交
56ee75d9
编写于
2月 05, 2021
作者:
S
SunAhong1993
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
add lrn
上级
4db8d282
变更
6
隐藏空白更改
内联
并排
Showing
6 changed file
with
53 addition
and
6 deletion
+53
-6
docs/introduction/op_list.md
docs/introduction/op_list.md
+3
-3
docs/introduction/x2paddle_model_zoo.md
docs/introduction/x2paddle_model_zoo.md
+1
-1
x2paddle/convert.py
x2paddle/convert.py
+5
-0
x2paddle/decoder/tf_decoder.py
x2paddle/decoder/tf_decoder.py
+1
-1
x2paddle/op_mapper/dygraph/onnx2paddle/opset9/opset.py
x2paddle/op_mapper/dygraph/onnx2paddle/opset9/opset.py
+22
-0
x2paddle/op_mapper/static/onnx2paddle/opset9/opset.py
x2paddle/op_mapper/static/onnx2paddle/opset9/opset.py
+21
-1
未找到文件。
docs/introduction/op_list.md
浏览文件 @
56ee75d9
...
...
@@ -42,7 +42,7 @@
| 21 | Axpy | 22 | ROIPolling | 23 | Permute | 24 | DetectionOutput |
| 25 | Normalize | 26 | Select | 27 | ShuffleChannel | 28 | ConvolutionDepthwise |
| 29 | ReLU | 30 | AbsVal | 31 | Sigmoid | 32 | TanH |
| 33 | ReLU6 | 34 | Upsample
| | | |
|
| 33 | ReLU6 | 34 | Upsample
| 35 | MemoryData | |
|
## ONNX
...
...
@@ -63,7 +63,7 @@
| 49 | MaxPool | 50 | Conv | 51 | Gemm | 52 | NonZero |
| 53 | Abs | 54 | Floor | 56 | ArgMax | 57 | Sign |
| 58 | Reciprocal | 59 | Size | 60 | OneHot | 61 | ReduceProd |
| 62 | LogSoftmax | 63 | LSTM |
|
| | |
| 62 | LogSoftmax | 63 | LSTM |
64 | LRN
| | |
...
...
@@ -99,7 +99,7 @@ Aten:
| 101 | aten::upsample
\_
bilinear2d | 102 | aten::values |103|aten::view|104|aten::warn|
| 105 | aten::where | 106 | aten::zeros |107|aten::zeros
\_
like|108|aten::bmm|
| 109 | aten::sub
\_
| 110 | aten:erf |111|aten::lstm|112|aten::gather|
| 113 | aten::upsample
\_
nearest2d |
|
|||||
| 113 | aten::upsample
\_
nearest2d |
114 |aten::split
\_
with
\_
sizes
|||||
Prim:
| 序号 | OP | 序号 | OP | 序号 | OP | 序号 | OP |
...
...
docs/introduction/x2paddle_model_zoo.md
浏览文件 @
56ee75d9
# X2Paddle模型测试库
> 目前X2Paddle支持
70+的TensorFlow OP,40+的Caffe Layer
,覆盖了大部分CV分类模型常用的操作。我们在如下模型列表中测试了X2Paddle的转换。
> 目前X2Paddle支持
80+的TensorFlow OP,30+的Caffe Layer,60+的ONNX OP,110+的PyTorch Aten,10+的PyTorch Prim
,覆盖了大部分CV分类模型常用的操作。我们在如下模型列表中测试了X2Paddle的转换。
**注:**
受限于不同框架的差异,部分模型可能会存在目前无法转换的情况,如TensorFlow中包含控制流的模型,NLP模型等。对于CV常见的模型,如若您发现无法转换或转换失败,存在较大diff等问题,欢迎通过
[
ISSUE反馈
](
https://github.com/PaddlePaddle/X2Paddle/issues/new
)
的方式告知我们(模型名,代码实现或模型获取方式),我们会及时跟进:)
...
...
x2paddle/convert.py
浏览文件 @
56ee75d9
...
...
@@ -229,6 +229,11 @@ def main():
assert
args
.
paddle_type
in
[
"dygraph"
,
"static"
],
"--paddle_type must be 'dygraph' or 'static'"
try
:
import
platform
v0
,
v1
,
v2
=
platform
.
python_version
().
split
(
'.'
)
if
not
(
int
(
v0
)
>=
3
and
int
(
v1
)
>=
5
):
print
(
"[ERROR] python>=3.5 is required"
)
return
import
paddle
v0
,
v1
,
v2
=
paddle
.
__version__
.
split
(
'.'
)
print
(
"paddle.__version__ = {}"
.
format
(
paddle
.
__version__
))
...
...
x2paddle/decoder/tf_decoder.py
浏览文件 @
56ee75d9
...
...
@@ -184,7 +184,7 @@ class TFGraph(Graph):
node
=
super
(
TFGraph
,
self
).
get_node
(
new_node_name
,
copy
)
if
node
is
None
:
return
None
if
node
.
layer_type
==
"Switch"
:
if
node
.
layer_type
not
in
[
"Unpack"
,
"Split"
]
:
if
hasattr
(
node
,
'index'
):
del
node
.
index
if
len
(
items
)
==
1
and
node
.
layer_type
in
self
.
multi_out_ops
:
...
...
x2paddle/op_mapper/dygraph/onnx2paddle/opset9/opset.py
浏览文件 @
56ee75d9
...
...
@@ -2013,3 +2013,25 @@ class OpSet9():
"k"
:
val_k
.
name
},
outputs
=
[
"{}_p{}"
.
format
(
node
.
layer_name
,
0
),
"{}_p{}"
.
format
(
node
.
layer_name
,
1
)],
**
layer_attrs
)
@
print_mapping_info
def
LRN
(
self
,
node
):
op_name
=
name_generator
(
"lrn"
,
self
.
nn_name2id
)
output_name
=
node
.
name
layer_outputs
=
[
op_name
,
output_name
]
val_x
=
self
.
graph
.
get_input_node
(
node
,
idx
=
0
,
copy
=
True
)
alpha
=
node
.
get_attr
(
'alpha'
,
0.0001
)
beta
=
node
.
get_attr
(
'beta'
,
0.75
)
bias
=
node
.
get_attr
(
'bias'
,
1.0
)
size
=
node
.
get_attr
(
'size'
)
layer_attrs
=
{
'size'
:
size
,
'alpha'
:
alpha
,
'beta'
:
beta
,
'k'
:
bias
}
self
.
paddle_graph
.
add_layer
(
"paddle.nn.LocalResponseNorm"
,
inputs
=
{
"x"
:
val_x
.
name
},
outputs
=
layer_outputs
,
**
layer_attrs
)
x2paddle/op_mapper/static/onnx2paddle/opset9/opset.py
浏览文件 @
56ee75d9
...
...
@@ -1780,4 +1780,24 @@ class OpSet9():
inputs
=
{
"x"
:
val_x
.
name
,
"k"
:
val_k
.
name
},
outputs
=
[
"{}_p{}"
.
format
(
node
.
layer_name
,
0
),
"{}_p{}"
.
format
(
node
.
layer_name
,
1
)],
**
layer_attrs
)
\ No newline at end of file
**
layer_attrs
)
@
print_mapping_info
def
LRN
(
self
,
node
):
val_x
=
self
.
graph
.
get_input_node
(
node
,
idx
=
0
,
copy
=
True
)
val_x
=
self
.
graph
.
get_input_node
(
node
,
idx
=
0
,
copy
=
True
)
alpha
=
node
.
get_attr
(
'alpha'
,
0.0001
)
beta
=
node
.
get_attr
(
'beta'
,
0.75
)
bias
=
node
.
get_attr
(
'bias'
,
1.0
)
size
=
node
.
get_attr
(
'size'
)
layer_attrs
=
{
'size'
:
size
,
'alpha'
:
alpha
,
'beta'
:
beta
,
'k'
:
bias
}
self
.
paddle_graph
.
add_layer
(
'paddle.nn.functional.local_response_norm'
,
inputs
=
{
"x"
:
val_x
.
name
},
outputs
=
[
node
.
name
],
**
layer_attrs
)
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录