aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJim Flynn <jim.flynn@arm.com>2019-05-03 12:54:26 +0100
committerRuomei Yan <ruomei.yan@arm.com>2019-05-07 09:21:19 +0000
commit2fd6100c7c034d6fc4420fbb5b615660803e46e9 (patch)
tree121f2faa4be9adeb2fedc4b9116426b5c9388421
parent0eea37c05f82b299f6579ad119194f429147687e (diff)
downloadarmnn-2fd6100c7c034d6fc4420fbb5b615660803e46e9.tar.gz
IVGCVSW-3038 Move MakeInputTensors to armnnUtils
Change-Id: I4352a645badde788b9e33b3675a9cc9c0fc3dc33 Signed-off-by: Jim Flynn <jim.flynn@arm.com>
-rw-r--r--CMakeLists.txt1
-rw-r--r--src/armnnUtils/TensorIOUtils.hpp87
-rw-r--r--tests/InferenceModel.hpp73
-rw-r--r--tests/MultipleNetworksCifar10/MultipleNetworksCifar10.cpp6
4 files changed, 93 insertions, 74 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 34dbd91526..b3056c9cae 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -53,6 +53,7 @@ list(APPEND armnnUtils_sources
src/armnnUtils/ParserPrototxtFixture.hpp
src/armnnUtils/PrototxtConversions.hpp
src/armnnUtils/PrototxtConversions.cpp
+ src/armnnUtils/TensorIOUtils.hpp
src/armnnUtils/TensorUtils.hpp
src/armnnUtils/TensorUtils.cpp
)
diff --git a/src/armnnUtils/TensorIOUtils.hpp b/src/armnnUtils/TensorIOUtils.hpp
new file mode 100644
index 0000000000..bf5a37b00f
--- /dev/null
+++ b/src/armnnUtils/TensorIOUtils.hpp
@@ -0,0 +1,87 @@
+//
+// Copyright © 2017 Arm Ltd. All rights reserved.
+// SPDX-License-Identifier: MIT
+//
+
+#pragma once
+
+#include <armnn/Tensor.hpp>
+#include <vector>
+
+#include <boost/format.hpp>
+#include <boost/variant/apply_visitor.hpp>
+
+namespace armnnUtils
+{
+
+template<typename TContainer>
+inline armnn::InputTensors MakeInputTensors(
+ const std::vector<armnn::BindingPointInfo>& inputBindings,
+ const std::vector<TContainer>& inputDataContainers)
+{
+ armnn::InputTensors inputTensors;
+
+ const size_t numInputs = inputBindings.size();
+ if (numInputs != inputDataContainers.size())
+ {
+ throw armnn::Exception(boost::str(boost::format("Number of inputs does not match number of "
+ "tensor data containers: %1% != %2%") % numInputs % inputDataContainers.size()));
+ }
+
+ for (size_t i = 0; i < numInputs; i++)
+ {
+ const armnn::BindingPointInfo& inputBinding = inputBindings[i];
+ const TContainer& inputData = inputDataContainers[i];
+
+ boost::apply_visitor([&](auto&& value)
+ {
+ if (value.size() != inputBinding.second.GetNumElements())
+ {
+ throw armnn::Exception("Input tensor has incorrect size");
+ }
+
+ armnn::ConstTensor inputTensor(inputBinding.second, value.data());
+ inputTensors.push_back(std::make_pair(inputBinding.first, inputTensor));
+ },
+ inputData);
+ }
+
+ return inputTensors;
+}
+
+template<typename TContainer>
+inline armnn::OutputTensors MakeOutputTensors(
+ const std::vector<armnn::BindingPointInfo>& outputBindings,
+ std::vector<TContainer>& outputDataContainers)
+{
+ armnn::OutputTensors outputTensors;
+
+ const size_t numOutputs = outputBindings.size();
+ if (numOutputs != outputDataContainers.size())
+ {
+ throw armnn::Exception(boost::str(boost::format("Number of outputs does not match number of "
+ "tensor data containers: %1% != %2%") % numOutputs % outputDataContainers.size()));
+ }
+
+ for (size_t i = 0; i < numOutputs; i++)
+ {
+ const armnn::BindingPointInfo& outputBinding = outputBindings[i];
+ TContainer& outputData = outputDataContainers[i];
+
+ boost::apply_visitor([&](auto&& value)
+ {
+ if (value.size() != outputBinding.second.GetNumElements())
+ {
+ throw armnn::Exception("Output tensor has incorrect size");
+ }
+
+ armnn::Tensor outputTensor(outputBinding.second, value.data());
+ outputTensors.push_back(std::make_pair(outputBinding.first, outputTensor));
+ },
+ outputData);
+ }
+
+ return outputTensors;
+}
+
+} // namespace armnnUtils \ No newline at end of file
diff --git a/tests/InferenceModel.hpp b/tests/InferenceModel.hpp
index d2d2ca3c8e..8e463ec326 100644
--- a/tests/InferenceModel.hpp
+++ b/tests/InferenceModel.hpp
@@ -16,6 +16,7 @@
#endif
#include <HeapProfiling.hpp>
+#include <TensorIOUtils.hpp>
#include <backendsCommon/BackendRegistry.hpp>
@@ -302,75 +303,7 @@ public:
};
#endif
-template<typename TContainer>
-inline armnn::InputTensors MakeInputTensors(
- const std::vector<armnn::BindingPointInfo>& inputBindings,
- const std::vector<TContainer>& inputDataContainers)
-{
- armnn::InputTensors inputTensors;
-
- const size_t numInputs = inputBindings.size();
- if (numInputs != inputDataContainers.size())
- {
- throw armnn::Exception(boost::str(boost::format("Number of inputs does not match number of "
- "tensor data containers: %1% != %2%") % numInputs % inputDataContainers.size()));
- }
-
- for (size_t i = 0; i < numInputs; i++)
- {
- const armnn::BindingPointInfo& inputBinding = inputBindings[i];
- const TContainer& inputData = inputDataContainers[i];
-
- boost::apply_visitor([&](auto&& value)
- {
- if (value.size() != inputBinding.second.GetNumElements())
- {
- throw armnn::Exception("Input tensor has incorrect size");
- }
-
- armnn::ConstTensor inputTensor(inputBinding.second, value.data());
- inputTensors.push_back(std::make_pair(inputBinding.first, inputTensor));
- },
- inputData);
- }
-
- return inputTensors;
-}
-template<typename TContainer>
-inline armnn::OutputTensors MakeOutputTensors(
- const std::vector<armnn::BindingPointInfo>& outputBindings,
- std::vector<TContainer>& outputDataContainers)
-{
- armnn::OutputTensors outputTensors;
-
- const size_t numOutputs = outputBindings.size();
- if (numOutputs != outputDataContainers.size())
- {
- throw armnn::Exception(boost::str(boost::format("Number of outputs does not match number of "
- "tensor data containers: %1% != %2%") % numOutputs % outputDataContainers.size()));
- }
-
- for (size_t i = 0; i < numOutputs; i++)
- {
- const armnn::BindingPointInfo& outputBinding = outputBindings[i];
- TContainer& outputData = outputDataContainers[i];
-
- boost::apply_visitor([&](auto&& value)
- {
- if (value.size() != outputBinding.second.GetNumElements())
- {
- throw armnn::Exception("Output tensor has incorrect size");
- }
-
- armnn::Tensor outputTensor(outputBinding.second, value.data());
- outputTensors.push_back(std::make_pair(outputBinding.first, outputTensor));
- },
- outputData);
- }
-
- return outputTensors;
-}
template <typename IParser, typename TDataType>
class InferenceModel
@@ -615,13 +548,13 @@ private:
template<typename TContainer>
armnn::InputTensors MakeInputTensors(const std::vector<TContainer>& inputDataContainers)
{
- return ::MakeInputTensors(m_InputBindings, inputDataContainers);
+ return armnnUtils::MakeInputTensors(m_InputBindings, inputDataContainers);
}
template<typename TContainer>
armnn::OutputTensors MakeOutputTensors(std::vector<TContainer>& outputDataContainers)
{
- return ::MakeOutputTensors(m_OutputBindings, outputDataContainers);
+ return armnnUtils::MakeOutputTensors(m_OutputBindings, outputDataContainers);
}
std::chrono::high_resolution_clock::time_point GetCurrentTime()
diff --git a/tests/MultipleNetworksCifar10/MultipleNetworksCifar10.cpp b/tests/MultipleNetworksCifar10/MultipleNetworksCifar10.cpp
index 006318f73a..fec78ac805 100644
--- a/tests/MultipleNetworksCifar10/MultipleNetworksCifar10.cpp
+++ b/tests/MultipleNetworksCifar10/MultipleNetworksCifar10.cpp
@@ -168,8 +168,6 @@ int main(int argc, char* argv[])
}
Cifar10Database cifar10(dataDir);
- using TContainer = boost::variant<std::vector<float>, std::vector<int>, std::vector<unsigned char>>;
-
for (unsigned int i = 0; i < 3; ++i)
{
// Loads test case data (including image data).
@@ -193,8 +191,8 @@ int main(int argc, char* argv[])
std::vector<TContainer> outputDataContainers = { outputs[k] };
status = runtime->EnqueueWorkload(networks[k].m_Network,
- MakeInputTensors(inputBindings, inputDataContainers),
- MakeOutputTensors(outputBindings, outputDataContainers));
+ armnnUtils::MakeInputTensors(inputBindings, inputDataContainers),
+ armnnUtils::MakeOutputTensors(outputBindings, outputDataContainers));
if (status == armnn::Status::Failure)
{
BOOST_LOG_TRIVIAL(fatal) << "armnn::IRuntime: Failed to enqueue workload";