PaddlePaddle モデルから変換

このページでは、OpenVINO モデル変換 API を使用してモデルを PaddlePaddle 形式から OpenVINO IR 形式に変換する一般的な手順を説明します。PaddlePaddle モデルの形式によって手順が異なります。

ファイルにシリアル化された PaddlePaddle モデルは、最初に OpenVINO IR を準備しなくても、OpenVINO ランタイム API による openvino.Core.read_model メソッドまたは openvino.Core.compile_model メソッドによってロードできます。詳細については、推論の例を参照してください。モデルの読み込みレイテンシーが推論アプリケーションにとって重要である場合は、引き続き openvino.convert_model を使用することを推奨します。

PaddlePaddle モデルファイルから変換

PaddlePaddle 推論モデルには、.pdmodel (モデル構造) と .pdiparams (モデルの重み) が含まれています。PaddlePaddle 推論モデルをエクスポートする方法の詳細については、PaddlePaddle 推論モデルのエクスポートの中国語ガイドを参照してください。

PaddlePaddle モデルを変換するには、ovc または openvino.convert_model を使用して、入力モデル .pdmodel ファイルへのパスを指定します。

import openvino as ov
ov.convert_model('your_model_file.pdmodel')
ovc your_model_file.pdmodel

例えば、次のコマンドは YOLOv3 PaddlePaddle モデルを OpenVINO IR モデルに変換します。

import openvino as ov
ov.convert_model('yolov3.pdmodel')
ovc yolov3.pdmodel

PaddlePaddle Python モデルから変換

モデル変換 API は、ユーザーコード内でファイルに保存することなく、PaddlePaddle モデルを Python で直接渡すことをサポートします。

次の PaddlePaddle モデル・オブジェクト・タイプがサポートされます。

  • paddle.hapi.model.Model

  • paddle.fluid.dygraph.layers.Layer

  • paddle.fluid.executor.Executor

一部の PaddlePaddle モデルでは、以下に示すように、変換に example_input または output を必要とする場合があります。

  • paddle.hapi.model.Model 形式モデルの変換例:

    import paddle
    import openvino as ov
    
    # create a paddle.hapi.model.Model format model
    resnet50 = paddle.vision.models.resnet50()
    x = paddle.static.InputSpec([1,3,224,224], 'float32', 'x')
    y = paddle.static.InputSpec([1,1000], 'float32', 'y')
    
    model = paddle.Model(resnet50, x, y)
    
    # convert to OpenVINO IR format
    ov_model = ov.convert_model(model)
    
    ov.save_model(ov_model, "resnet50.xml")
    
  • paddle.fluid.dygraph.layers.Layer 形式モデルの変換例:

    example_input は必須ですが、output はオプションです。example_input は次の形式を受け入れます。

    list テンソル (paddle.Tensor) または InputSpec (paddle.static.input.InputSpec)

    import paddle
    import openvino as ov
    
    # create a paddle.fluid.dygraph.layers.Layer format model
    model = paddle.vision.models.resnet50()
    x = paddle.rand([1,3,224,224])
    
    # convert to OpenVINO IR format
    ov_model = ov.convert_model(model, example_input=[x])
    
  • paddle.fluid.executor.Executor 形式モデルの変換例:

    example_inputoutput は必須であり、次の形式を受け入れます。

    list または変数 (paddle.static.data) を含む tuple

    import paddle
    import openvino as ov
    
    paddle.enable_static()
    
    # create a paddle.fluid.executor.Executor format model
    x = paddle.static.data(name="x", shape=[1,3,224])
    y = paddle.static.data(name="y", shape=[1,3,224])
    relu = paddle.nn.ReLU()
    sigmoid = paddle.nn.Sigmoid()
    y = sigmoid(relu(x))
    
    exe = paddle.static.Executor(paddle.CPUPlace())
    exe.run(paddle.static.default_startup_program())
    
    # convert to OpenVINO IR format
    ov_model = ov.convert_model(exe, example_input=[x], output=[y])
    

サポートされる PaddlePaddle レイヤー

サポートされる標準レイヤーのリストについては、サポートされる操作を参照してください。

関連情報

対話型の Python チュートリアルでその他のモデルの変換例を確認してください。