From ba9366da631087967b05e53819c9783ada2b4acd Mon Sep 17 00:00:00 2001 From: chenyx113 Date: Tue, 25 Feb 2025 20:23:09 +0800 Subject: [PATCH 1/4] [tools/onnx-subgraph] add onnx inference verification code add single onnx inference code for verification, submodel inference code will be submitted in next PR ONE-DCO-1.0-Signed-off-by: Youxin Chen --- tools/onnx_subgraph/CMakeLists.txt | 3 +- .../onnx_subgraph/single_vs_multiple_onnx.py | 74 +++++++++++++++++++ 2 files changed, 76 insertions(+), 1 deletion(-) create mode 100644 tools/onnx_subgraph/single_vs_multiple_onnx.py diff --git a/tools/onnx_subgraph/CMakeLists.txt b/tools/onnx_subgraph/CMakeLists.txt index 31868fe54be..81cf4a24fc1 100644 --- a/tools/onnx_subgraph/CMakeLists.txt +++ b/tools/onnx_subgraph/CMakeLists.txt @@ -14,10 +14,11 @@ find_package(Python3 COMPONENTS Interpreter Development REQUIRED) include_directories(${CMAKE_CURRENT_BINARY_DIR}) include_directories(${Python3_INCLUDE_DIRS}) -set(ONNX_SUBGRAPH_FILES +set(ONNX_SUBGRAPH_FILES test_model_download.sh extract_onnx.py subgraphs_ios.txt + single_vs_multiple_onnx.py ) foreach(ONNX_SUBGRAPH IN ITEMS ${ONNX_SUBGRAPH_FILES}) set(ONNX_SUBGRAPH_FILE ${ONNX_SUBGRAPH}) diff --git a/tools/onnx_subgraph/single_vs_multiple_onnx.py b/tools/onnx_subgraph/single_vs_multiple_onnx.py new file mode 100644 index 00000000000..c74e6238a0c --- /dev/null +++ b/tools/onnx_subgraph/single_vs_multiple_onnx.py @@ -0,0 +1,74 @@ +# Copyright (c) 2025 Samsung Electronics Co., Ltd. All Rights Reserved +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import onnxruntime as ort +import numpy as np +import os +import re +import argparse + + +class ModelInference: + """ + This class is used to infer multiple onnx models. + Parameters: + model_path: Path to the model files. + subgraphsiostxt_path: Path to the txt file that describes the structure of the model graph. + Output: + outputs[0]: Inference result from the model. + Description: + Subgraphsiostxt_path is a txt file that describes the structure of the model graph and is used to get input/output node names. + The model_path contains paths to multiple onnx files. + The load_sessions function will sort the onnx models in the model_path according to the order specified in subgraphsiostxt_path. + """ + def __init__(self, model_path, subgraphsiostxt_path): + self.model_path = model_path + self.subgraphsiostxt_path = subgraphsiostxt_path + + + def infer_single_onnx_model(model_file, input_data): + session = ort.InferenceSession(model_file) + outputs = session.run(None, input_data) + output_names = [output.name for output in session.get_outputs()] + output_dict = {name: output for name, output in zip(output_names, outputs)} + return output_dict + + +if __name__ == "__main__": + arg_parser = argparse.ArgumentParser() + arg_parser.add_argument('-s', + '--single', + default='./resnet-test.onnx', + help="set single ONNX model path") + arg_parser.add_argument('-m', + '--multi', + default='./subgraphs/', + help="set split subgraph models path") + arg_parser.add_argument('-n', + '--node', + default='./scripts/subgraphs_ios.txt', + help="set subgraphs node i/o information") + args = arg_parser.parse_args() + + # Initialize ModelInference instance for inference + model_inference = ModelInference(args.multi, args.node) + + # Default input data dictionary + default_input_data = { + "x": np.random.rand(1, 3, 256, 256).astype(np.float32), + } + + # Perform inference using a single ONNX model + output_single = ModelInference.infer_single_onnx_model(args.single, default_input_data) + print("Single model inference completed!") From b75907ee8181bd171af07ba85d98db1bded41ff2 Mon Sep 17 00:00:00 2001 From: chenyx113 Date: Tue, 25 Feb 2025 20:34:30 +0800 Subject: [PATCH 2/4] update format check issue --- tools/onnx_subgraph/single_vs_multiple_onnx.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/onnx_subgraph/single_vs_multiple_onnx.py b/tools/onnx_subgraph/single_vs_multiple_onnx.py index c74e6238a0c..632ade1229e 100644 --- a/tools/onnx_subgraph/single_vs_multiple_onnx.py +++ b/tools/onnx_subgraph/single_vs_multiple_onnx.py @@ -36,7 +36,6 @@ def __init__(self, model_path, subgraphsiostxt_path): self.model_path = model_path self.subgraphsiostxt_path = subgraphsiostxt_path - def infer_single_onnx_model(model_file, input_data): session = ort.InferenceSession(model_file) outputs = session.run(None, input_data) @@ -70,5 +69,6 @@ def infer_single_onnx_model(model_file, input_data): } # Perform inference using a single ONNX model - output_single = ModelInference.infer_single_onnx_model(args.single, default_input_data) + output_single = ModelInference.infer_single_onnx_model(args.single, + default_input_data) print("Single model inference completed!") From 8889cc79a24a916e31eaecee549812cf4afe7722 Mon Sep 17 00:00:00 2001 From: chenyx113 Date: Wed, 26 Feb 2025 08:40:16 +0800 Subject: [PATCH 3/4] Update single_vs_multiple_onnx.py split long lines to short lines --- tools/onnx_subgraph/single_vs_multiple_onnx.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/tools/onnx_subgraph/single_vs_multiple_onnx.py b/tools/onnx_subgraph/single_vs_multiple_onnx.py index 632ade1229e..58a5cc65694 100644 --- a/tools/onnx_subgraph/single_vs_multiple_onnx.py +++ b/tools/onnx_subgraph/single_vs_multiple_onnx.py @@ -28,9 +28,10 @@ class ModelInference: Output: outputs[0]: Inference result from the model. Description: - Subgraphsiostxt_path is a txt file that describes the structure of the model graph and is used to get input/output node names. - The model_path contains paths to multiple onnx files. - The load_sessions function will sort the onnx models in the model_path according to the order specified in subgraphsiostxt_path. + Subgraphsiostxt_path is a txt file that describes the structure of the model graph and + is used to get input/output node names.The model_path contains paths to multiple onnx files. + The load_sessions function will sort the onnx models in the model_path according to the + order specified in subgraphsiostxt_path. """ def __init__(self, model_path, subgraphsiostxt_path): self.model_path = model_path From 59308b08d40592ca7ccac983d23613045700bdc0 Mon Sep 17 00:00:00 2001 From: chenyx113 Date: Wed, 26 Feb 2025 09:02:20 +0800 Subject: [PATCH 4/4] Update CMakeLists.txt recover no related updating --- tools/onnx_subgraph/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/onnx_subgraph/CMakeLists.txt b/tools/onnx_subgraph/CMakeLists.txt index 81cf4a24fc1..1acacb37848 100644 --- a/tools/onnx_subgraph/CMakeLists.txt +++ b/tools/onnx_subgraph/CMakeLists.txt @@ -14,7 +14,7 @@ find_package(Python3 COMPONENTS Interpreter Development REQUIRED) include_directories(${CMAKE_CURRENT_BINARY_DIR}) include_directories(${Python3_INCLUDE_DIRS}) -set(ONNX_SUBGRAPH_FILES +set(ONNX_SUBGRAPH_FILES test_model_download.sh extract_onnx.py subgraphs_ios.txt