aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/armnn/InternalTypes.hpp1
-rw-r--r--src/armnn/LayerSupport.cpp11
-rw-r--r--src/armnn/LayersFwd.hpp2
-rw-r--r--src/armnn/Network.cpp5
-rw-r--r--src/armnn/Network.hpp2
-rw-r--r--src/armnn/layers/PadLayer.cpp45
-rw-r--r--src/armnn/layers/PadLayer.hpp29
-rw-r--r--src/backends/WorkloadFactory.cpp13
-rw-r--r--src/backends/test/IsLayerSupportedTestImpl.hpp2
9 files changed, 110 insertions, 0 deletions
diff --git a/src/armnn/InternalTypes.hpp b/src/armnn/InternalTypes.hpp
index 13ab2bc7cd..1a612e9426 100644
--- a/src/armnn/InternalTypes.hpp
+++ b/src/armnn/InternalTypes.hpp
@@ -35,6 +35,7 @@ enum class LayerType
Multiplication,
Normalization,
Output,
+ Pad,
Permute,
Pooling2d,
Reshape,
diff --git a/src/armnn/LayerSupport.cpp b/src/armnn/LayerSupport.cpp
index 7ed56c5c5d..9bbe17983b 100644
--- a/src/armnn/LayerSupport.cpp
+++ b/src/armnn/LayerSupport.cpp
@@ -355,4 +355,15 @@ bool IsMeanSupported(Compute compute,
FORWARD_LAYER_SUPPORT_FUNC(compute, IsMeanSupported, input, output, descriptor);
}
+bool IsPadSupported(Compute compute,
+ const TensorInfo& input,
+ const TensorInfo& output,
+ const PadDescriptor& descriptor,
+ char* reasonIfUnsupported,
+ size_t reasonIfUnsupportedMaxLength)
+{
+ CopyErrorMessage(reasonIfUnsupported, "Not implemented", reasonIfUnsupportedMaxLength);
+ return false;
+}
+
}
diff --git a/src/armnn/LayersFwd.hpp b/src/armnn/LayersFwd.hpp
index c9ee9dbfec..8321be447d 100644
--- a/src/armnn/LayersFwd.hpp
+++ b/src/armnn/LayersFwd.hpp
@@ -27,6 +27,7 @@
#include "layers/MultiplicationLayer.hpp"
#include "layers/NormalizationLayer.hpp"
#include "layers/OutputLayer.hpp"
+#include "layers/PadLayer.hpp"
#include "layers/PermuteLayer.hpp"
#include "layers/Pooling2dLayer.hpp"
#include "layers/ReshapeLayer.hpp"
@@ -83,6 +84,7 @@ DECLARE_LAYER(Merger)
DECLARE_LAYER(Multiplication)
DECLARE_LAYER(Normalization)
DECLARE_LAYER(Output)
+DECLARE_LAYER(Pad)
DECLARE_LAYER(Permute)
DECLARE_LAYER(Pooling2d)
DECLARE_LAYER(Reshape)
diff --git a/src/armnn/Network.cpp b/src/armnn/Network.cpp
index 22d80d3cd4..4f5e2974ed 100644
--- a/src/armnn/Network.cpp
+++ b/src/armnn/Network.cpp
@@ -599,6 +599,11 @@ IConnectableLayer* Network::AddMeanLayer(const MeanDescriptor& meanDescriptor, c
return m_Graph->AddLayer<MeanLayer>(meanDescriptor,name);
}
+IConnectableLayer* Network::AddPadLayer(const PadDescriptor& padDescriptor, const char* name)
+{
+ return m_Graph->AddLayer<PadLayer>(padDescriptor,name);
+}
+
OptimizedNetwork::OptimizedNetwork(std::unique_ptr<Graph> graph)
: m_Graph(std::move(graph))
{
diff --git a/src/armnn/Network.hpp b/src/armnn/Network.hpp
index 14112426c6..ea4284e38f 100644
--- a/src/armnn/Network.hpp
+++ b/src/armnn/Network.hpp
@@ -119,6 +119,8 @@ public:
IConnectableLayer* AddMeanLayer(const MeanDescriptor& meanDescriptor, const char* name = nullptr) override;
+ IConnectableLayer* AddPadLayer(const PadDescriptor& padDescriptor, const char* name = nullptr) override;
+
private:
IConnectableLayer* AddFullyConnectedLayerImpl(const FullyConnectedDescriptor& fullyConnectedDescriptor,
const ConstTensor& weights,
diff --git a/src/armnn/layers/PadLayer.cpp b/src/armnn/layers/PadLayer.cpp
new file mode 100644
index 0000000000..6a1e9150b8
--- /dev/null
+++ b/src/armnn/layers/PadLayer.cpp
@@ -0,0 +1,45 @@
+//
+// Copyright © 2017 Arm Ltd. All rights reserved.
+// SPDX-License-Identifier: MIT
+//
+
+#include "PadLayer.hpp"
+#include "LayerCloneBase.hpp"
+
+#include "backends/CpuTensorHandle.hpp"
+#include "backends/WorkloadData.hpp"
+#include "backends/WorkloadFactory.hpp"
+
+#include <cstring>
+
+namespace armnn
+{
+
+PadLayer::PadLayer(const armnn::PadDescriptor& param, const char* name)
+ : LayerWithParameters(1, 1, LayerType::Pad, param, name)
+{}
+
+std::unique_ptr<IWorkload> PadLayer::CreateWorkload(const armnn::Graph& graph,
+ const armnn::IWorkloadFactory& factory) const
+{
+ PadQueueDescriptor descriptor;
+ descriptor.m_Parameters.m_PadList = m_Param.m_PadList;
+
+ return factory.CreatePad(descriptor, PrepInfoAndDesc(descriptor, graph));
+}
+
+PadLayer* PadLayer::Clone(Graph& graph) const
+{
+ auto layer = CloneBase<PadLayer>(graph, m_Param, GetName());
+
+ layer->m_Param.m_PadList = m_Param.m_PadList;
+
+ return std::move(layer);
+}
+
+void PadLayer::ValidateTensorShapesFromInputs()
+{
+ return;
+}
+
+} // namespace armnn \ No newline at end of file
diff --git a/src/armnn/layers/PadLayer.hpp b/src/armnn/layers/PadLayer.hpp
new file mode 100644
index 0000000000..e53a90c9de
--- /dev/null
+++ b/src/armnn/layers/PadLayer.hpp
@@ -0,0 +1,29 @@
+//
+// Copyright © 2017 Arm Ltd. All rights reserved.
+// SPDX-License-Identifier: MIT
+//
+
+#pragma once
+
+#include "LayerWithParameters.hpp"
+
+namespace armnn
+{
+
+class PadLayer : public LayerWithParameters<PadDescriptor>
+{
+public:
+ virtual std::unique_ptr<IWorkload> CreateWorkload(const Graph& graph,
+ const IWorkloadFactory& factory) const override;
+
+ PadLayer* Clone(Graph& graph) const override;
+
+ void ValidateTensorShapesFromInputs() override;
+
+protected:
+ PadLayer(const PadDescriptor& param, const char* name);
+ ~PadLayer() = default;
+
+};
+
+} \ No newline at end of file
diff --git a/src/backends/WorkloadFactory.cpp b/src/backends/WorkloadFactory.cpp
index 773a8c1a18..2666e7f354 100644
--- a/src/backends/WorkloadFactory.cpp
+++ b/src/backends/WorkloadFactory.cpp
@@ -472,6 +472,19 @@ bool IWorkloadFactory::IsLayerSupported(Compute compute, const Layer& layer, boo
cLayer->GetParameters(), reason, reasonCapacity);
break;
}
+ case LayerType::Pad:
+ {
+ auto cLayer = boost::polymorphic_downcast<const PadLayer*>(&layer);
+ const TensorInfo& input = layer.GetInputSlot(0).GetConnection()->GetTensorInfo();
+ const TensorInfo& output = layer.GetOutputSlot(0).GetTensorInfo();
+ result = IsPadSupported(compute,
+ OverrideDataType(input, dataType),
+ OverrideDataType(output, dataType),
+ cLayer->GetParameters(),
+ reason,
+ reasonCapacity);
+ break;
+ }
case LayerType::Pooling2d:
{
auto cLayer = boost::polymorphic_downcast<const Pooling2dLayer*>(&layer);
diff --git a/src/backends/test/IsLayerSupportedTestImpl.hpp b/src/backends/test/IsLayerSupportedTestImpl.hpp
index c5389df06e..e166513fc6 100644
--- a/src/backends/test/IsLayerSupportedTestImpl.hpp
+++ b/src/backends/test/IsLayerSupportedTestImpl.hpp
@@ -338,6 +338,8 @@ DECLARE_LAYER_POLICY_2_PARAM(Normalization)
DECLARE_LAYER_POLICY_CUSTOM_PARAM(Output, armnn::LayerBindingId)
+DECLARE_LAYER_POLICY_2_PARAM(Pad)
+
DECLARE_LAYER_POLICY_2_PARAM(Permute)
DECLARE_LAYER_POLICY_2_PARAM(Pooling2d)