5cbd3f29e3
Fuzz / Run fuzz harnesses (${{ github.event_name == 'schedule' && 'nightly' || 'smoke' }}) (push) Has been cancelled
Create Releases / call-mac (push) Has been cancelled
Create Releases / call-linux (push) Has been cancelled
Create Releases / call-sdist (push) Has been cancelled
Create Releases / call-win (push) Has been cancelled
Create Releases / call-pyodide (push) Has been cancelled
Windows_No_Exception_CI / build (x64, 3.10) (push) Has been cancelled
Check URLs / build (push) Has been cancelled
Create Releases / Attest CI build artifacts (push) Has been cancelled
Create Releases / Check for Publish release build to pypi (push) Has been cancelled
Create Releases / Check for Publish preview build to test.pypi-weekly (push) Has been cancelled
Create Releases / Publish preview build to test.pypi-weekly (push) Has been cancelled
Create Releases / Check for Publish release build to test.pypi (rc-candidates) (push) Has been cancelled
Create Releases / Publish release build to test.pypi (push) Has been cancelled
Create Releases / Check for Publish preview build to pypi-weekly (push) Has been cancelled
Create Releases / Publish preview build to pypi-weekly (push) Has been cancelled
Create Releases / Publish release build to pypi (push) Has been cancelled
Create Releases / test source distribution (push) Has been cancelled
clang-tidy / clang-tidy (push) Has been cancelled
Lint / Validate SBOM (push) Has been cancelled
Lint / Enforce style (push) Has been cancelled
CI / Test windows-2022, 3.14, External, debug=0, unity_build=0, onnx_ml=1, autogen=0 (push) Has been cancelled
CI / Test windows-latest, 3.10, Internal, debug=0, unity_build=0, onnx_ml=1, autogen=0 (push) Has been cancelled
CI / Test windows-latest, 3.14, Internal, debug=0, unity_build=0, onnx_ml=1, autogen=0 (push) Has been cancelled
CI / Test windows-latest, 3.14t, Internal, debug=0, unity_build=0, onnx_ml=1, autogen=0 (push) Has been cancelled
CI / Test ubuntu-24.04, 3.14, Internal, debug=1, unity_build=0, onnx_ml=1, autogen=0 (push) Has been cancelled
CI / Test ubuntu-24.04, 3.14, External, debug=0, unity_build=1, onnx_ml=1, autogen=1 (push) Has been cancelled
CI / Test ubuntu-24.04, 3.14, External, debug=0, unity_build=0, onnx_ml=0, autogen=0 (push) Has been cancelled
CI / Test macos-latest, 3.10, Internal, debug=0, unity_build=0, onnx_ml=1, autogen=0 (push) Has been cancelled
CI / Test macos-latest, 3.14, Internal, debug=0, unity_build=0, onnx_ml=1, autogen=0 (push) Has been cancelled
CI / Test macos-latest, 3.14t, Internal, debug=0, unity_build=0, onnx_ml=1, autogen=0 (push) Has been cancelled
CI / Test ubuntu-24.04, 3.14, External, debug=0, unity_build=0, onnx_ml=1, autogen=0 (push) Has been cancelled
CI / Test ubuntu-24.04, 3.10, Internal, debug=0, unity_build=0, onnx_ml=1, autogen=0 (push) Has been cancelled
CI / Test ubuntu-24.04, 3.14, Internal, debug=0, unity_build=0, onnx_ml=1, autogen=0 (push) Has been cancelled
CI / Test ubuntu-24.04, 3.14t, Internal, debug=0, unity_build=0, onnx_ml=1, autogen=0 (push) Has been cancelled
Pixi CI / Install and lint (ubuntu-24.04-arm) (push) Has been cancelled
Pixi CI / Install and lint (windows-2022) (push) Has been cancelled
Pixi CI / Xcode generator build (push) Has been cancelled
Pixi CI / Install and test (macos-latest, default) (push) Has been cancelled
Pixi CI / Install and test (ubuntu-24.04-arm, default) (push) Has been cancelled
Pixi CI / Install and test (ubuntu-latest, default) (push) Has been cancelled
Pixi CI / Install and test (windows-2022, default) (push) Has been cancelled
Pixi CI / Install and test (macos-latest, oldies) (push) Has been cancelled
Pixi CI / Install and test (ubuntu-24.04-arm, oldies) (push) Has been cancelled
Pixi CI / Install and test (ubuntu-latest, oldies) (push) Has been cancelled
Pixi CI / Install and test (windows-2022, oldies) (push) Has been cancelled
CodeQL / Analyze (actions) (push) Has been cancelled
CodeQL / Analyze (cpp) (push) Has been cancelled
CodeQL / Analyze (python) (push) Has been cancelled
Copilot Setup Steps / copilot-setup-steps (push) Has been cancelled
Generate and publish ONNX docs / build (push) Has been cancelled
Generate and publish ONNX docs / deploy (push) Has been cancelled
Scorecard supply-chain security / Scorecard analysis (push) Has been cancelled
99 lines
3.4 KiB
Python
99 lines
3.4 KiB
Python
# Copyright (c) ONNX Project Contributors
|
|
|
|
# SPDX-License-Identifier: Apache-2.0
|
|
from __future__ import annotations
|
|
|
|
from typing import Any
|
|
|
|
import onnx.checker
|
|
from onnx import ModelProto, ValueInfoProto
|
|
|
|
|
|
def update_inputs_outputs_dims(
|
|
model: ModelProto,
|
|
input_dims: dict[str, list[Any]],
|
|
output_dims: dict[str, list[Any]],
|
|
) -> ModelProto:
|
|
"""This function updates the dimension sizes of the model's inputs and outputs to the values
|
|
provided in input_dims and output_dims. if the dim value provided is negative, a unique dim_param
|
|
will be set for that dimension.
|
|
|
|
Example. if we have the following shape for inputs and outputs:
|
|
|
|
* shape(input_1) = ('b', 3, 'w', 'h')
|
|
* shape(input_2) = ('b', 4)
|
|
* shape(output) = ('b', 'd', 5)
|
|
|
|
The parameters can be provided as:
|
|
|
|
::
|
|
|
|
input_dims = {
|
|
"input_1": ['b', 3, 'w', 'h'],
|
|
"input_2": ['b', 4],
|
|
}
|
|
output_dims = {
|
|
"output": ['b', -1, 5]
|
|
}
|
|
|
|
Putting it together:
|
|
|
|
::
|
|
|
|
model = onnx.load('model.onnx')
|
|
updated_model = update_inputs_outputs_dims(model, input_dims, output_dims)
|
|
onnx.save(updated_model, 'model.onnx')
|
|
"""
|
|
dim_param_set: set[str] = set()
|
|
|
|
def init_dim_param_set(
|
|
dim_param_set: set[str], value_infos: list[ValueInfoProto]
|
|
) -> None:
|
|
for info in value_infos:
|
|
shape = info.type.tensor_type.shape
|
|
for dim in shape.dim:
|
|
if dim.HasField("dim_param"):
|
|
dim_param_set.add(dim.dim_param)
|
|
|
|
init_dim_param_set(dim_param_set, model.graph.input) # type: ignore[arg-type]
|
|
init_dim_param_set(dim_param_set, model.graph.output) # type: ignore[arg-type]
|
|
init_dim_param_set(dim_param_set, model.graph.value_info) # type: ignore[arg-type]
|
|
|
|
def update_dim(tensor: ValueInfoProto, dim: Any, j: int, name: str) -> None:
|
|
dim_proto = tensor.type.tensor_type.shape.dim[j]
|
|
if isinstance(dim, int):
|
|
if dim >= 0:
|
|
if dim_proto.HasField("dim_value") and dim_proto.dim_value != dim:
|
|
raise ValueError(
|
|
f"Unable to set dimension value to {dim} for axis {j} of {name}. Contradicts existing dimension value {dim_proto.dim_value}."
|
|
)
|
|
dim_proto.dim_value = dim
|
|
else:
|
|
generated_dim_param = name + "_" + str(j)
|
|
if generated_dim_param in dim_param_set:
|
|
raise ValueError(
|
|
f"Unable to generate unique dim_param for axis {j} of {name}. Please manually provide a dim_param value."
|
|
)
|
|
dim_proto.dim_param = generated_dim_param
|
|
elif isinstance(dim, str):
|
|
dim_proto.dim_param = dim
|
|
else:
|
|
raise TypeError(
|
|
f"Only int or str is accepted as dimension value, incorrect type: {type(dim)}"
|
|
)
|
|
|
|
for input_ in model.graph.input:
|
|
input_name = input_.name
|
|
input_dim_arr = input_dims[input_name]
|
|
for j, dim in enumerate(input_dim_arr):
|
|
update_dim(input_, dim, j, input_name)
|
|
|
|
for output in model.graph.output:
|
|
output_name = output.name
|
|
output_dim_arr = output_dims[output_name]
|
|
for j, dim in enumerate(output_dim_arr):
|
|
update_dim(output, dim, j, output_name)
|
|
|
|
onnx.checker.check_model(model)
|
|
return model
|