aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJim Flynn <jim.flynn@arm.com>2022-01-31 16:08:53 +0000
committerJim Flynn <jim.flynn@arm.com>2022-02-02 16:28:41 +0000
commite46659669b753411421a6a552b32b9f1d27b8b2e (patch)
tree25205a698f262c6a344db594968ad31865d3f352 /src
parente2af6f4322a1e2b8b3c391fb721a6a80c281477f (diff)
downloadarmnn-e46659669b753411421a6a552b32b9f1d27b8b2e.tar.gz
IVGCVSW-6639 Add GetParameters to IConnectableLayer
Change-Id: Id55a460ecb510f5b30235b03f54390f2c8188fc2 Signed-off-by: Jim Flynn <jim.flynn@arm.com>
Diffstat (limited to 'src')
-rw-r--r--src/armnn/Layer.cpp3
-rw-r--r--src/armnn/Layer.hpp6
-rw-r--r--src/armnn/layers/LayerWithParameters.hpp2
-rw-r--r--src/armnn/test/NetworkTests.cpp53
4 files changed, 63 insertions, 1 deletions
diff --git a/src/armnn/Layer.cpp b/src/armnn/Layer.cpp
index 98fc14b56e..88bc6d56e1 100644
--- a/src/armnn/Layer.cpp
+++ b/src/armnn/Layer.cpp
@@ -17,6 +17,9 @@
namespace armnn
{
+// Instantiate the static member variable
+NullDescriptor Layer::m_NullDescriptor;
+
void InputSlot::Insert(Layer& layer)
{
ARMNN_ASSERT(layer.GetNumOutputSlots() == 1);
diff --git a/src/armnn/Layer.hpp b/src/armnn/Layer.hpp
index f2ea6cb26d..ecfa1d9a5b 100644
--- a/src/armnn/Layer.hpp
+++ b/src/armnn/Layer.hpp
@@ -351,6 +351,8 @@ public:
m_AdditionalInfoObject = additionalInfo;
}
+ virtual const BaseDescriptor& GetParameters() const override { return m_NullDescriptor; }
+
protected:
// Graph needs access to the virtual destructor.
friend class Graph;
@@ -427,6 +429,10 @@ private:
std::list<std::string> m_RelatedLayerNames;
+ /// returned by layers which have no parameters associated with them.
+ /// has to be a member as it is returned as a const reference
+ /// declared static so that there is only ever one of them in memory
+ static NullDescriptor m_NullDescriptor;
};
// A layer user-provided data can be bound to (e.g. inputs, outputs).
diff --git a/src/armnn/layers/LayerWithParameters.hpp b/src/armnn/layers/LayerWithParameters.hpp
index 952eff66ff..2ac16c5f5f 100644
--- a/src/armnn/layers/LayerWithParameters.hpp
+++ b/src/armnn/layers/LayerWithParameters.hpp
@@ -15,7 +15,7 @@ class LayerWithParameters : public Layer
public:
using DescriptorType = Parameters;
- const Parameters& GetParameters() const { return m_Param; }
+ const Parameters& GetParameters() const override { return m_Param; }
/// Helper to serialize the layer parameters to string
/// (currently used in DotSerializer and company).
diff --git a/src/armnn/test/NetworkTests.cpp b/src/armnn/test/NetworkTests.cpp
index d4edf5da97..66dbb4ee16 100644
--- a/src/armnn/test/NetworkTests.cpp
+++ b/src/armnn/test/NetworkTests.cpp
@@ -600,4 +600,57 @@ TEST_CASE("StandInLayerSingleInputMultipleOutputsNetworkTest")
CHECK(standIn->GetOutputSlot(1).GetConnection(0) == &output1->GetInputSlot(0));
}
+TEST_CASE("ObtainConv2DDescriptorFromIConnectableLayer")
+{
+ armnn::NetworkImpl net;
+
+ unsigned int dims[] = { 10,1,1,1 };
+ std::vector<float> convWeightsData(10);
+ armnn::ConstTensor weights(armnn::TensorInfo(4, dims, armnn::DataType::Float32, 0.0f, 0, true), convWeightsData);
+
+ armnn::Convolution2dDescriptor convDesc2d;
+ convDesc2d.m_PadLeft = 2;
+ convDesc2d.m_PadRight = 3;
+ convDesc2d.m_PadTop = 4;
+ convDesc2d.m_PadBottom = 5;
+ convDesc2d.m_StrideX = 2;
+ convDesc2d.m_StrideY = 1;
+ convDesc2d.m_DilationX = 3;
+ convDesc2d.m_DilationY = 3;
+ convDesc2d.m_BiasEnabled = false;
+ convDesc2d.m_DataLayout = armnn::DataLayout::NCHW;
+ armnn::IConnectableLayer* const convLayer = net.AddConvolution2dLayer(convDesc2d,
+ weights,
+ armnn::EmptyOptional(),
+ "conv layer");
+ CHECK(convLayer);
+
+ const armnn::BaseDescriptor& descriptor = convLayer->GetParameters();
+ CHECK(descriptor.IsNull() == false);
+ const armnn::Convolution2dDescriptor& originalDescriptor =
+ static_cast<const armnn::Convolution2dDescriptor&>(descriptor);
+ CHECK(originalDescriptor.m_PadLeft == 2);
+ CHECK(originalDescriptor.m_PadRight == 3);
+ CHECK(originalDescriptor.m_PadTop == 4);
+ CHECK(originalDescriptor.m_PadBottom == 5);
+ CHECK(originalDescriptor.m_StrideX == 2);
+ CHECK(originalDescriptor.m_StrideY == 1);
+ CHECK(originalDescriptor.m_DilationX == 3);
+ CHECK(originalDescriptor.m_DilationY == 3);
+ CHECK(originalDescriptor.m_BiasEnabled == false);
+ CHECK(originalDescriptor.m_DataLayout == armnn::DataLayout::NCHW);
+}
+
+TEST_CASE("CheckNullDescriptor")
+{
+ armnn::NetworkImpl net;
+ armnn::IConnectableLayer* const addLayer = net.AddAdditionLayer();
+
+ CHECK(addLayer);
+
+ const armnn::BaseDescriptor& descriptor = addLayer->GetParameters();
+ // additional layer has no descriptor so a NullDescriptor will be returned
+ CHECK(descriptor.IsNull() == true);
+}
+
}