[従来] 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 
    
    # paddle.hapi.model.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) 
    
    # OpenVINO IR 形式に変換 
    ov_model = convert_model(model) 
    
    # オプション: OpenVINO IR を *.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 
    
    # paddle.fluid.dygraph.layers.Layer 形式のモデルを作成 
    model = paddle.vision.models.resnet50() 
    x = paddle.rand([1,3,224,224]) 
    
    # OpenVINO IR 形式に変換 
    ov_model = convert_model(model, example_input=[x])
  • paddle.fluid.executor.Executor

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

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

    import paddle 
    from openvino.tools.mo import convert_model 
    
    paddle.enable_static() 
    
    # paddle.fluid.executor.Executor 形式のモデルを作成 
    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()) 
    
    # OpenVINO IR 形式に変換 
    ov_model = convert_model(exe, example_input=[x], example_output=[y])

重要

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

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

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

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

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

関連情報#

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