aboutsummaryrefslogtreecommitdiff
path: root/src/armnnTfParser
diff options
context:
space:
mode:
authorkevmay01 <kevin.may@arm.com>2019-01-24 14:05:09 +0000
committerkevmay01 <kevin.may@arm.com>2019-01-24 14:05:09 +0000
commit2b4d88e34ac1f965417fd236fd4786f26bae2042 (patch)
tree4518b52c6a22e33c4b467588a2843c9d5f1a9ee6 /src/armnnTfParser
parent94412aff782472be54dce4328e2ecee0225b3e97 (diff)
downloadarmnn-2b4d88e34ac1f965417fd236fd4786f26bae2042.tar.gz
IVGCVSW-2503 Refactor RefElementwiseWorkload around Equal and Greater
* Remove Equal and Greater from RefElementwiseWorkload * Create RefComparisonWorkload and add Equal and Greater * Update ElementwiseFunction for different input/output types * Update TfParser to create Equal/Greater with Boolean output * Update relevant tests to check for Boolean comparison Change-Id: I299b7f2121769c960ac0c6139764a5f3c89c9c32
Diffstat (limited to 'src/armnnTfParser')
-rwxr-xr-xsrc/armnnTfParser/TfParser.cpp31
-rw-r--r--src/armnnTfParser/TfParser.hpp6
-rw-r--r--src/armnnTfParser/test/Equal.cpp32
-rw-r--r--src/armnnTfParser/test/Greater.cpp32
4 files changed, 67 insertions, 34 deletions
diff --git a/src/armnnTfParser/TfParser.cpp b/src/armnnTfParser/TfParser.cpp
index 43b0d86000..80962748ce 100755
--- a/src/armnnTfParser/TfParser.cpp
+++ b/src/armnnTfParser/TfParser.cpp
@@ -1741,6 +1741,33 @@ std::pair<armnn::IOutputSlot*, armnn::IOutputSlot*> TfParser::ProcessElementwise
return {input0Slot, input1Slot};
}
+ParsedTfOperationPtr TfParser::ProcessComparisonLayer(
+ IOutputSlot* input0Slot,
+ IOutputSlot* input1Slot,
+ IConnectableLayer* const layer,
+ const tensorflow::NodeDef& nodeDef)
+{
+ input0Slot->Connect(layer->GetInputSlot(0));
+ input1Slot->Connect(layer->GetInputSlot(1));
+
+ TensorInfo outputInfo = input0Slot->GetTensorInfo();
+ outputInfo.SetDataType(DataType::Boolean);
+ std::vector<unsigned int> outputShape;
+
+ const TensorShape& input0Shape = input0Slot->GetTensorInfo().GetShape();
+ const TensorShape& input1Shape = input1Slot->GetTensorInfo().GetShape();
+
+ for (unsigned int i = 0; i < input0Shape.GetNumDimensions(); i++)
+ {
+ outputShape.push_back(std::max(input0Shape[i], input1Shape[i]));
+ }
+
+ outputInfo.SetShape(TensorShape(input0Shape.GetNumDimensions(), outputShape.data()));
+ layer->GetOutputSlot(0).SetTensorInfo(outputInfo);
+
+ return std::make_unique<SingleLayerParsedTfOperation>(this, nodeDef, layer);
+}
+
ParsedTfOperationPtr TfParser::ProcessElementwiseLayer(
IOutputSlot* input0Slot,
IOutputSlot* input1Slot,
@@ -1812,7 +1839,7 @@ ParsedTfOperationPtr TfParser::ParseGreater(const tensorflow::NodeDef& nodeDef,
IConnectableLayer* const layer = m_Network->AddGreaterLayer(nodeDef.name().c_str());
- return ProcessElementwiseLayer(input0Slot, input1Slot, layer, nodeDef);
+ return ProcessComparisonLayer(input0Slot, input1Slot, layer, nodeDef);
}
ParsedTfOperationPtr TfParser::ParseEqual(const tensorflow::NodeDef& nodeDef,
@@ -1824,7 +1851,7 @@ ParsedTfOperationPtr TfParser::ParseEqual(const tensorflow::NodeDef& nodeDef,
IConnectableLayer* const layer = m_Network->AddEqualLayer(nodeDef.name().c_str());
- return ProcessElementwiseLayer(input0Slot, input1Slot, layer, nodeDef);
+ return ProcessComparisonLayer(input0Slot, input1Slot, layer, nodeDef);
}
ParsedTfOperationPtr TfParser::ParseMinimum(const tensorflow::NodeDef& nodeDef,
diff --git a/src/armnnTfParser/TfParser.hpp b/src/armnnTfParser/TfParser.hpp
index 9a7d7827c3..2b809419de 100644
--- a/src/armnnTfParser/TfParser.hpp
+++ b/src/armnnTfParser/TfParser.hpp
@@ -187,6 +187,12 @@ private:
std::pair<armnn::IOutputSlot*, armnn::IOutputSlot*> ProcessElementwiseInputSlots(
const tensorflow::NodeDef& nodeDef, const std::string& layerName);
+ ParsedTfOperationPtr ProcessComparisonLayer(
+ armnn::IOutputSlot* input0Slot,
+ armnn::IOutputSlot* input1Slot,
+ armnn::IConnectableLayer* const layer,
+ const tensorflow::NodeDef& nodeDef);
+
ParsedTfOperationPtr ProcessElementwiseLayer(
armnn::IOutputSlot* input0Slot,
armnn::IOutputSlot* input1Slot,
diff --git a/src/armnnTfParser/test/Equal.cpp b/src/armnnTfParser/test/Equal.cpp
index 43a1c6abb5..2dce822b0f 100644
--- a/src/armnnTfParser/test/Equal.cpp
+++ b/src/armnnTfParser/test/Equal.cpp
@@ -91,9 +91,9 @@ struct EqualTwoByTwo : public EqualFixtureAutoSetup
BOOST_FIXTURE_TEST_CASE(ParseEqualTwoByTwo, EqualTwoByTwo)
{
- RunTest<2>({ { "input0", { 1.0f, 2.0f, 3.0f, 2.0f } },
- { "input1", { 1.0f, 5.0f, 2.0f, 2.0f } } },
- { { "output", { 1.0f, 0.0f, 0.0f, 1.0f } } });
+ RunComparisonTest<2>({ { "input0", { 1.0f, 2.0f, 3.0f, 2.0f } },
+ { "input1", { 1.0f, 5.0f, 2.0f, 2.0f } } },
+ { { "output", { 1, 0, 0, 1 } } });
}
struct EqualBroadcast1DAnd4D : public EqualFixtureAutoSetup
@@ -103,9 +103,9 @@ struct EqualBroadcast1DAnd4D : public EqualFixtureAutoSetup
BOOST_FIXTURE_TEST_CASE(ParseEqualBroadcast1DToTwoByTwo, EqualBroadcast1DAnd4D)
{
- RunTest<4>({ { "input0", { 2.0f } },
- { "input1", { 1.0f, 2.0f, 3.0f, 2.0f } } },
- { { "output", { 0.0f, 1.0f, 0.0f, 1.0f } } });
+ RunComparisonTest<4>({ { "input0", { 2.0f } },
+ { "input1", { 1.0f, 2.0f, 3.0f, 2.0f } } },
+ { { "output", { 0, 1, 0, 1 } } });
}
struct EqualBroadcast4DAnd1D : public EqualFixtureAutoSetup
@@ -115,9 +115,9 @@ struct EqualBroadcast4DAnd1D : public EqualFixtureAutoSetup
BOOST_FIXTURE_TEST_CASE(ParseEqualBroadcast4DAnd1D, EqualBroadcast4DAnd1D)
{
- RunTest<4>({ { "input0", { 1.0f, 2.0f, 3.0f, 2.0f } },
- { "input1", { 3.0f } } },
- { { "output", { 0.0f, 0.0f, 1.0f, 0.0f } } });
+ RunComparisonTest<4>({ { "input0", { 1.0f, 2.0f, 3.0f, 2.0f } },
+ { "input1", { 3.0f } } },
+ { { "output", { 0, 0, 1, 0 } } });
}
struct EqualMultiDimBroadcast : public EqualFixtureAutoSetup
@@ -127,13 +127,13 @@ struct EqualMultiDimBroadcast : public EqualFixtureAutoSetup
BOOST_FIXTURE_TEST_CASE(ParseEqualMultiDimBroadcast, EqualMultiDimBroadcast)
{
- RunTest<4>({ { "input0", { 1.0f, 2.0f } },
- { "input1", { 1.0f, 2.0f, 3.0f,
- 3.0f, 2.0f, 2.0f } } },
- { { "output", { 1.0f, 0.0f, 0.0f,
- 0.0f, 1.0f, 0.0f,
- 0.0f, 0.0f, 0.0f,
- 0.0f, 1.0f, 1.0f } } });
+ RunComparisonTest<4>({ { "input0", { 1.0f, 2.0f } },
+ { "input1", { 1.0f, 2.0f, 3.0f,
+ 3.0f, 2.0f, 2.0f } } },
+ { { "output", { 1, 0, 0,
+ 0, 1, 0,
+ 0, 0, 0,
+ 0, 1, 1 } } });
}
BOOST_AUTO_TEST_SUITE_END()
diff --git a/src/armnnTfParser/test/Greater.cpp b/src/armnnTfParser/test/Greater.cpp
index f11c199599..d1e793987b 100644
--- a/src/armnnTfParser/test/Greater.cpp
+++ b/src/armnnTfParser/test/Greater.cpp
@@ -91,9 +91,9 @@ struct GreaterFixtureTwoByTwo : public GreaterFixtureAutoSetup
BOOST_FIXTURE_TEST_CASE(ParseGreaterTwoByTwo, GreaterFixtureTwoByTwo)
{
- RunTest<2>({ { "input0", { 1.0f, 2.0f, 3.0f, 4.0f} },
- { "input1", { 1.0f, 5.0f, 2.0f, 2.0f} } },
- { { "output", { 0.0f, 0.0f, 1.0f, 1.0f} } });
+ RunComparisonTest<2>({ { "input0", { 1.0f, 2.0f, 3.0f, 4.0f} },
+ { "input1", { 1.0f, 5.0f, 2.0f, 2.0f} } },
+ { { "output", { 0, 0, 1, 1} } });
}
struct GreaterBroadcast1DAnd4D : public GreaterFixtureAutoSetup
@@ -103,9 +103,9 @@ struct GreaterBroadcast1DAnd4D : public GreaterFixtureAutoSetup
BOOST_FIXTURE_TEST_CASE(ParseGreaterBroadcast1DToTwoByTwo, GreaterBroadcast1DAnd4D)
{
- RunTest<4>({ { "input0", { 2.0f } },
- { "input1", { 1.0f, 2.0f, 3.0f, 2.0f } } },
- { { "output", { 1.0f, 0.0f, 0.0f, 0.0f } } });
+ RunComparisonTest<4>({ { "input0", { 2.0f } },
+ { "input1", { 1.0f, 2.0f, 3.0f, 2.0f } } },
+ { { "output", { 1, 0, 0, 0 } } });
}
struct GreaterBroadcast4DAnd1D : public GreaterFixtureAutoSetup
@@ -115,9 +115,9 @@ struct GreaterBroadcast4DAnd1D : public GreaterFixtureAutoSetup
BOOST_FIXTURE_TEST_CASE(ParseGreaterBroadcast4DAnd1D, GreaterBroadcast4DAnd1D)
{
- RunTest<4>({ { "input0", { 1.0f, 2.0f, 3.0f, 2.0f } },
- { "input1", { 3.0f } } },
- { { "output", { 0.0f, 0.0f, 0.0f, 0.0f } } });
+ RunComparisonTest<4>({ { "input0", { 1.0f, 2.0f, 3.0f, 2.0f } },
+ { "input1", { 3.0f } } },
+ { { "output", { 0, 0, 0, 0 } } });
}
struct GreaterMultiDimBroadcast : public GreaterFixtureAutoSetup
@@ -127,13 +127,13 @@ struct GreaterMultiDimBroadcast : public GreaterFixtureAutoSetup
BOOST_FIXTURE_TEST_CASE(ParseGreaterMultiDimBroadcast, GreaterMultiDimBroadcast)
{
- RunTest<4>({ { "input0", { 1.0f, 2.0f } },
- { "input1", { 1.0f, 2.0f, 3.0f,
- 3.0f, 2.0f, 2.0f } } },
- { { "output", { 0.0f, 0.0f, 0.0f,
- 1.0f, 0.0f, 0.0f,
- 0.0f, 0.0f, 0.0f,
- 0.0f, 0.0f, 0.0f } } });
+ RunComparisonTest<4>({ { "input0", { 1.0f, 2.0f } },
+ { "input1", { 1.0f, 2.0f, 3.0f,
+ 3.0f, 2.0f, 2.0f } } },
+ { { "output", { 0, 0, 0,
+ 1, 0, 0,
+ 0, 0, 0,
+ 0, 0, 0 } } });
}
BOOST_AUTO_TEST_SUITE_END()