diff options
author | Finn Williams <Finn.Williams@arm.com> | 2020-06-10 15:53:46 +0100 |
---|---|---|
committer | Finn Williams <Finn.Williams@arm.com> | 2020-07-06 21:50:50 +0100 |
commit | 2605b236d103e1ba27069e0d668599042a4761af (patch) | |
tree | dc0a408acb5749a1f51544fd5857452377d05aab /src/armnn | |
parent | c5789ca2e432075e2c92e7e0d99139c5329280e6 (diff) | |
download | armnn-2605b236d103e1ba27069e0d668599042a4761af.tar.gz |
IVGCVSW-4624 Add a RANK Reference Implementation
* Add Rank front end
* Add Rank reference implementation
* Add Rank serialization support
* Add Scalar serialization support
Signed-off-by: Finn Williams <Finn.Williams@arm.com>
Change-Id: I06e4a468c2a84e79bae2e6c5348596bbbf853b4b
Diffstat (limited to 'src/armnn')
-rw-r--r-- | src/armnn/InternalTypes.hpp | 3 | ||||
-rw-r--r-- | src/armnn/LayersFwd.hpp | 2 | ||||
-rw-r--r-- | src/armnn/Network.cpp | 5 | ||||
-rw-r--r-- | src/armnn/Network.hpp | 2 | ||||
-rw-r--r-- | src/armnn/layers/RankLayer.cpp | 47 | ||||
-rw-r--r-- | src/armnn/layers/RankLayer.hpp | 34 | ||||
-rw-r--r-- | src/armnn/test/TestNameOnlyLayerVisitor.cpp | 1 | ||||
-rw-r--r-- | src/armnn/test/TestNameOnlyLayerVisitor.hpp | 1 |
8 files changed, 94 insertions, 1 deletions
diff --git a/src/armnn/InternalTypes.hpp b/src/armnn/InternalTypes.hpp index e2ad7a2ea5..fc35d35ef9 100644 --- a/src/armnn/InternalTypes.hpp +++ b/src/armnn/InternalTypes.hpp @@ -1,5 +1,5 @@ // -// Copyright © 2017 Arm Ltd. All rights reserved. +// Copyright © 2017 Arm Ltd and Contributors. All rights reserved. // SPDX-License-Identifier: MIT // #pragma once @@ -60,6 +60,7 @@ X(Quantize) \ X(QuantizedLstm) \ X(Reshape) \ + X(Rank) \ X(Resize) \ X(Slice) \ X(Softmax) \ diff --git a/src/armnn/LayersFwd.hpp b/src/armnn/LayersFwd.hpp index 575c3e5c68..fda00df7cc 100644 --- a/src/armnn/LayersFwd.hpp +++ b/src/armnn/LayersFwd.hpp @@ -53,6 +53,7 @@ #include "layers/QuantizeLayer.hpp" #include "layers/QLstmLayer.hpp" #include "layers/QuantizedLstmLayer.hpp" +#include "layers/RankLayer.hpp" #include "layers/ReshapeLayer.hpp" #include "layers/ResizeLayer.hpp" #include "layers/SliceLayer.hpp" @@ -142,6 +143,7 @@ DECLARE_LAYER(Prelu) DECLARE_LAYER(Quantize) DECLARE_LAYER(QLstm) DECLARE_LAYER(QuantizedLstm) +DECLARE_LAYER(Rank) DECLARE_LAYER(Reshape) DECLARE_LAYER(Resize) DECLARE_LAYER(Slice) diff --git a/src/armnn/Network.cpp b/src/armnn/Network.cpp index 6c7314feb2..e0607bda33 100644 --- a/src/armnn/Network.cpp +++ b/src/armnn/Network.cpp @@ -1460,6 +1460,11 @@ IConnectableLayer* Network::AddBatchNormalizationLayer(const BatchNormalizationD return layer; } +IConnectableLayer* Network::AddRankLayer(const char* name) +{ + return m_Graph->AddLayer<RankLayer>(name); +} + IConnectableLayer* Network::AddResizeBilinearLayer(const ResizeBilinearDescriptor& descriptor, const char* name) { diff --git a/src/armnn/Network.hpp b/src/armnn/Network.hpp index 53bf3115f1..6bc0ac7650 100644 --- a/src/armnn/Network.hpp +++ b/src/armnn/Network.hpp @@ -160,6 +160,8 @@ public: const ConstTensor& gamma, const char* name = nullptr) override; + IConnectableLayer* AddRankLayer(const char* name = nullptr) override; + ARMNN_DEPRECATED_MSG("Use AddResizeLayer instead") IConnectableLayer* AddResizeBilinearLayer(const ResizeBilinearDescriptor& resizeDesc, const char* name = nullptr) override; diff --git a/src/armnn/layers/RankLayer.cpp b/src/armnn/layers/RankLayer.cpp new file mode 100644 index 0000000000..f1a24b1633 --- /dev/null +++ b/src/armnn/layers/RankLayer.cpp @@ -0,0 +1,47 @@ +// +// Copyright © 2020 Arm Ltd and Contributors. All rights reserved. +// SPDX-License-Identifier: MIT +// + +#include "RankLayer.hpp" + +#include "LayerCloneBase.hpp" + +#include <backendsCommon/WorkloadData.hpp> +#include <backendsCommon/WorkloadFactory.hpp> + +namespace armnn +{ + +RankLayer::RankLayer(const char* name) + : Layer(1, 1, LayerType::Rank, name) +{} + +std::unique_ptr<IWorkload> RankLayer::CreateWorkload(const IWorkloadFactory& factory) const +{ + RankQueueDescriptor descriptor; + return factory.CreateRank(descriptor, PrepInfoAndDesc(descriptor)); +} + +Layer* RankLayer::Clone(Graph& graph) const +{ + RankLayer* clone = CloneBase<RankLayer>(graph, GetName()); + return clone; +} + +void RankLayer::ValidateTensorShapesFromInputs(ShapeInferenceMethod shapeInferenceMethod) +{ + IgnoreUnused(shapeInferenceMethod); + VerifyLayerConnections(1, CHECK_LOCATION()); + + ConditionalThrowIfNotEqual<LayerValidationException>( + "Rank: TensorShape set on OutputSlot[0] does not match the inferred shape.", + GetOutputSlot(0).GetTensorInfo().GetShape(), {TensorShape{Dimensionality::Scalar}}); +} + +void RankLayer::Accept(ILayerVisitor& visitor) const +{ + visitor.VisitRankLayer(this, GetName()); +} + +} //namespace armnn
\ No newline at end of file diff --git a/src/armnn/layers/RankLayer.hpp b/src/armnn/layers/RankLayer.hpp new file mode 100644 index 0000000000..e160d60354 --- /dev/null +++ b/src/armnn/layers/RankLayer.hpp @@ -0,0 +1,34 @@ +// +// Copyright © 2020 Arm Ltd and Contributors. All rights reserved. +// SPDX-License-Identifier: MIT +// + +#pragma once + +#include <Layer.hpp> + +namespace armnn +{ + +class RankLayer : public Layer +{ + public: + /// Makes a workload for the Rank type. + /// @param [in] factory The workload factory which will create the workload. + /// @return A pointer to the created workload, or nullptr if not created. + virtual std::unique_ptr<IWorkload> CreateWorkload(const IWorkloadFactory& factory) const override; + + Layer* Clone(Graph& graph) const override; + + void ValidateTensorShapesFromInputs(ShapeInferenceMethod shapeInferenceMethod) override; + + void Accept(ILayerVisitor& visitor) const override; + + protected: + RankLayer(const char* name); + ~RankLayer() = default; +}; + +} //namespace armnn + + diff --git a/src/armnn/test/TestNameOnlyLayerVisitor.cpp b/src/armnn/test/TestNameOnlyLayerVisitor.cpp index 945afa8ff5..994375d435 100644 --- a/src/armnn/test/TestNameOnlyLayerVisitor.cpp +++ b/src/armnn/test/TestNameOnlyLayerVisitor.cpp @@ -48,6 +48,7 @@ TEST_SUITE_NAME_ONLY_LAYER_VISITOR(Minimum) TEST_SUITE_NAME_ONLY_LAYER_VISITOR(Multiplication) TEST_SUITE_NAME_ONLY_LAYER_VISITOR(Prelu) TEST_SUITE_NAME_ONLY_LAYER_VISITOR(Quantize) +TEST_SUITE_NAME_ONLY_LAYER_VISITOR(Rank) TEST_SUITE_NAME_ONLY_LAYER_VISITOR(Subtraction) TEST_SUITE_NAME_ONLY_LAYER_VISITOR(Switch) diff --git a/src/armnn/test/TestNameOnlyLayerVisitor.hpp b/src/armnn/test/TestNameOnlyLayerVisitor.hpp index 0e1ea8eac7..519cbbacc6 100644 --- a/src/armnn/test/TestNameOnlyLayerVisitor.hpp +++ b/src/armnn/test/TestNameOnlyLayerVisitor.hpp @@ -35,5 +35,6 @@ DECLARE_TEST_NAME_ONLY_LAYER_VISITOR_CLASS(Minimum) DECLARE_TEST_NAME_ONLY_LAYER_VISITOR_CLASS(Multiplication) DECLARE_TEST_NAME_ONLY_LAYER_VISITOR_CLASS(Prelu) DECLARE_TEST_NAME_ONLY_LAYER_VISITOR_CLASS(Quantize) +DECLARE_TEST_NAME_ONLY_LAYER_VISITOR_CLASS(Rank) DECLARE_TEST_NAME_ONLY_LAYER_VISITOR_CLASS(Subtraction) DECLARE_TEST_NAME_ONLY_LAYER_VISITOR_CLASS(Switch) |