Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
PaddlePaddle
X2Paddle
提交
9108d4a4
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看板
提交
9108d4a4
编写于
9月 25, 2020
作者:
S
SunAhong1993
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
remove pytorch
上级
32d2ec39
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
3 addition
and
68 deletion
+3
-68
README.md
README.md
+2
-6
pytorch_to_script.md
pytorch_to_script.md
+0
-57
x2paddle/convert.py
x2paddle/convert.py
+1
-5
未找到文件。
README.md
浏览文件 @
9108d4a4
...
...
@@ -44,10 +44,7 @@ x2paddle --framework=caffe --prototxt=deploy.prototxt --weight=deploy.caffemodel
```
x2paddle --framework=onnx --model=onnx_model.onnx --save_dir=pd_model
```
### PyTorch
```
x2paddle --framework=pytorch --model=resnet50.pt --save_dir=pd_model --input_shapes [-1,3,224,224]
```
### Paddle2ONNX
```
# 注意:paddle_infer_model_dir下需包含__model__和__params__两个文件
...
...
@@ -56,7 +53,7 @@ x2paddle --framework=paddle2onnx --model=paddle_infer_model_dir --save_dir=onnx_
### 参数选项
| 参数 | |
|----------|--------------|
|--framework | 源模型类型 (tensorflow、caffe、onnx、p
ytorch、p
addle2onnx) |
|--framework | 源模型类型 (tensorflow、caffe、onnx、paddle2onnx) |
|--prototxt | 当framework为caffe时,该参数指定caffe模型的proto文件路径 |
|--weight | 当framework为caffe时,该参数指定caffe模型的参数文件路径 |
|--save_dir | 指定转换后的模型保存目录路径 |
...
...
@@ -66,7 +63,6 @@ x2paddle --framework=paddle2onnx --model=paddle_infer_model_dir --save_dir=onnx_
|--define_input_shape |
**[可选]**
For TensorFlow, 当指定该参数时,强制用户输入每个Placeholder的shape,见
[
文档Q2
](
FAQ.md
)
|
|--params_merge |
**[可选]**
当指定该参数时,转换完成后,inference_model中的所有模型参数将合并保存为一个文件__params__ |
|--onnx_opset |
**[可选]**
当framework为paddle2onnx时,该参数可设置转换为ONNX的OpSet版本,目前支持9、10、11,默认为10 |
|--input_shapes |
**[可选]**
当framework为pytorch时,该参数若设置,则根据输入的shape导出inference model(用于预测的静态模型)|
...
...
pytorch_to_script.md
已删除
100644 → 0
浏览文件 @
32d2ec39
## PyTorch模型导出为ONNX模型
目前pytorch2paddle主要支持pytorch ScriptModule。 用户可通过如下示例代码,将torchvison或者自己开发写的模型转换成ScriptModule model:
```
#
coding
:
utf
-
8
import
torch
import
torch
.
nn
as
nn
from
torchvision
.
models
.
utils
import
load_state_dict_from_url
#
定义模型
class
AlexNet
(
nn
.
Module
):
def
__init__
(
self
,
num_classes
=
1000
):
super
(
AlexNet
,
self
).
__init__
()
self
.
features
=
nn
.
Sequential
(
nn
.
Conv2d
(
3
,
64
,
kernel_size
=
11
,
stride
=
4
,
padding
=
2
),
nn
.
ReLU
(
inplace
=
True
),
nn
.
MaxPool2d
(
kernel_size
=
3
,
stride
=
2
),
nn
.
Conv2d
(
64
,
192
,
kernel_size
=
5
,
padding
=
2
),
nn
.
ReLU
(
inplace
=
True
),
nn
.
MaxPool2d
(
kernel_size
=
3
,
stride
=
2
),
nn
.
Conv2d
(
192
,
384
,
kernel_size
=
3
,
padding
=
1
),
nn
.
ReLU
(
inplace
=
True
),
nn
.
Conv2d
(
384
,
256
,
kernel_size
=
3
,
padding
=
1
),
nn
.
ReLU
(
inplace
=
True
),
nn
.
Conv2d
(
256
,
256
,
kernel_size
=
3
,
padding
=
1
),
nn
.
ReLU
(
inplace
=
True
),
nn
.
MaxPool2d
(
kernel_size
=
3
,
stride
=
2
),
)
self
.
avgpool
=
nn
.
AdaptiveAvgPool2d
((
6
,
6
))
self
.
classifier
=
nn
.
Sequential
(
nn
.
Dropout
(
0.0
),
nn
.
Linear
(
256
*
6
*
6
,
4096
),
nn
.
ReLU
(
inplace
=
True
),
nn
.
Dropout
(
0.0
),
nn
.
Linear
(
4096
,
4096
),
nn
.
ReLU
(
inplace
=
True
),
nn
.
Linear
(
4096
,
num_classes
),
)
def
forward
(
self
,
x
):
x
=
self
.
features
(
x
)
for
i
in
range
(
1
):
x
=
self
.
avgpool
(
x
)
x
=
torch
.
flatten
(
x
,
1
)
x
=
self
.
classifier
(
x
)
return
x
#
初始化模型
model
=
AlexNet
()
#
加载参数
state_dict
=
load_state_dict_from_url
(
'https://download.pytorch.org/models/alexnet-owt-4df8aa71.pth'
,
progress
=
True
)
model
.
load_state_dict
(
state_dict
)
#
设置模式
model
.
eval
()
#
生成
ScriptModule
并保存
script
=
torch
.
jit
.
script
(
model
)
torch
.
jit
.
save
(
script
,
"alexnet.pt"
)
```
x2paddle/convert.py
浏览文件 @
9108d4a4
...
...
@@ -303,11 +303,7 @@ def main():
if
args
.
params_merge
:
params_merge
=
True
onnx2paddle
(
args
.
model
,
args
.
save_dir
,
params_merge
)
elif
args
.
framework
==
"pytorch"
:
assert
args
.
model
is
not
None
,
"--model should be defined while translating pytorch model"
pytorch2paddle
(
args
.
model
,
args
.
save_dir
,
args
.
input_shapes
)
elif
args
.
framework
==
"paddle2onnx"
:
assert
args
.
model
is
not
None
,
"--model should be defined while translating paddle model to onnx"
paddle2onnx
(
args
.
model
,
args
.
save_dir
,
opset_version
=
args
.
onnx_opset
)
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录