diff options
author | kevmay01 <kevin.may@arm.com> | 2019-01-24 14:05:09 +0000 |
---|---|---|
committer | kevmay01 <kevin.may@arm.com> | 2019-01-24 14:05:09 +0000 |
commit | 2b4d88e34ac1f965417fd236fd4786f26bae2042 (patch) | |
tree | 4518b52c6a22e33c4b467588a2843c9d5f1a9ee6 /src/armnnTfParser | |
parent | 94412aff782472be54dce4328e2ecee0225b3e97 (diff) | |
download | armnn-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-x | src/armnnTfParser/TfParser.cpp | 31 | ||||
-rw-r--r-- | src/armnnTfParser/TfParser.hpp | 6 | ||||
-rw-r--r-- | src/armnnTfParser/test/Equal.cpp | 32 | ||||
-rw-r--r-- | src/armnnTfParser/test/Greater.cpp | 32 |
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() |