diff --git a/README.md b/README.md index e28dc94cbe82830ae3fb28dfb074d29c967bb41b..0d1caeba1da7f478c5475677c800f1b036f924b8 100644 --- a/README.md +++ b/README.md @@ -77,6 +77,20 @@ python setup.py install ### 功能一:推理模型转换 +#### PyTorch模型转换 +``` python +from x2paddle.convert import pytorch2paddle +pytorch2paddle(module=torch_module, + save_dir="./pd_model", + jit_type="trace", + input_examples=[torch_input]) +# module (torch.nn.Module): PyTorch的Module。 +# save_dir (str): 转换后模型的保存路径。 +# jit_type (str): 转换方式。默认为"trace"。 +# input_examples (list[torch.tensor]): torch.nn.Module的输入示例,list的长度必须与输入的长度一致。默认为None。 +``` +```script```模式以及更多细节可参考[PyTorch模型转换文档](./docs/inference_model_convertor/pytorch2paddle.md)。 + #### TensorFlow模型转换 ```shell x2paddle --framework=tensorflow --model=tf_model.pb --save_dir=pd_model @@ -103,10 +117,14 @@ x2paddle --framework=caffe --prototxt=deploy.prototxt --weight=deploy.caffemodel | --model | 当framework为tensorflow/onnx时,该参数指定tensorflow的pb模型文件或onnx模型路径 | | --caffe_proto | **[可选]** 由caffe.proto编译成caffe_pb2.py文件的存放路径,当存在自定义Layer时使用,默认为None | | --define_input_shape | **[可选]** For TensorFlow, 当指定该参数时,强制用户输入每个Placeholder的shape,见[文档Q2](./docs/inference_model_convertor/FAQ.md) | +| --enable_code_optim | **[可选]** For PyTorch, 是否对生成代码进行优化,默认为True | | --to_lite | **[可选]** 是否使用opt工具转成Paddle-Lite支持格式,默认为False | | --lite_valid_places | **[可选]** 指定转换类型,可以同时指定多个backend(以逗号分隔),opt将会自动选择最佳方式,默认为arm | | --lite_model_type | **[可选]** 指定模型转化类型,目前支持两种类型:protobuf和naive_buffer,默认为naive_buffer | +#### X2Paddle API +目前X2Paddle提供API方式转换模型,可参考[X2PaddleAPI](docs/inference_model_convertor/x2paddle_api.md) + #### 一键转换Paddle-Lite支持格式 可参考[使用X2paddle导出Padde-Lite支持格式](docs/inference_model_convertor/convert2lite_api.md) diff --git a/docs/inference_model_convertor/demo/pytorch2paddle.ipynb b/docs/inference_model_convertor/demo/pytorch2paddle.ipynb index c234f6103276ea788e6a4dcc67ef4f0da858c030..e2c5b7722b21839720fc3e112bfcec6c86a4bf67 100644 --- a/docs/inference_model_convertor/demo/pytorch2paddle.ipynb +++ b/docs/inference_model_convertor/demo/pytorch2paddle.ipynb @@ -40,7 +40,7 @@ "metadata": {}, "outputs": [], "source": [ - "! pip install x2paddle==1.0.1 --index https://pypi.Python.org/simple/" + "! pip install x2paddle --index https://pypi.Python.org/simple/" ] }, { @@ -72,7 +72,7 @@ "metadata": {}, "outputs": [], "source": [ - "! pip install paddlepaddle==2.0.1" + "! pip install paddlepaddle==2.2.0" ] }, { @@ -247,4 +247,4 @@ }, "nbformat": 4, "nbformat_minor": 4 -} +} \ No newline at end of file diff --git a/docs/inference_model_convertor/op_list.md b/docs/inference_model_convertor/op_list.md index ea3520ac4625ba0fc155d43278722bedabee2b0f..d8dc5d95f5ea73f75a678640c20e28ca81557d3b 100644 --- a/docs/inference_model_convertor/op_list.md +++ b/docs/inference_model_convertor/op_list.md @@ -48,6 +48,7 @@ | 29 | ReLU | 30 | AbsVal | 31 | Sigmoid | 32 | TanH | | 33 | ReLU6 | 34 | Upsample | 35 | MemoryData | | | + ## ONNX | 序号 | OP | 序号 | OP | 序号 | OP | 序号 | OP | @@ -77,6 +78,7 @@ ## PyTorch + Aten: | 序号 | OP | 序号 | OP | 序号 | OP | 序号 | OP | |------|------|------|------|------|------|------|------| @@ -108,8 +110,9 @@ 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 | 114 | aten::split\_with\_sizes | 115 | aten::sum | 116 | aten::instance_norm | -| 117 | aten::bitwise_not | 118 | aten::bitwise_xor | 119 | aten::bitwise_and | 120 | aten::silu | +| 113 | aten::upsample\_nearest2d | 114 | aten::split\_with\_sizes | 115 | aten::sum | 116 | aten::instance\_norm | +| 117 | aten::bitwise\_not | 118 | aten::bitwise\_xor | 119 | aten::bitwise\_and | 120 | aten::silu | +| 121 | aten::repeat\_interleave | 122 | aten::maxpool1d | 123 | aten::frobenius\_norm | 124 | aten::format | Prim: | 序号 | OP | 序号 | OP | 序号 | OP | 序号 | OP | diff --git a/docs/inference_model_convertor/x2paddle_api.md b/docs/inference_model_convertor/x2paddle_api.md new file mode 100644 index 0000000000000000000000000000000000000000..c6ee37d7724dfaa3cad22fc1eb81d8a9050c97e4 --- /dev/null +++ b/docs/inference_model_convertor/x2paddle_api.md @@ -0,0 +1,80 @@ +# X2paddle API + +## 目录 + +* [x2paddle.convert.tf2paddle](#1) +* [x2paddle.convert.caffe2paddle](#2) +* [x2paddle.convert.onnx2paddle](#3) +* [x2paddle.convert.pytorch2paddle](#4) + +TensorFlow、Caffe、ONNX以及PyTorch模型转换API如下: + +##

