[従来] 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.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
、レイアウトを設定する例:
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_shape
、mean_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.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
リストを使用して複数の入力の形状、タイプ、レイアウトを設定する例:
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
オブジェクトまたは文字列を受け入れます。
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_layout
と target_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"))