[従来] Python オブジェクトとして表現されたモデルに変換

危険

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

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

モデル変換 API は、openvino.tools.mo 名前空間の convert_model() メソッドで表現されます。convert_model() は、PartialShape、レイアウト、タイプなどの openvino.runtime のタイプと互換性があります。

convert_model() には、コマンドライン・ツールから利用できる機能に加えて、PyTorch モデルや TensorFlow Keras モデルなどの Python モデル・オブジェクトを、ファイルに保存したりトレーニング環境 (Jupyter やトレーニング・スクリプト) から離れることなく直接渡す機能があります。Python から直接使用される入力モデルに加えて、convert_model は、OpenVINO でサポートされていない操作の変換を容易にするため、Python で直接構築された OpenVINO 拡張オブジェクトを受け取ることができます。

モデル変換は、convert_model() メソッドと MO コマンドライン・ツールで実行できます。この記事の機能は、convert_model() にのみ適用され、コマンドライン・ツールには存在しません。

convert_model() は、コンパイルおよび推論または IR へのシリアル化が可能な openvino.runtime.Model オブジェクトを返します。

PyTorch モデルをメモリーから直接変換する例:

import torchvision

model = torchvision.models.resnet50(weights='DEFAULT')
ov_model = convert_model(model)

次のタイプが、convert_model() の入力モデルとしてサポートされています。

  • PyTorch - torch.nn.Moduletorch.jit.ScriptModuletorch.jit.ScriptFunction。詳細については、PyTorch モデルの変換を参照してください。

  • TensorFlow/TensorFlow 2/Keras - tf.keras.Modeltf.keras.layers.Layertf.compat.v1.Graphtf.compat.v1.GraphDeftf.Moduletf.function, tf.compat.v1.sessiontf.train.checkpoint。詳細については、TensorFlow モデルの変換を参照してください。

convert_model() は、MO コマンドライン・ツールで使用可能なすべてのパラメーターを受け入れます。パラメーターは、コマンドライン・ツールと同様に、Python クラスまたは文字列アナログによって指定できます。

ネイティブ Python クラスを使用して input_shapemean_valuesレイアウトを設定する例:

from openvino.runtime import PartialShape, Layout

ov_model = convert_model(model, input_shape=PartialShape([1,3,100,100]), mean_values=[127, 127, 127], layout=Layout("NCHW"))

input_shapemean_valuesレイアウトを設定する文字列の使用例:

ov_model = convert_model(model, input_shape="[1,3,100,100]", mean_values="[127,127,127]", layout="NCHW")

input パラメーターは、名前、形状、タイプのタプルによって設定できます。タプルには文字列タイプの入力名が必要です。形状とタイプはオプションです。形状は、次元のリストまたはタプル (int または openvino.runtime.Dimension)、または openvino.runtime.PartialShape、または openvino.runtime.Shape。タイプは numpy タイプまたは openvino.runtime.Type のいずれかになります。

input パラメーターでタプルを使用してモデルを切り取る例:

ov_model = convert_model(model, input=("input_name", [3], np.float32))

複雑なケースでは、input パラメーターに値を設定するのに、InputCutInfo クラスを使用できます。InputCutInfo は、名前形状タイプの 4 つのパラメーターを受け入れます。

InputCutInfo("input_name", [3], np.float32, [0.5, 2.1, 3.4]) は、InputCutInfo(name="input_name", shape=[3], type=np.float32, value=[0.5, 2.1, 3.4]) と同等です。

InputCutInfo でサポートされているタイプ:

  • 名前: string

  • 形状: 次元の リスト または tuple (int または openvino.runtime.Dimension)、openvino.runtime.PartialShapeopenvino.runtime.Shape

  • タイプ: numpy typeopenvino.runtime.Type

  • 値: numpy.ndarray、数値のリストブール値

InputCutInfo を使用して値を含む入力を固定する例:

from openvino.tools.mo import convert_model, InputCutInfo

ov_model = convert_model(model, input=InputCutInfo("input_name", [3], np.float32, [0.5, 2.1, 3.4]))

複数の入力を持つモデルのパラメーターを設定するには、パラメーターの list を使用します。
list をサポートするパラメーター:

  • input

  • input_shape

  • layout

  • source_layout

  • dest_layout

  • mean_values

  • scale_values

リストを使用して複数の入力の形状、タイプ、レイアウトを設定する例:

ov_model = convert_model(model, input=[("input1", [1,3,100,100], np.float32), ("input2", [1,3,100,100], np.float32)], layout=[Layout("NCHW"), LayoutMap("NCHW", "NHWC")])

layoutsource_layout および dest_layout は、openvino.runtime.Layout オブジェクトまたは文字列を受け入れます。

Layout クラスを使用してモデル入力のレイアウトを設定する例:

from openvino.runtime import Layout
from openvino.tools.mo import convert_model

ov_model = convert_model(model, source_layout=Layout("NCHW"))

layout パラメーターでソースレイアウトと宛先レイアウトの両方を設定するには、LayoutMap クラスを使用します。LayoutMap は、source_layouttarget_layout という 2 つのパラメーターを受け入れます。

LayoutMap("NCHW", "NHWC")LayoutMap(source_layout="NCHW", target_layout="NHWC") と同等です。

LayoutMap クラスを使用してモデル入力のレイアウトを変更する例:

from openvino.tools.mo import convert_model, LayoutMap

ov_model = convert_model(model, layout=LayoutMap("NCHW", "NHWC"))