x2paddle.convert.tf2paddle

+ +```python +x2paddle.convert.tf2paddle(model_path, save_dir, define_input_shape=False, convert_to_lite=False, lite_valid_places="arm", lite_model_type="naive_buffer") +``` + +> 转换TensorFlow模型。 + +> **参数** +> +> > - **model_path** (str): TensorFlow pb模型路径 +> > - **save_dir** (str): 转换后模型保存路径 +> > - **define_input_shape** (bool): 是否指定输入大小,默认为False +> > - **convert_to_lite** (bool): 是否使用opt工具转成Paddle-Lite支持格式,默认为False +> > - **lite_valid_places** (str): 指定转换类型,可以同时指定多个backend(以逗号分隔),opt将会自动选择最佳方式,默认为arm +> > - **lite_model_type** (str): 指定模型转化类型,目前支持两种类型:protobuf和naive_buffer,默认为naive_buffer + +##

x2paddle.convert.caffe2paddle

+ +```python +x2paddle.convert.caffe2paddle(proto_file, weight_file, save_dir, caffe_proto, convert_to_lite=False, lite_valid_places="arm", lite_model_type="naive_buffer") +``` + +> 转换Caffe模型。 + +> **参数** +> +> > - **proto_file** (str): caffe模型的prototxt文件 +> > - **weight_file** (str): caffe模型的权重文件 +> > - **save_dir** (str): 转换后模型保存路径 +> > - **caffe_proto** (str): 可选:由caffe.proto编译成caffe_pb2.py文件的存放路径,当存在自定义Layer时使用,默认为None +> > - **convert_to_lite** (bool): 是否使用opt工具转成Paddle-Lite支持格式,默认为False +> > - **lite_valid_places** (str): 指定转换类型,可以同时指定多个backend(以逗号分隔),opt将会自动选择最佳方式,默认为arm +> > - **lite_model_type** (str): 指定模型转化类型,目前支持两种类型:protobuf和naive_buffer,默认为naive_buffer + +##

x2paddle.convert.onnx2paddle

+ +```python +x2paddle.convert.onnx2paddle(model_path, save_dir, convert_to_lite=False, lite_valid_places="arm", lite_model_type="naive_buffer") +``` + +> 转换ONNX模型。 + +> **参数** +> +> > - **model_path** (str): TensorFlow pb模型路径 +> > - **save_dir** (str): 转换后模型保存路径 +> > - **convert_to_lite** (bool): 是否使用opt工具转成Paddle-Lite支持格式,默认为False +> > - **lite_valid_places** (str): 指定转换类型,可以同时指定多个backend(以逗号分隔),opt将会自动选择最佳方式,默认为arm +> > - **lite_model_type** (str): 指定模型转化类型,目前支持两种类型:protobuf和naive_buffer,默认为naive_buffer + +##

x2paddle.convert.pytorch2paddle

+ +```python +x2paddle.convert.pytorch2paddle(module, save_dir, jit_type="trace", input_examples=None, enable_code_optim=True, convert_to_lite=False, lite_valid_places="arm", lite_model_type="naive_buffer") +``` + +> 转换Pytorch模型。 + +> **参数** +> +> > - **module** (torch.nn. Module): PyTorch的Module +> > - **save_dir** (str): 转换后模型保存路径 +> > - **jit_type** (str): 转换方式。目前有两种:trace和script, 默认为trace +> > - **input_examples** (list[torch.tensor]): torch.nn. Module的输入示例,list的长度必须与输入的长度一致。默认为None +> > - **enable_code_optim** (bool): 转换后的代码是否进行优化, 默认为True +> > - **convert_to_lite** (bool): 是否使用opt工具转成Paddle-Lite支持格式,默认为False +> > - **lite_valid_places** (str): 指定转换类型,可以同时指定多个backend(以逗号分隔),opt将会自动选择最佳方式,默认为arm +> > - **lite_model_type** (str): 指定模型转化类型,目前支持两种类型:protobuf和naive_buffer,默认为naive_buffer diff --git a/docs/introduction/x2paddle_model_zoo.md b/docs/introduction/x2paddle_model_zoo.md index 74d297afb11f8e5dc526bfc51a20f627209d9007..9af5a8c522793139730224f1ccda4b262c7896d8 100644 --- a/docs/introduction/x2paddle_model_zoo.md +++ b/docs/introduction/x2paddle_model_zoo.md @@ -106,6 +106,9 @@ | BASNet|[code](https://github.com/xuebinqin/BASNet) |-| | DBFace |[code](https://github.com/dlunion/DBFace) |-| | SOLAR |[code](https://github.com/tonyngjichun/SOLAR) |只支持trace模式| +| YOLOX |[code](https://github.com/Megvii-BaseDetection/YOLOX) |只支持trace模式| +| MockingBird |[code](https://github.com/babysor/MockingBird) |只支持trace模式| + ## PyTorch训练项目 | 模型 | 转换前代码 | 转换后代码 |