Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

precommit all files #1047

Merged
merged 1 commit into from
Jul 30, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
2 changes: 1 addition & 1 deletion .github/pull_request_template.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Create A Good Pull Request

> 下面的文字请保留在PR说明的最后面,并在提完PR后,根据实际情况勾选确认以下情况
> 下面的文字请保留在PR说明的最后面,并在提完PR后,根据实际情况勾选确认以下情况

Please check the follow step before merging this pull request

Expand Down
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
[![PyPI Status](https://pepy.tech/badge/x2paddle/month)](https://pepy.tech/project/x2paddle)
[![License](https://img.shields.io/badge/license-Apache%202-blue.svg)](LICENSE)
[![Version](https://img.shields.io/github/release/PaddlePaddle/X2Paddle.svg)](https://github.com/PaddlePaddle/X2Paddle/releases)
![python version](https://img.shields.io/badge/python-3.5+-orange.svg)
![python version](https://img.shields.io/badge/python-3.5+-orange.svg)

## 简介

Expand Down Expand Up @@ -47,7 +47,7 @@ X2Paddle是飞桨生态下的模型转换工具,致力于帮助其它深度学
## 安装

### 环境依赖
- python >= 3.5
- python >= 3.5
- paddlepaddle >= 2.2.2
- tensorflow == 1.14 (如需转换TensorFlow模型)
- onnx >= 1.6.0 (如需转换ONNX模型)
Expand Down
10 changes: 5 additions & 5 deletions docs/inference_model_convertor/FAQ.md
Original file line number Diff line number Diff line change
@@ -1,19 +1,19 @@
## 常见问题

**Q1. TensorFlow模型转换过程中,提示『Unknown shape for input tensor[tensor name: "input"], Please define shape of input here』?**
**Q1. TensorFlow模型转换过程中,提示『Unknown shape for input tensor[tensor name: "input"], Please define shape of input here』?**
A:该提示信息表示无法从TensorFlow的pb模型中获取到输入tensor(tensor名为"input:)的shape信息,所以需要用户手动在提示后输入详细的shape信息,如None,224,224,3 其中None表示Batch。


**Q2. TensorFlow模型转换失败怎么解决?**
**Q2. TensorFlow模型转换失败怎么解决?**
A: 如果并非是由缺少OP导致,那可能是由于TensorFlow模型转换时(NHWC->NCHW格式转换导致),在这种情况下,采用如下方式进行转换,同时固化输入大小的方式,继续尝试转换,见如下命令,转换过程中,根据提示,输入相应tensor的固化shape大小。
```
x2paddle -f tensorflow -m tf.pb -s pd-model --define_input_shape
```

**Q3. ONNX模型转换过程中,提示『Unknown shape for input tensor[tensor name: "input"] -> shape: ['batch', 'sequence'], Please define shape of input here』**
**Q3. ONNX模型转换过程中,提示『Unknown shape for input tensor[tensor name: "input"] -> shape: ['batch', 'sequence'], Please define shape of input here』**
A:该提示信息表示从ONNX的模型中获取到输入tensor(tensor名为"input:)的shape是语义象征性的['batch', 'sequence'],而不是dim为int类型的shape,从而可能会因为部分node的shape无法推理,导致转换失败。所以用户可以尝试手动在提示后输入详细的shape信息,如:-1,3,224,224 其中-1表示Batch。

**Q4. 如果我的tensorflow模型是checkpoint或者SavedModel格式,怎么办?**
**Q4. 如果我的tensorflow模型是checkpoint或者SavedModel格式,怎么办?**
A:我们提供相关文档将export_tf_model.md


Expand All @@ -33,5 +33,5 @@ out =main(ipt)
```
> 若运行代码无误,则说明代码中有op不支持动转静,我们将会再未来支持;若报错,则说明pytorch2paddle转换出错,请提issue,我们将及时回复。

**Q5. 目前支持了哪些op的转换呢?**
**Q5. 目前支持了哪些op的转换呢?**
A: 可详见[X2Paddle支持的op列表](op_list.md)。
8 changes: 4 additions & 4 deletions docs/inference_model_convertor/add_caffe_custom_layer.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,19 +18,19 @@

添加代码实现自定义层的步骤如下:

***步骤一 下载代码***
***步骤一 下载代码***
此处涉及修改源码,应先卸载x2paddle,并且下载源码,主要有以下两步完成:
```
pip uninstall x2paddle
pip install git+https://github.com/PaddlePaddle/X2Paddle.git@develop
```

***步骤二 编译caffe.proto***
***步骤二 编译caffe.proto***
该步骤依赖protobuf编译器,其安装过程有以下两种方式:
> 选择一:pip install protobuf (protobuf >= 3.6.0)
> 选择二:使用[官方源码](https://github.com/protocolbuffers/protobuf)进行编译

使用脚本./tools/compile.sh将caffe.proto(包含所需的自定义Layer信息)编译成我们所需的目标语言(Python)
使用脚本./tools/compile.sh将caffe.proto(包含所需的自定义Layer信息)编译成我们所需的目标语言(Python)
使用方式:
```
bash ./tools/compile.sh /home/root/caffe/src/caffe/proto
Expand All @@ -49,7 +49,7 @@ def Permute(self, node):
node.inputs) == 1, "The count of Permute node\'s input is not 1."
input = self.graph.get_input_node(node, idx=0, copy=True)
params = node.layer.permute_param
order = list(params.order)
order = list(params.order)
self.paddle_graph.add_layer(
"paddle.transpose",
inputs={"x": input.name},
Expand Down
2 changes: 1 addition & 1 deletion docs/inference_model_convertor/demo/pytorch2paddle.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -247,4 +247,4 @@
},
"nbformat": 4,
"nbformat_minor": 4
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -210,4 +210,4 @@
},
"nbformat": 4,
"nbformat_minor": 4
}
}
16 changes: 8 additions & 8 deletions docs/inference_model_convertor/export_tf_model.md
Original file line number Diff line number Diff line change
Expand Up @@ -45,10 +45,10 @@ freeze_model(sess, ["vgg_16/fc8/squeezed"], "vgg16.pb")
```
- 纯checkpoint模型
文件结构:
> |--- checkpoint
> |--- model.ckpt-240000.data-00000-of-00001
> |--- model.ckpt-240000.index
> |--- model.ckpt-240000.meta
> |--- checkpoint
> |--- model.ckpt-240000.data-00000-of-00001
> |--- model.ckpt-240000.index
> |--- model.ckpt-240000.meta

加载和导出模型:
```python
Expand Down Expand Up @@ -81,10 +81,10 @@ freeze_model(sess, ["vgg_16/fc8/squeezed"], save_pb_file)

- SavedModel模型
文件结构:
> |-- variables
> |------ variables.data-00000-of-00001
> |------ variables.data-00000-of-00001
> |-- saved_model.pb
> |-- variables
> |------ variables.data-00000-of-00001
> |------ variables.data-00000-of-00001
> |-- saved_model.pb

加载和导出模型:
```python
Expand Down
4 changes: 2 additions & 2 deletions docs/inference_model_convertor/pytorch2paddle.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ PyTorch2Paddle支持trace和script两种方式的转换,均是PyTorch动态图

## 环境依赖

python == 2.7 | python >= 3.5
paddlepaddle >= 2.0.0
python == 2.7 | python >= 3.5
paddlepaddle >= 2.0.0
pytorch:torch >=1.5.0 (script方式暂不支持1.7.0)

**使用trace方式需安装以下依赖**
Expand Down
2 changes: 1 addition & 1 deletion docs/introduction/architecture.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
## 架构设计
X2Paddle的架构设计着重考虑了对多深度学习框架的的支持以及代码的易读性、易扩展性。预测模型转换在多个层面的对转换后OP进行优化处理,转换后的模型可直接用于预测部署;训练代码转换则运用了AST的方式进行转换,转换后的代码与源代码格式一致。2种方式的转换满足不同人的需求。
X2Paddle的架构设计着重考虑了对多深度学习框架的的支持以及代码的易读性、易扩展性。预测模型转换在多个层面的对转换后OP进行优化处理,转换后的模型可直接用于预测部署;训练代码转换则运用了AST的方式进行转换,转换后的代码与源代码格式一致。2种方式的转换满足不同人的需求。
![](../images/frame.png)
2 changes: 1 addition & 1 deletion docs/pytorch_project_convertor/API_docs/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ X2Paddle致力于帮助其它主流深度学习框架开发者快速迁移至飞
- 支持PyTorch项目Python代码(包括训练、预测)一键转为基于飞桨框架的项目代码,帮助开发者快速迁移项目,并可享受AIStudio平台对于飞桨框架提供的海量免费计算资源
- API映射文档
- 详细的API文档对比分析,帮助开发者快速从PyTorch框架的使用迁移至飞桨框架的使用,大大降低学习成本

详细的项目信息与使用方法参考X2Paddle在Github上的开源项目: https://github.com/PaddlePaddle/X2Paddle

## API映射表目录
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,5 +29,5 @@ paddle.nn.CrossEntropyLoss(weight=None,

### 功能差异
#### 计算方式
***PyTorch***:只支持在使用交叉熵之前计算softmax且为硬标签的计算方式。
***PyTorch***:只支持在使用交叉熵之前计算softmax且为硬标签的计算方式。
***PaddlePaddle***:支持使用交叉熵之前是否计算softmax的设置,且支持软、硬标签两种计算方式,其计算方式可参见[文档](https://www.paddlepaddle.org.cn/documentation/docs/en/api/paddle/nn/layer/loss/CrossEntropyLoss_en.html)。
Original file line number Diff line number Diff line change
Expand Up @@ -21,18 +21,18 @@ paddle.nn.KLDivLoss(reduction='mean')

### 功能差异
#### 计算方式
***PyTorch***:
> 当`log_target`为`True`时:
> $ l(input,label)= e^{target}∗(label−input) $
>
> 当`log_target`为`False`时:
> 1. $ l(input,label)=target*(log(target)-input) $
> 2. $ l(input,label) $中值小于0的取0
***PyTorch***:
> 当`log_target`为`True`时:
> $ l(input,label)= e^{target}∗(label−input) $
>
> 当`log_target`为`False`时:
> 1. $ l(input,label)=target*(log(target)-input) $
> 2. $ l(input,label) $中值小于0的取0

***PaddlePaddle***:
> $ l(input,label)=label∗(log(label)−input) $

在PaddlePaddle中可使用如下代码组合实现该API。
在PaddlePaddle中可使用如下代码组合实现该API。
```python
import paddle

Expand Down Expand Up @@ -65,7 +65,7 @@ class KLDivLoss(paddle.nn.Layer):
else:
return out

# 构造输入
# 构造输入
import numpy as np
shape = (5, 20)
x = np.random.uniform(-10, 10, shape).astype('float32')
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,5 +23,5 @@ paddle.nn.AvgPool1D(kernel_size,
### 功能差异

#### 池化方式
***PyTorch***: 使用`count_include_pad`表示是否使用额外padding的值计算平均池化结果,默认为True。
***PyTorch***: 使用`count_include_pad`表示是否使用额外padding的值计算平均池化结果,默认为True。
***PaddlePaddle***:使用`exclusive`表示是否不使用额外padding的值计算平均池化结果,默认为True。
Original file line number Diff line number Diff line change
Expand Up @@ -26,5 +26,5 @@ paddle.nn.AvgPool2D(kernel_size,
### 功能差异

#### 池化方式
***PyTorch***: 使用`count_include_pad`表示是否使用额外padding的值计算平均池化结果,默认为True。
***PyTorch***: 使用`count_include_pad`表示是否使用额外padding的值计算平均池化结果,默认为True。
***PaddlePaddle***:使用`exclusive`表示是否不使用额外padding的值计算平均池化结果,默认为True。
Original file line number Diff line number Diff line change
Expand Up @@ -26,5 +26,5 @@ paddle.nn.AvgPool3D(kernel_size,
### 功能差异

#### 池化方式
***PyTorch***: 使用`count_include_pad`表示是否使用额外padding的值计算平均池化结果,默认为True。
***PyTorch***: 使用`count_include_pad`表示是否使用额外padding的值计算平均池化结果,默认为True。
***PaddlePaddle***:使用`exclusive`表示是否不使用额外padding的值计算平均池化结果,默认为True。
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ paddle.nn.BatchNorm1D(num_features,
### 功能差异

#### 输入格式
***PyTorch***:只支持`NCL`的输入。
***PyTorch***:只支持`NCL`的输入。
***PaddlePaddle***:支持`NCL`和`NLC`两种格式的输入(通过`data_format`设置)。

#### 反射变换设置
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ paddle.nn.BatchNorm2D(num_features,
### 功能差异

#### 输入格式
***PyTorch***:只支持`NCHW`的输入。
***PyTorch***:只支持`NCHW`的输入。
***PaddlePaddle***:支持`NCHW`和`NHWC`两种格式的输入(通过`data_format`设置)。

#### 反射变换设置
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ paddle.nn.BatchNorm3D(num_features,
### 功能差异

#### 输入格式
***PyTorch***:只支持`NCDHW`的输入。
***PyTorch***:只支持`NCDHW`的输入。
***PaddlePaddle***:支持`NCDHW`和`NDHWC`两种格式的输入(通过`data_format`设置)。

#### 反射变换设置
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,15 +12,15 @@ paddle.nn.Pad1D(padding, mode='constant', value=0.0, data_format='NCL', name=Non
### 功能差异

#### 使用方式
***PyTorch***:只支持`constant`方式的Pad方式。
***PyTorch***:只支持`constant`方式的Pad方式。
***PaddlePaddle***:支持`constant`、`reflect`、`replicate`、`circular`四种格式的输入(通过`mode`设置)。

#### 输入格式
***PyTorch***:只支持`NCL`的输入。
***PyTorch***:只支持`NCL`的输入。
***PaddlePaddle***:支持`NCL`和`NLC`两种格式的输入(通过`data_format`设置)。

#### padding的设置
***PyTorch***:padding参数的类型只能为int或tuple。
***PyTorch***:padding参数的类型只能为int或tuple。
***PaddlePaddle***:padding参数的类型只能为Tensor或list。


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,15 +12,15 @@ paddle.nn.Pad2D(padding, mode='constant', value=0.0, data_format='NCHW', name=No
### 功能差异

#### 使用方式
***PyTorch***:只支持`constant`方式的Pad方式。
***PyTorch***:只支持`constant`方式的Pad方式。
***PaddlePaddle***:支持`constant`、`reflect`、`replicate`、`circular`四种格式的输入(通过`mode`设置)。

#### 输入格式
***PyTorch***:只支持`NCHW`的输入。
***PyTorch***:只支持`NCHW`的输入。
***PaddlePaddle***:支持`NCHW`和`NHWC`两种格式的输入(通过`data_format`设置)。

#### padding的设置
***PyTorch***:padding参数的类型只能为int或tuple。
***PyTorch***:padding参数的类型只能为int或tuple。
***PaddlePaddle***:padding参数的类型只能为Tensor或list。


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,15 +12,15 @@ paddle.nn.Pad3D(padding, mode='constant', value=0.0, data_format='NCDHW', name=N
### 功能差异

#### 使用方式
***PyTorch***:只支持`constant`方式的Pad方式。
***PyTorch***:只支持`constant`方式的Pad方式。
***PaddlePaddle***:支持`constant`、`reflect`、`replicate`、`circular`四种格式的输入(通过`mode`设置)。

#### 输入格式
***PyTorch***:只支持`NCDHW`的输入。
***PyTorch***:只支持`NCDHW`的输入。
***PaddlePaddle***:支持`NCDHW`和`NCDHW`两种格式的输入(通过`data_format`设置)。

#### padding的设置
***PyTorch***:padding参数的类型只能为int或tuple。
***PyTorch***:padding参数的类型只能为int或tuple。
***PaddlePaddle***:padding参数的类型只能为Tensor或list。


Expand Down
8 changes: 4 additions & 4 deletions docs/pytorch_project_convertor/API_docs/nn/torch.nn.Conv1d.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,13 +32,13 @@ paddle.nn.Conv1D(in_channels,
### 功能差异

#### 输入格式
***PyTorch***:只支持`NCL`的输入。
***PyTorch***:只支持`NCL`的输入。
***PaddlePaddle***:支持`NCL`和`NLC`两种格式的输入(通过`data_format`设置)。

#### 更新参数设置
***PyTorch***:`bias`默认为True,表示使用可更新的偏置参数。
***PaddlePaddle***:`weight_attr`/`bias_attr`默认使用默认的权重/偏置参数属性,否则为指定的权重/偏置参数属性,具体用法参见[ParamAttr](https://www.paddlepaddle.org.cn/documentation/docs/zh/api/paddle/ParamAttr_cn.html#paramattr);当`bias_attr`设置为bool类型与PyTorch的作用一致。
***PyTorch***:`bias`默认为True,表示使用可更新的偏置参数。
***PaddlePaddle***:`weight_attr`/`bias_attr`默认使用默认的权重/偏置参数属性,否则为指定的权重/偏置参数属性,具体用法参见[ParamAttr](https://www.paddlepaddle.org.cn/documentation/docs/zh/api/paddle/ParamAttr_cn.html#paramattr);当`bias_attr`设置为bool类型与PyTorch的作用一致。

#### padding的设置
***PyTorch***:`padding`只能支持list或tuple类型。
***PyTorch***:`padding`只能支持list或tuple类型。
***PaddlePaddle***:`padding`支持list或tuple类型或str类型。
22 changes: 11 additions & 11 deletions docs/pytorch_project_convertor/API_docs/nn/torch.nn.Conv2d.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,20 +32,20 @@ paddle.nn.Conv2D(in_channels,
### 功能差异

#### 输入格式
***PyTorch***:只支持`NCHW`的输入。
***PyTorch***:只支持`NCHW`的输入。
***PaddlePaddle***:支持`NCHW`和`NHWC`两种格式的输入(通过`data_format`设置)。

#### 更新参数设置
***PyTorch***:`bias`默认为True,表示使用可更新的偏置参数。
***PaddlePaddle***:`weight_attr`/`bias_attr`默认使用默认的权重/偏置参数属性,否则为指定的权重/偏置参数属性,具体用法参见[ParamAttr](https://www.paddlepaddle.org.cn/documentation/docs/zh/api/paddle/ParamAttr_cn.html#paramattr);当`bias_attr`设置为bool类型与PyTorch的作用一致。
***PyTorch***:`bias`默认为True,表示使用可更新的偏置参数。
***PaddlePaddle***:`weight_attr`/`bias_attr`默认使用默认的权重/偏置参数属性,否则为指定的权重/偏置参数属性,具体用法参见[ParamAttr](https://www.paddlepaddle.org.cn/documentation/docs/zh/api/paddle/ParamAttr_cn.html#paramattr);当`bias_attr`设置为bool类型与PyTorch的作用一致。

#### padding的设置
***PyTorch***:`padding`只能支持list或tuple类型。它可以有3种格式:
(1)包含4个二元组:\[\[0,0\], \[0,0\], \[padding_height_top, padding_height_bottom\], \[padding_width_left, padding_width_right\]\],其中每个元组都可使用整数值替换,代表元组中的2个值相等;
(2)包含2个二元组:\[\[padding_height_top, padding_height_bottom\], \[padding_width_left, padding_width_right\]\],其中每个元组都可使用整数值替换,代表元组中的2个值相等;
(3)包含一个整数值,padding_height = padding_width = padding。
***PaddlePaddle***:`padding`支持list或tuple类型或str类型。如果它是一个list或tuple,它可以有4种格式:
(1)包含4个二元组:当 data_format 为"NCHW"时为 \[\[0,0\], \[0,0\], \[padding_height_top, padding_height_bottom\], \[padding_width_left, padding_width_right\]\],当 data_format 为"NHWC"时为\[\[0,0\], \[padding_height_top, padding_height_bottom\], \[padding_width_left, padding_width_right\], \[0,0\]\];
(2)包含4个整数值:\[padding_height_top, padding_height_bottom, padding_width_left, padding_width_right\];
(3)包含2个整数值:\[padding_height, padding_width\],此时padding_height_top = padding_height_bottom = padding_height, padding_width_left = padding_width_right = padding_width;
***PyTorch***:`padding`只能支持list或tuple类型。它可以有3种格式:
(1)包含4个二元组:\[\[0,0\], \[0,0\], \[padding_height_top, padding_height_bottom\], \[padding_width_left, padding_width_right\]\],其中每个元组都可使用整数值替换,代表元组中的2个值相等;
(2)包含2个二元组:\[\[padding_height_top, padding_height_bottom\], \[padding_width_left, padding_width_right\]\],其中每个元组都可使用整数值替换,代表元组中的2个值相等;
(3)包含一个整数值,padding_height = padding_width = padding。
***PaddlePaddle***:`padding`支持list或tuple类型或str类型。如果它是一个list或tuple,它可以有4种格式:
(1)包含4个二元组:当 data_format 为"NCHW"时为 \[\[0,0\], \[0,0\], \[padding_height_top, padding_height_bottom\], \[padding_width_left, padding_width_right\]\],当 data_format 为"NHWC"时为\[\[0,0\], \[padding_height_top, padding_height_bottom\], \[padding_width_left, padding_width_right\], \[0,0\]\];
(2)包含4个整数值:\[padding_height_top, padding_height_bottom, padding_width_left, padding_width_right\];
(3)包含2个整数值:\[padding_height, padding_width\],此时padding_height_top = padding_height_bottom = padding_height, padding_width_left = padding_width_right = padding_width;
(4)包含一个整数值,padding_height = padding_width = padding。如果它为一个字符串时,可以是"VALID"或者"SAME",表示填充算法。
Loading