6.2. TopsIDEAS onnx infer_shape

描述

给ONNX文件添加tensor的shape信息,支持以下几种模式:

  1. --mode=onnx:使用 onnx.shape_inference 形状推理

  2. --mode=symbolic:使用onnxruntime框架中提供的 符号计算 形状推理 方式(默认)。

  3. --mode=static:使用onnxruntime实时推理,收集runtime过程中的shape信息,但这将会导致 部分动态维度变为静态

命令行

使用方法

usage: topsideas onnx infer_shape [-h] --input_onnx INPUT_ONNX [--output_onnx OUTPUT_ONNX] [--input_tensors INPUT_TENSORS [INPUT_TENSORS ...]]
                                  [--mode {onnx,symbolic,static}]

参数

:::{table} topsideas onnx infer_shape 参数列表
:widths: 8 32 20 45

short

long

default

help

-h

--help

show this help message and exit

--input_onnx

None

Provide the original onnx file.

--output_onnx

None

Export the modified onnx file.If not set, use original onnx path with ‘_shape’ suffix.

--input_tensors

[]

Overwrite input shapes or data type. Format: –input_tensors NAME:SHAPE:DTYPE. For example: –input_tensors input1 input2:[1,3,224,224]:float32 input3:int32 input4:[]. If omitted, uses the current model inputs.

--mode

symbolic

The mode to do shape inference, choices are [‘onnx’, ‘symbolic’, ‘static’]. onnx mode use shape inference provided by onnx library, cannot infer dynamic shape. symbolic mode can process more dynamic shapes by symbolic maths. static mode will run inference to collect shapes, which may cause some dynamic dimensions to become static.

:::

示例

:::{figure-md} 符号推理结果

符号推理结果 :::

注1:unk_834为原模型中的batch size,×代表shape的维度的分割符,*为符号推理的计算式的一部分。

注2:netron部分版本对shape信息的显示加了长度限制,超出部分可以通过点选节点后在右边栏查看。

API

使用方法

from topsideas.onnx import InferShape
result = InferShape.run(input_onnx)

参数

:::{table} topsideas.onnx.InferShape 参数列表
:widths: 25 40 35

argument

type

default

input_onnx

onnx.onnx_ml_pb2.ModelProto

input_tensors

List[str]

None

mode

str

symbolic

RETURN

onnx.onnx_ml_pb2.ModelProto

:::