[従来] PaddlePaddle モデルから変換

危険

ここで説明されているコードは非推奨になりました。従来のソリューションの適用を避けるため使用しないでください。下位互換性を確保するためにしばらく保持されますが、最新のアプリケーションでは使用してはなりません

このガイドでは、非推奨となった変換方法について説明します。新しい推奨方法に関するガイドは、PaddlePaddle モデルから変換の記事に記載されています。

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

PaddlePaddle モデルはフロントエンド API 経由でサポートされます。IR への変換をスキップし、OpenVINO ランタイム API によってモデルを直接読み取ることもできます。詳細については、推論の例を参照してください。モデルのプルーニングにおける新しいカスタム入力/出力、前処理の追加、または Python 変換拡張機能など、より複雑な場合でも、convert_model の使用が必要になります。

PaddlePaddle モデル推論形式の変換

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

PaddlePaddle モデルを変換するには、mo スクリプトを使用して、入力モデル .pdmodel ファイルへのパスを指定します。

mo --input_model <INPUT_MODEL>.pdmodel

例えば、次のコマンドは、yolo v3 PaddlePaddle ネットワークを OpenVINO IR ネットワークに変換します。

mo --input_model=yolov3.pdmodel --input=image,im_shape,scale_factor --input_shape=[1,3,608,608],[1,2],[1,2] --reverse_input_channels --output=save_infer_model/scale_0.tmp_1,save_infer_model/scale_1.tmp_1

Python API を使用したメモリーからの PaddlePaddle モデルの変換

モデル変換 API は、次の PaddlePaddle モデルをメモリーから直接渡すことをサポートしています。

  • paddle.hapi.model.Model

  • paddle.fluid.dygraph.layers.Layer

  • paddle.fluid.executor.Executor

特定の PaddlePaddle モデルを変換する場合、最初に example_input または example_output パラメーターを設定する必要がある場合があります。以下に、パラメーターを使用して前述のモデル形式を変換する例を示します。

  • paddle.hapi.model.Model

    import paddle
    from openvino.tools.mo import convert_model
    
    # 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 = convert_model(model)
    
    # optional: serialize OpenVINO IR to *.xml & *.bin
    from openvino.runtime import serialize
    serialize(ov_model, "ov_model.xml", "ov_model.bin")
    
  • paddle.fluid.dygraph.layers.Layer

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

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

    import paddle
    from openvino.tools.mo import convert_model
    
    # 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 = convert_model(model, example_input=[x])
    
  • paddle.fluid.executor.Executor

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

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

    import paddle
    from openvino.tools.mo import convert_model
    
    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 = convert_model(exe, example_input=[x], example_output=[y])
    

重要

convert_model() メソッドは、後で使用するため最適化、コンパイル、またはファイルに保存できる ov.Model を返します。

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

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

よくある問い合わせ (FAQ)

モデル変換 API は、タイプミス、誤って使用されたオプション、またはその他の問題について説明するメッセージを表示します。これらは、問題の潜在的な原因を説明し、ほとんどの問題の解決方法を説明するモデル・オプティマイザー FAQ へのリンクを提供します。FAQ には、問題を理解するのに役立つ、モデルの変換の関連セクションへのリンクも含まれています。

関連情報

特定の PaddlePaddle モデルを変換するための段階的な手順を提供するチュートリアルについては、モデル変換チュートリアルのページを参照してください。