[従来] 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_input
とexample_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
を返します。
よくある問い合わせ (FAQ)¶
モデル変換 API は、タイプミス、誤って使用されたオプション、またはその他の問題について説明するメッセージを表示します。これらは、問題の潜在的な原因を説明し、ほとんどの問題の解決方法を説明するモデル・オプティマイザー FAQ へのリンクを提供します。FAQ には、問題を理解するのに役立つ、モデルの変換の関連セクションへのリンクも含まれています。
関連情報¶
特定の PaddlePaddle モデルを変換するための段階的な手順を提供するチュートリアルについては、モデル変換チュートリアルのページを参照してください。