[従来] Python オブジェクトとして表現されたモデルに変換#
危険
ここで説明されているコードは非推奨になりました。従来のソリューションの適用を避けるため使用しないでください。下位互換性を確保するためにしばらく保持されますが、最新のアプリケーションでは使用してはなりません。
このガイドでは、非推奨となった変換方法について説明します。新しい推奨方法に関するガイドは、モデルの準備に記載されています。
モデル・トランスフォーメーション API は、openvino.tools.mo 名前空間の convert_model() メソッドで表現されます。convert_model() は、PartialShape、Layout、Type などの 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
from openvino.tools.mo import convert_model
model = torchvision.models.resnet50(weights='DEFAULT')
ov_model = convert_model(model)次のタイプが、convert_model() の入力モデルとしてサポートされています:
PyTorch -
torch.nn.Module、torch.jit.ScriptModule、torch.jit.ScriptFunction。詳細については、PyTorch モデルの変換を参照してください。TensorFlow / TensorFlow 2 / Keras -
tf.keras.Model、tf.keras.layers.Layer、tf.compat.v1.Graph、tf.compat.v1.GraphDef、tf.Module、tf.function,tf.compat.v1.session、tf.train.checkpoint。詳細については、TensorFlow モデルの変換を参照してください。
convert_model() は、MO コマンドライン・ツールで使用可能なすべてのパラメーターを受け入れます。パラメーターは、コマンドライン・ツールと同様に、Python クラスまたは文字列アナログによって指定できます。
ネイティブ Python クラスを使用して input_shape、mean_values、layout を設定する例:
from openvino.runtime import PartialShape, Layout
from openvino.tools.mo import convert_model
ov_model = convert_model(model, input_shape=PartialShape([1,3,100,100]), mean_values=[127, 127, 127], layout=Layout("NCHW"))input_shape、mean_values、レイアウトを設定する文字列の使用例:
from openvino.runtime import Layout
from openvino.tools.mo import convert_model
ov_model = convert_model(model, input_shape="[1,3,100,100]", mean_values="[127,127,127]", layout="NCHW")input パラメーターは、名前、形状、タイプの tuple によって設定できます。タプルには文字列タイプの入力名が必要です。形状とタイプはオプションです。形状は、次元のリストまたはタプル (int または openvino.runtime.Dimension)、または openvino.runtime.PartialShape、または openvino.runtime.Shape。タイプは numpy タイプまたは openvino.runtime.Type のいずれかになります。
input パラメーターでタプルを使用してモデルを切り取る例:
from openvino.tools.mo import convert_model
ov_model = convert_model(model, input=("input_name", [3], np.float32))複雑なケースでは、input パラメーターに値を設定するのに、InputCutInfo クラスを使用できます。InputCutInfo は 4 つのパラメーターを受け入れます: name、shape、type および value。
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。形状: 次元のリストまたはタプル (
intまたはopenvino.runtime.Dimension)、openvino.runtime.PartialShape、openvino.runtime.Shape。タイプ:
numpy type、openvino.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
リストを使用して複数の入力の形状、タイプ、レイアウトを設定する例:
from openvino.runtime import Layout
from openvino.tools.mo import convert_model, LayoutMap
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")])layout、source_layout、および dest_layout は、openvino.runtime.Layout オブジェクトまたは string を受け入れます。
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 は 2 つのパラメーターを受け入れます: source_layout と target_layout。
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"))serialize メソッドを使用して変換されたモデルを OpenVINO IR に保存する例:
from openvino.runtime import serialize
serialize(ov_model, "model.xml")