[従来] 入力形状の設定

危険

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

このガイドでは、非推奨となった変換方法について説明します。新しい推奨方法に関するガイドは、入力形状の設定の記事に記載されています。

モデル変換 API を使用すると、input_shapestatic_shape の 2 つのパラメーターを使用して形状定義を追加することで、モデルの効率を高めることができます。

input_shape パラメーターを指定

convert_model() は、未定義の次元を含む動的入力形状を含むモデルの変換をサポートします。ただし、データの形状が推論要求ごとに変わらない場合は、入力に対して静的な形状を設定することを推奨します (すべての次元が完全に定義されている場合)。実行時の推論中ではなく、このステージでこれを実行すると、パフォーマンスとメモリー消費の点で有利になる可能性があります。静的形状を設定するために、モデル変換 API は input_shape パラメーターを提供します。実行時の入力形状の詳細については、入力形状の変更を参照してください。また、実行時の動的形状の詳細については、動的形状を参照してください。

OpenVINO ランタイム API では、一部のハードウェアで未定義の次元を持つモデルを推論する際に、制限が生じることがあります。この場合、input_shape パラメーターと reshape メソッドは、未定義次元の問題を解決するのに役立ちます。

例えば、単一入力を使用して TensorFlow MobileNet モデルのモデル変換を実行し、入力形状 [2,300,300,3] を指定します。

from openvino.tools.mo import convert_model
ov_model = convert_model("MobileNet.pb", input_shape=[2,300,300,3])
mo --input_model MobileNet.pb --input_shape [2,300,300,3]

モデルに複数の入力がある場合、input_shapeinput パラメーターと組み合わせて使用​​する必要があります。入力パラメーターには入力名のリストが含まれており、そのリストに対して、input_shape を介して同じ順序の形状が定義されます。 例えば、入力データseq_len のペアを使用して ONNX OCR モデルのモデル変換を開始し、それらに形状 [3,150,200,1][3] を指定します。

from openvino.tools.mo import convert_model
ov_model = convert_model("ocr.onnx", input=["data","seq_len"], input_shape=[[3,150,200,1],[3]])
mo --input_model ocr.onnx --input data,seq_len --input_shape [3,150,200,1],[3]

あるいは、次のように入力パラメーターを使用して、入力形状を指定します。

from openvino.tools.mo import convert_model
ov_model = convert_model("ocr.onnx", input=[("data",[3,150,200,1]),("seq_len",[3])])
mo --input_model ocr.onnx --input data[3,150,200,1],seq_len[3]

input_shape パラメーターを使用すると、元の入力形状をモデルと互換性のある形状にオーバーライドできます。動的形状、つまり動的な次元を使用すると、元のモデルを変換後のモデルの静的な形状に置き換えることができ、またその逆も可能です。動的次元は、モデル変換 API パラメーターで -1 または ? としてマークできます。例えば、ONNX OCR モデルのモデル変換を起動し、入力の動的バッチ次元を指定します。

from openvino.tools.mo import convert_model
ov_model = convert_model("ocr.onnx", input=["data","seq_len"], input_shape=[[-1,150,200,1],[-1]]
mo --input_model ocr.onnx --input data,seq_len --input_shape [-1,150,200,1],[-1]

実行時に次元が定義されていないモデルのメモリー消費を最適化するため、モデル変換 API には次元の境界を定義する機能が用意されています。未定義の次元境界は省略記号で指定できます。例えば、ONNX OCR モデルのモデル変換を起動し、バッチ次元の境界を指定します。

from openvino.tools.mo import convert_model
from openvino.runtime import Dimension
ov_model = convert_model("ocr.onnx", input=["data","seq_len"], input_shape=[[Dimension(1,3),150,200,1],[Dimension(1,3)]]
mo --input_model ocr.onnx --input data,seq_len --input_shape [1..3,150,200,1],[1..3]

実際には、一部のモデルは入力形状の変更に対応していません。この場合、モデル変換 API により新しい入力形状を設定することはできません。形状の詳細については、推論のトラブルシューティング形状推論フローを緩和する方法 に従ってください。