From 430b5d824a17ddfb31bb29c18407e45e0def958c Mon Sep 17 00:00:00 2001 From: Conor Kennedy Date: Wed, 14 Nov 2018 15:28:28 +0000 Subject: IVGCVSW-2086: Add StridedSlice layer & corresponding no-op factory implementations Change-Id: I906dcb8b4c9b491bf3a661f208c09d0ea1c0fa35 --- include/armnn/Descriptors.hpp | 33 +++++++++++++++++++++++++++++++++ include/armnn/DescriptorsFwd.hpp | 1 + include/armnn/ILayerSupport.hpp | 5 +++++ include/armnn/INetwork.hpp | 7 +++++++ include/armnn/LayerSupport.hpp | 8 ++++++++ 5 files changed, 54 insertions(+) (limited to 'include') diff --git a/include/armnn/Descriptors.hpp b/include/armnn/Descriptors.hpp index 396e427ee4..f8dd18ab8a 100644 --- a/include/armnn/Descriptors.hpp +++ b/include/armnn/Descriptors.hpp @@ -421,4 +421,37 @@ struct PadDescriptor std::vector> m_PadList; }; +struct StridedSliceDescriptor +{ + StridedSliceDescriptor() + : m_DataLayout(DataLayout::NCHW) + {} + + StridedSliceDescriptor(const std::vector& begin, + const std::vector& end, + const std::vector& stride) + : m_Begin(begin) + , m_End(end) + , m_Stride(stride) + , m_BeginMask(0) + , m_EndMask(0) + , m_ShrinkAxisMask(0) + , m_EllipsisMask(0) + , m_NewAxisMask(0) + , m_DataLayout(DataLayout::NCHW) + {} + + std::vector m_Begin; + std::vector m_End; + std::vector m_Stride; + + int32_t m_BeginMask; + int32_t m_EndMask; + int32_t m_ShrinkAxisMask; + int32_t m_EllipsisMask; + int32_t m_NewAxisMask; + + DataLayoutIndexed m_DataLayout; +}; + } diff --git a/include/armnn/DescriptorsFwd.hpp b/include/armnn/DescriptorsFwd.hpp index 0e96c360d3..a2acc0717e 100644 --- a/include/armnn/DescriptorsFwd.hpp +++ b/include/armnn/DescriptorsFwd.hpp @@ -26,6 +26,7 @@ struct ResizeBilinearDescriptor; struct SoftmaxDescriptor; struct OriginsDescriptor; struct ViewsDescriptor; +struct StridedSliceDescriptor; using MergerDescriptor = OriginsDescriptor; using SplitterDescriptor = ViewsDescriptor; diff --git a/include/armnn/ILayerSupport.hpp b/include/armnn/ILayerSupport.hpp index 1bf268f409..e679f84109 100644 --- a/include/armnn/ILayerSupport.hpp +++ b/include/armnn/ILayerSupport.hpp @@ -183,6 +183,11 @@ public: const ViewsDescriptor& descriptor, Optional reasonIfUnsupported = EmptyOptional()) const; + virtual bool IsStridedSliceSupported(const TensorInfo& input, + const TensorInfo& output, + const StridedSliceDescriptor& descriptor, + Optional reasonIfUnsupported = EmptyOptional()) const; + virtual bool IsSubtractionSupported(const TensorInfo& input0, const TensorInfo& input1, const TensorInfo& output, diff --git a/include/armnn/INetwork.hpp b/include/armnn/INetwork.hpp index df274d6dc1..ac7faab279 100644 --- a/include/armnn/INetwork.hpp +++ b/include/armnn/INetwork.hpp @@ -311,6 +311,13 @@ public: virtual IConnectableLayer* AddPadLayer(const PadDescriptor& padDescriptor, const char* name = nullptr) = 0; + /// Adds a strided slice layer to the network. + /// @param StridedSliceDescriptor - Parameters for the strided slice operation. + /// @param name - Optional name for the layer. + /// @return - Interface for configuring the layer. + virtual IConnectableLayer* AddStridedSliceLayer(const StridedSliceDescriptor& stridedSliceDescriptor, + const char* name = nullptr) = 0; + protected: ~INetwork() {} }; diff --git a/include/armnn/LayerSupport.hpp b/include/armnn/LayerSupport.hpp index bd20f185da..7bed5779d3 100644 --- a/include/armnn/LayerSupport.hpp +++ b/include/armnn/LayerSupport.hpp @@ -254,4 +254,12 @@ bool IsPadSupported(const BackendId& backend, char* reasonIfUnsupported = nullptr, size_t reasonIfUnsupportedMaxLength = 1024); +/// Deprecated in favor of IBackend and ILayerSupport interfaces +bool IsStridedSliceSupported(const BackendId& backend, + const TensorInfo& input, + const TensorInfo& output, + const StridedSliceDescriptor& descriptor, + char* reasonIfUnsupported = nullptr, + size_t reasonIfUnsupportedMaxLength = 1024); + } -- cgit v1.2.1