From 7cf0eaa26c1fb29ca9df97e4734ec7c1e10f81c4 Mon Sep 17 00:00:00 2001 From: Aron Virginas-Tar Date: Thu, 24 Jan 2019 17:05:36 +0000 Subject: IVGCVSW-2564 Add support for multiple input and output bindings in InferenceModel Change-Id: I64d724367d42dca4b768b6c6e42acda714985950 --- tests/ExecuteNetwork/ExecuteNetwork.cpp | 37 +++++++++++++++++++-------------- 1 file changed, 21 insertions(+), 16 deletions(-) (limited to 'tests/ExecuteNetwork') diff --git a/tests/ExecuteNetwork/ExecuteNetwork.cpp b/tests/ExecuteNetwork/ExecuteNetwork.cpp index dd769755b4..d783a0e2cf 100644 --- a/tests/ExecuteNetwork/ExecuteNetwork.cpp +++ b/tests/ExecuteNetwork/ExecuteNetwork.cpp @@ -137,13 +137,12 @@ std::vector ParseArray(std::istream& stream) [](const std::string& s) { return boost::numeric_cast(std::stoi(s)); }); } -void PrintArray(const std::vector& v) +void PrintOutputData(const std::string& outputLayerName, const std::vector& data) { - for (size_t i = 0; i < v.size(); i++) - { - printf("%f ", v[i]); - } - printf("\n"); + std::cout << outputLayerName << ": "; + std::copy(data.begin(), data.end(), + std::ostream_iterator(std::cout, " ")); + std::cout << std::endl; } void RemoveDuplicateDevices(std::vector& computeDevices) @@ -179,8 +178,10 @@ int MainImpl(const char* modelPath, const size_t subgraphId, const std::shared_ptr& runtime = nullptr) { + using TContainer = std::vector; + // Loads input tensor. - std::vector input; + TContainer inputDataContainer; { std::ifstream inputTensorFile(inputTensorDataFilePath); if (!inputTensorFile.good()) @@ -188,7 +189,7 @@ int MainImpl(const char* modelPath, BOOST_LOG_TRIVIAL(fatal) << "Failed to load input tensor data file from " << inputTensorDataFilePath; return EXIT_FAILURE; } - input = ParseArray(inputTensorFile); + inputDataContainer = ParseArray(inputTensorFile); } try @@ -198,19 +199,23 @@ int MainImpl(const char* modelPath, params.m_ModelPath = modelPath; params.m_IsModelBinary = isModelBinary; params.m_ComputeDevice = computeDevice; - params.m_InputBinding = inputName; - params.m_InputTensorShape = inputTensorShape; - params.m_OutputBinding = outputName; + params.m_InputBindings = { inputName }; + params.m_InputShapes = { *inputTensorShape }; + params.m_OutputBindings = { outputName }; params.m_EnableProfiling = enableProfiling; params.m_SubgraphId = subgraphId; InferenceModel model(params, runtime); - // Executes the model. - std::vector output(model.GetOutputSize()); - model.Run(input, output); + // Executes the model + const size_t numOutputs = params.m_OutputBindings.size(); + std::vector outputDataContainers(numOutputs); + model.Run({ inputDataContainer }, outputDataContainers); - // Prints the output tensor. - PrintArray(output); + // Print output tensors + for (size_t i = 0; i < numOutputs; i++) + { + PrintOutputData(params.m_OutputBindings[i], outputDataContainers[i]); + } } catch (armnn::Exception const& e) { -- cgit v1.2.1