Skip to content

leiqing1/Paddle2ONNX

 
 

Repository files navigation

Paddle2ONNX

简体中文 | English

Introduction

Paddle2ONNX enables users to convert models from PaddlePaddle to ONNX.

  • Supported model format. Paddle2ONNX supports both dynamic and static computational graph of PaddlePaddle. For static computational graph, Paddle2ONNX converts PaddlePaddle models saved by API save_inference_model, for example IPthon example. For dynamic computational graph, it is now under experiment and more details will be released after the release of PaddlePaddle 2.0.
  • Supported operators. Paddle2ONNX can stably export models to ONNX Opset 9~11, and partialy support lower version opset. More details please refer to Operator list.
  • Supported models. You can find officially verified models by Paddle2ONNX in model zoo.

AIStudio Tutorials

What we can do with Paddle2ONNX

Environment Dependencies

Configuration

 python >= 2.7  
 static computational graph: paddlepaddle >= 1.8.0
 dynamic computational graph: paddlepaddle >= 2.0.0
 onnx == 1.7.0 | Optional

Installation

Via Pip

 pip install paddle2onnx

From Source

 git clone https://github.com/PaddlePaddle/Paddle2ONNX.git
 cd Paddle2ONNX
 python setup.py install

Usage

Static Computational Graph

Via Command Line Tool

Uncombined PaddlePaddle model(parameters saved in different files)

paddle2onnx --model_dir paddle_model  --save_file onnx_file --opset_version 10 --enable_onnx_checker True

Combined PaddlePaddle model(parameters saved in one binary file)

paddle2onnx --model_dir paddle_model  --model_filename model_filename --params_filename params_filename --save_file onnx_file --opset_version 10 --enable_onnx_checker True

Parameters

Parameters Description
--model_dir The directory path of the paddlepaddle model saved by paddle.fluid.io.save_inference_model
--model_filename [Optional] The model file name under the directory designated by--model_dir. Only needed when all the model parameters saved in one binary file. Default value None
--params_filename [Optonal] the parameter file name under the directory designated by--model_dir. Only needed when all the model parameters saved in one binary file. Default value None
--save_file the directory path for the exported ONNX model
--opset_version [Optional] To configure the ONNX Opset version. Opset 9-11 are stably supported. Default value is 9.
--enable_onnx_checker [Optional] To check the validity of the exported ONNX model. It is suggested to turn on the switch. If set to True, onnx>=1.7.0 is required. Default value is False
--enable_paddle_fallback [Optional] Whether custom op is exported using paddle_fallback mode. Default value is False
--version [Optional] check the version of paddle2onnx
  • Two types of PaddlePaddle models
    • Combined model, parameters saved in one binary file. --model_filename and --params_filename represents the file name and parameter name under the directory designated by --model_dir. --model_filename and --params_filename are valid only with parameter --model_dir.
    • Uncombined model, parameters saved in different files. Only --model_dir is needed,which contains '__model__' file and the seperated parameter files.
  • Use onnxruntime to verify the Converted model

IPython tutorials

Dynamic Computational Graph

import paddle
from paddle import nn
from paddle.static import InputSpec
import paddle2onnx as p2o

class LinearNet(nn.Layer):
    def __init__(self):
        super(LinearNet, self).__init__()
        self._linear = nn.Linear(784, 10)

    def forward(self, x):
        return self._linear(x)

layer = LinearNet()

# configure model inputs
x_spec = InputSpec([None, 784], 'float32', 'x')

# convert model to inference mode
layer.eval()

save_path = 'onnx.save/linear_net'
p2o.dygraph2onnx(layer, save_path + '.onnx', input_spec=[x_spec])

# when paddlepaddle>2.0.0, you can try:
# paddle.onnx.export(layer, save_path, input_spec=[x_spec])

IPython tutorials

Documents

License

Apache-2.0 license.

About

ONNX Model Exporter for PaddlePaddle

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Python 99.8%
  • Shell 0.2%