動的入力形状を固定にする
動的入力形状を固定にする
Section titled “動的入力形状を固定にする”モデル使用可能性チェッカーによって報告されているように、モデルがNNAPIまたはCoreMLで使用される可能性がある場合、入力形状を「固定」にすることでメリットがあります。 これは、NNAPIが動的入力形状をサポートしておらず、CoreMLが固定入力形状でより良いパフォーマンスを発揮する可能性があるためです。
たとえば、多くの場合、モデルには動的なバッチサイズがあるため、トレーニングがより効率的になります。モバイルシナリオでは、バッチのサイズは通常1です。 バッチサイズ次元を1に設定して「固定」にすることで、NNAPIがモデルを実行できるようになる場合があります。
ヘルパーは、特定の次元または入力形状全体を更新するために使用できます。
python -m onnxruntime.tools.make_dynamic_shape_fixed -husage: make_dynamic_shape_fixed.py:make_dynamic_shape_fixed_helper [-h] [--dim_param DIM_PARAM] [--dim_value DIM_VALUE] [--input_name INPUT_NAME] [--input_shape INPUT_SHAPE] input_model output_model
dim_paramまたは入力形状に固定値を割り当てます。dim_paramとdim_value、またはinput_nameとinput_shapeのいずれかを提供します。
positional arguments: input_model 更新するONNXモデルへのパスを提供します。 output_model 更新されたONNXモデルを書き込むパスを提供します。
optional arguments: -h, --help このヘルプメッセージを表示して終了します --dim_param DIM_PARAM シンボリックパラメータ名。指定した場合はdim_valueを提供します。 --dim_value DIM_VALUE モデルでdim_paramを置き換える値。> 0である必要があります。 --input_name INPUT_NAME 形状を置き換えるモデル入力名。指定した場合はinput_shapeを提供します。 --input_shape INPUT_SHAPE input_shapeに使用する形状。形状のカンマ区切りリストを提供します。すべての値は> 0である必要があります。例:--input_shape 1,3,256,256モデルで必要な更新を決定するには、通常、Netronでモデルを表示して入力を検査することが役立ちます。
シンボリック次元を固定にする
Section titled “シンボリック次元を固定にする”以下は、Netronを使用して表示したサンプルモデルで、‘input:0’のバッチサイズに対して’batch’というシンボリック次元があります。 これを固定値1を使用するように更新します。

python -m onnxruntime.tools.make_dynamic_shape_fixed --dim_param batch --dim_value 1 model.onnx model.fixed.onnx置換後、‘input:0’の形状が[1, 36, 36, 3]の固定値になっていることを確認できます。

入力形状を固定にする
Section titled “入力形状を固定にする”以下は、‘x’入力に名前のない動的次元があるサンプルモデルです。Netronはこれらを’?‘で表します。
次元に名前がないため、--input_shapeオプションを使用して形状を更新する必要があります。

python -m onnxruntime.tools.make_dynamic_shape_fixed --input_name x --input_shape 1,3,960,960 model.onnx model.fixed.onnx置換後、‘x’の形状が[1, 3, 960, 960]の固定値になっていることを確認できます。
