aboutsummaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorAron Virginas-Tar <Aron.Virginas-Tar@arm.com>2019-06-20 14:28:19 +0100
committerMatteo Martincigh <matteo.martincigh@arm.com>2019-06-21 09:54:30 +0000
commit639fb0437d1a5a8a6ea737fed5a16b554dfffead (patch)
tree5b89adc18c1a071d23747a28dcddcfca41e4d815 /include
parent713e95c8c531c5cecd804a7cecc8af745917315c (diff)
downloadarmnn-639fb0437d1a5a8a6ea737fed5a16b554dfffead.tar.gz
IVGCVSW-3319 Add frontend support for TransposeConvolution2d Layer
Signed-off-by: Aron Virginas-Tar <Aron.Virginas-Tar@arm.com> Change-Id: Ic06f63f1eff255e697facf319e2ac4c83d782e7c
Diffstat (limited to 'include')
-rw-r--r--include/armnn/Descriptors.hpp32
-rw-r--r--include/armnn/DescriptorsFwd.hpp1
-rw-r--r--include/armnn/ILayerSupport.hpp9
-rw-r--r--include/armnn/ILayerVisitor.hpp15
-rw-r--r--include/armnn/INetwork.hpp11
-rw-r--r--include/armnn/LayerSupport.hpp10
-rw-r--r--include/armnn/LayerVisitorBase.hpp9
7 files changed, 85 insertions, 2 deletions
diff --git a/include/armnn/Descriptors.hpp b/include/armnn/Descriptors.hpp
index dd1991d569..2fda8c1d06 100644
--- a/include/armnn/Descriptors.hpp
+++ b/include/armnn/Descriptors.hpp
@@ -684,4 +684,36 @@ struct PreCompiledDescriptor
unsigned int m_NumOutputSlots;
};
+/// A TransposeConvolution2dDescriptor for the TransposeConvolution2dLayer.
+struct TransposeConvolution2dDescriptor
+{
+ TransposeConvolution2dDescriptor() :
+ m_PadLeft(0),
+ m_PadRight(0),
+ m_PadTop(0),
+ m_PadBottom(0),
+ m_StrideX(0),
+ m_StrideY(0),
+ m_BiasEnabled(false),
+ m_DataLayout(DataLayout::NCHW)
+ {}
+
+ /// Padding left value in the width dimension.
+ uint32_t m_PadLeft;
+ /// Padding right value in the width dimension.
+ uint32_t m_PadRight;
+ /// Padding top value in the height dimension.
+ uint32_t m_PadTop;
+ /// Padding bottom value in the height dimension.
+ uint32_t m_PadBottom;
+ /// Stride value when proceeding through input for the width dimension.
+ uint32_t m_StrideX;
+ /// Stride value when proceeding through input for the height dimension.
+ uint32_t m_StrideY;
+ /// Enable/disable bias.
+ bool m_BiasEnabled;
+ /// The data layout to be used (NCHW, NHWC).
+ DataLayout m_DataLayout;
+};
+
} // namespace armnn \ No newline at end of file
diff --git a/include/armnn/DescriptorsFwd.hpp b/include/armnn/DescriptorsFwd.hpp
index 1c75c253ed..b814d48699 100644
--- a/include/armnn/DescriptorsFwd.hpp
+++ b/include/armnn/DescriptorsFwd.hpp
@@ -30,6 +30,7 @@ struct SoftmaxDescriptor;
struct SpaceToBatchNdDescriptor;
struct SpaceToDepthDescriptor;
struct StridedSliceDescriptor;
+struct TransposeConvolution2dDescriptor;
struct ViewsDescriptor;
// MergerDescriptor is deprecated use ConcatDescriptor instead
diff --git a/include/armnn/ILayerSupport.hpp b/include/armnn/ILayerSupport.hpp
index 324a9f5a2d..eb581d3aaa 100644
--- a/include/armnn/ILayerSupport.hpp
+++ b/include/armnn/ILayerSupport.hpp
@@ -295,6 +295,15 @@ public:
const TensorInfo& output0,
const TensorInfo& output1,
Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0;
+
+ virtual bool IsTransposeConvolution2dSupported(
+ const TensorInfo& input,
+ const TensorInfo& output,
+ const TransposeConvolution2dDescriptor& descriptor,
+ const TensorInfo& weights,
+ const Optional<TensorInfo>& biases,
+ Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const = 0;
+
}; // class ILayerSupport
using ILayerSupportSharedPtr = std::shared_ptr<ILayerSupport>;
diff --git a/include/armnn/ILayerVisitor.hpp b/include/armnn/ILayerVisitor.hpp
index 9519c8b0c1..c98760c7cd 100644
--- a/include/armnn/ILayerVisitor.hpp
+++ b/include/armnn/ILayerVisitor.hpp
@@ -363,7 +363,7 @@ public:
/// Function a strided slice layer should call back to when its Accept(ILayerVisitor&) function is invoked.
/// @param layer - pointer to the layer which is calling back to this visit function.
- /// @param StridedSliceDescriptor - Parameters for the strided slice operation.
+ /// @param stridedSliceDescriptor - Parameters for the strided slice operation.
/// @param name - Optional name for the layer.
virtual void VisitStridedSliceLayer(const IConnectableLayer* layer,
const StridedSliceDescriptor& stridedSliceDescriptor,
@@ -381,6 +381,19 @@ public:
virtual void VisitSwitchLayer(const IConnectableLayer* layer,
const char* name = nullptr) = 0;
+ /// Function that a 2D transpose convolution layer should call back to when its Accept(ILayerVisitor&)
+ /// function is invoked.
+ /// @param layer - pointer to the layer which is calling back to this visit function.
+ /// @param descriptor - Description of the 2D transpose convolution layer.
+ /// @param weights - Tensor for the weights data.
+ /// @param biases - Optional tensor for the bias data.
+ /// @param name - Optional name for the layer.
+ virtual void VisitTransposeConvolution2dLayer(const IConnectableLayer* layer,
+ const TransposeConvolution2dDescriptor& descriptor,
+ const ConstTensor& weights,
+ const Optional<ConstTensor>& biases,
+ const char* name = nullptr) = 0;
+
virtual void StartVisit() {}
virtual void FinishVisit() {}
diff --git a/include/armnn/INetwork.hpp b/include/armnn/INetwork.hpp
index cacca33caf..af67764fc9 100644
--- a/include/armnn/INetwork.hpp
+++ b/include/armnn/INetwork.hpp
@@ -432,6 +432,17 @@ public:
/// @return - Interface for configuring the layer.
virtual IConnectableLayer* AddPreluLayer(const char* name = nullptr) = 0;
+ /// Adds a 2D transpose convolution layer to the network.
+ /// @param descriptor - Description of the 2D transpose convolution layer.
+ /// @param weights - Tensor for the weights data.
+ /// @param biases - Optional tensor for the bias data.
+ /// @param name - Optional name for the layer.
+ /// @return - Interface for configuring the layer.
+ virtual IConnectableLayer* AddTransposeConvolution2dLayer(const TransposeConvolution2dDescriptor& descriptor,
+ const ConstTensor& weights,
+ const Optional<ConstTensor>& biases,
+ const char* name = nullptr) = 0;
+
virtual void Accept(ILayerVisitor& visitor) const = 0;
protected:
diff --git a/include/armnn/LayerSupport.hpp b/include/armnn/LayerSupport.hpp
index 673193f330..f0dca7709e 100644
--- a/include/armnn/LayerSupport.hpp
+++ b/include/armnn/LayerSupport.hpp
@@ -381,4 +381,14 @@ bool IsSwitchSupported(const BackendId& backend,
const TensorInfo& output1,
char* reasonIfUnsupported = nullptr,
size_t reasonIfUnsupportedMaxLength = 1024);
+
+/// Deprecated in favor of IBackend and ILayerSupport interfaces
+bool IsTransposeConvolution2dSupported(const BackendId& backend,
+ const TensorInfo& input,
+ const TensorInfo& output,
+ const TransposeConvolution2dDescriptor& descriptor,
+ const TensorInfo& weights,
+ const Optional<TensorInfo>& biases,
+ char* reasonIfUnsupported = nullptr,
+ size_t reasonIfUnsupportedMaxLength = 1024);
}
diff --git a/include/armnn/LayerVisitorBase.hpp b/include/armnn/LayerVisitorBase.hpp
index 48fc2bbb0b..8406efe068 100644
--- a/include/armnn/LayerVisitorBase.hpp
+++ b/include/armnn/LayerVisitorBase.hpp
@@ -193,6 +193,13 @@ public:
void VisitSwitchLayer(const IConnectableLayer*,
const char*) override { DefaultPolicy::Apply(__func__); }
+
+ void VisitTransposeConvolution2dLayer(const IConnectableLayer*,
+ const TransposeConvolution2dDescriptor&,
+ const ConstTensor&,
+ const Optional<ConstTensor>&,
+ const char*) override { DefaultPolicy::Apply(__func__); }
+
};
-} //namespace armnn
+} // namespace armnn