From: David Monahan Date: Sat, 30 May 2020 08:48:39 +0000 (+0100) Subject: IVGCVSW-4888 Update Resize Front end for new parameters X-Git-Tag: submit/tizen/20210421.062230~500 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=4a0c9b99deb88a0ec5de7997f09062686915c6cc;p=platform%2Fupstream%2Farmnn.git IVGCVSW-4888 Update Resize Front end for new parameters * Added AlignCorners and HalfPixelCenters to Resize and ResizeBilinear * Updated Serializer and Serializer tests !android-nn-driver:3280 Signed-off-by: David Monahan Change-Id: Ice3bb448c239b04323854641525bfe0808c03b2e --- diff --git a/include/armnn/Descriptors.hpp b/include/armnn/Descriptors.hpp index 13765e8..9e5dea2 100644 --- a/include/armnn/Descriptors.hpp +++ b/include/armnn/Descriptors.hpp @@ -718,6 +718,8 @@ struct ResizeBilinearDescriptor : m_TargetWidth(0) , m_TargetHeight(0) , m_DataLayout(DataLayout::NCHW) + , m_AlignCorners(false) + , m_HalfPixelCenters(false) {} /// Target width value. @@ -726,6 +728,10 @@ struct ResizeBilinearDescriptor uint32_t m_TargetHeight; /// The data layout to be used (NCHW, NHWC). DataLayout m_DataLayout; + /// Aligned corners + bool m_AlignCorners; + /// Half Pixel Centers + bool m_HalfPixelCenters; }; /// A ResizeDescriptor for the ResizeLayer. @@ -736,7 +742,7 @@ struct ResizeDescriptor , m_TargetHeight(0) , m_Method(ResizeMethod::NearestNeighbor) , m_DataLayout(DataLayout::NCHW) - , m_BilinearAlignCorners(false) + , m_AlignCorners(false) , m_HalfPixelCenters(false) {} @@ -746,7 +752,7 @@ struct ResizeDescriptor m_TargetHeight == rhs.m_TargetHeight && m_Method == rhs.m_Method && m_DataLayout == rhs.m_DataLayout && - m_BilinearAlignCorners == rhs.m_BilinearAlignCorners && + m_AlignCorners == rhs.m_AlignCorners && m_HalfPixelCenters == rhs.m_HalfPixelCenters; } @@ -759,8 +765,8 @@ struct ResizeDescriptor ResizeMethod m_Method; /// The data layout to be used (NCHW, NHWC). DataLayout m_DataLayout; - /// Aligned corners for bilinear method - bool m_BilinearAlignCorners; + /// Aligned corners + bool m_AlignCorners; /// Half Pixel Centers bool m_HalfPixelCenters; }; diff --git a/src/armnn/Network.cpp b/src/armnn/Network.cpp index a047297..d636d01 100644 --- a/src/armnn/Network.cpp +++ b/src/armnn/Network.cpp @@ -1458,10 +1458,12 @@ IConnectableLayer* Network::AddResizeBilinearLayer(const ResizeBilinearDescripto const char* name) { ResizeDescriptor resizeDescriptor; - resizeDescriptor.m_Method = ResizeMethod::Bilinear; - resizeDescriptor.m_DataLayout = descriptor.m_DataLayout; - resizeDescriptor.m_TargetWidth = descriptor.m_TargetWidth; - resizeDescriptor.m_TargetHeight = descriptor.m_TargetHeight; + resizeDescriptor.m_Method = ResizeMethod::Bilinear; + resizeDescriptor.m_DataLayout = descriptor.m_DataLayout; + resizeDescriptor.m_TargetWidth = descriptor.m_TargetWidth; + resizeDescriptor.m_TargetHeight = descriptor.m_TargetHeight; + resizeDescriptor.m_AlignCorners = descriptor.m_AlignCorners; + resizeDescriptor.m_HalfPixelCenters = descriptor.m_HalfPixelCenters; return m_Graph->AddLayer(resizeDescriptor, name); } diff --git a/src/armnnDeserializer/Deserializer.cpp b/src/armnnDeserializer/Deserializer.cpp index 36beebc..bea34e1 100644 --- a/src/armnnDeserializer/Deserializer.cpp +++ b/src/armnnDeserializer/Deserializer.cpp @@ -2045,6 +2045,8 @@ void Deserializer::ParseResize(GraphPtr graph, unsigned int layerIndex) descriptor.m_TargetHeight = flatBufferDescriptor->targetHeight(); descriptor.m_Method = ToResizeMethod(flatBufferDescriptor->method()); descriptor.m_DataLayout = ToDataLayout(flatBufferDescriptor->dataLayout()); + descriptor.m_AlignCorners = flatBufferDescriptor->alignCorners(); + descriptor.m_HalfPixelCenters = flatBufferDescriptor->halfPixelCenters(); auto layerName = GetLayerName(graph, layerIndex); IConnectableLayer* layer = m_Network->AddResizeLayer(descriptor, layerName.c_str()); @@ -2073,6 +2075,8 @@ void Deserializer::ParseResizeBilinear(GraphPtr graph, unsigned int layerIndex) descriptor.m_TargetHeight = flatBufferDescriptor->targetHeight(); descriptor.m_Method = armnn::ResizeMethod::Bilinear; descriptor.m_DataLayout = ToDataLayout(flatBufferDescriptor->dataLayout()); + descriptor.m_AlignCorners = flatBufferDescriptor->alignCorners(); + descriptor.m_HalfPixelCenters = flatBufferDescriptor->halfPixelCenters(); auto layerName = GetLayerName(graph, layerIndex); IConnectableLayer* layer = m_Network->AddResizeLayer(descriptor, layerName.c_str()); diff --git a/src/armnnSerializer/ArmnnSchema.fbs b/src/armnnSerializer/ArmnnSchema.fbs index 6e5ee3f..532c12c 100644 --- a/src/armnnSerializer/ArmnnSchema.fbs +++ b/src/armnnSerializer/ArmnnSchema.fbs @@ -558,6 +558,8 @@ table ResizeBilinearDescriptor { targetWidth:uint; targetHeight:uint; dataLayout:DataLayout; + alignCorners:bool; + halfPixelCenters:bool; } table SliceLayer { @@ -817,6 +819,8 @@ table ResizeDescriptor { targetWidth:uint; method:ResizeMethod = NearestNeighbor; dataLayout:DataLayout; + alignCorners:bool; + halfPixelCenters:bool; } table StackLayer { diff --git a/src/armnnSerializer/Serializer.cpp b/src/armnnSerializer/Serializer.cpp index c4d3cfb..9c62a93 100644 --- a/src/armnnSerializer/Serializer.cpp +++ b/src/armnnSerializer/Serializer.cpp @@ -864,7 +864,9 @@ void SerializerVisitor::VisitResizeBilinearLayer(const armnn::IConnectableLayer* CreateResizeBilinearDescriptor(m_flatBufferBuilder, resizeDescriptor.m_TargetWidth, resizeDescriptor.m_TargetHeight, - GetFlatBufferDataLayout(resizeDescriptor.m_DataLayout)); + GetFlatBufferDataLayout(resizeDescriptor.m_DataLayout), + resizeDescriptor.m_AlignCorners, + resizeDescriptor.m_HalfPixelCenters); auto flatBufferLayer = serializer::CreateResizeBilinearLayer(m_flatBufferBuilder, flatBufferBaseLayer, @@ -886,7 +888,9 @@ void SerializerVisitor::VisitResizeLayer(const armnn::IConnectableLayer* layer, resizeDescriptor.m_TargetHeight, resizeDescriptor.m_TargetWidth, GetFlatBufferResizeMethod(resizeDescriptor.m_Method), - GetFlatBufferDataLayout(resizeDescriptor.m_DataLayout)); + GetFlatBufferDataLayout(resizeDescriptor.m_DataLayout), + resizeDescriptor.m_AlignCorners, + resizeDescriptor.m_HalfPixelCenters); auto flatBufferLayer = serializer::CreateResizeLayer(m_flatBufferBuilder, flatBufferBaseLayer, diff --git a/src/armnnSerializer/test/SerializerTests.cpp b/src/armnnSerializer/test/SerializerTests.cpp index 76ac5a4..e7f93c6 100644 --- a/src/armnnSerializer/test/SerializerTests.cpp +++ b/src/armnnSerializer/test/SerializerTests.cpp @@ -2206,6 +2206,8 @@ BOOST_AUTO_TEST_CASE(SerializeResize) desc.m_TargetWidth = 4; desc.m_TargetHeight = 2; desc.m_Method = armnn::ResizeMethod::NearestNeighbor; + desc.m_AlignCorners = true; + desc.m_HalfPixelCenters = true; armnn::INetworkPtr network = armnn::INetwork::Create(); armnn::IConnectableLayer* const inputLayer = network->AddInputLayer(0); @@ -2241,10 +2243,12 @@ public: { VerifyNameAndConnections(layer, name); - BOOST_CHECK(descriptor.m_Method == armnn::ResizeMethod::Bilinear); - BOOST_CHECK(descriptor.m_TargetWidth == m_Descriptor.m_TargetWidth); - BOOST_CHECK(descriptor.m_TargetHeight == m_Descriptor.m_TargetHeight); - BOOST_CHECK(descriptor.m_DataLayout == m_Descriptor.m_DataLayout); + BOOST_CHECK(descriptor.m_Method == armnn::ResizeMethod::Bilinear); + BOOST_CHECK(descriptor.m_TargetWidth == m_Descriptor.m_TargetWidth); + BOOST_CHECK(descriptor.m_TargetHeight == m_Descriptor.m_TargetHeight); + BOOST_CHECK(descriptor.m_DataLayout == m_Descriptor.m_DataLayout); + BOOST_CHECK(descriptor.m_AlignCorners == m_Descriptor.m_AlignCorners); + BOOST_CHECK(descriptor.m_HalfPixelCenters == m_Descriptor.m_HalfPixelCenters); } void VisitResizeBilinearLayer(const armnn::IConnectableLayer*, @@ -2267,6 +2271,8 @@ BOOST_AUTO_TEST_CASE(SerializeResizeBilinear) armnn::ResizeBilinearDescriptor desc; desc.m_TargetWidth = 4u; desc.m_TargetHeight = 2u; + desc.m_AlignCorners = true; + desc.m_HalfPixelCenters = true; armnn::INetworkPtr network = armnn::INetwork::Create(); armnn::IConnectableLayer* const inputLayer = network->AddInputLayer(0); diff --git a/src/armnnTfLiteParser/TfLiteParser.cpp b/src/armnnTfLiteParser/TfLiteParser.cpp index 08bd68d..53b49f4 100644 --- a/src/armnnTfLiteParser/TfLiteParser.cpp +++ b/src/armnnTfLiteParser/TfLiteParser.cpp @@ -2168,7 +2168,7 @@ void TfLiteParser::ParseResize(size_t subgraphIndex, size_t operatorIndex, Resiz const auto & operatorPtr = m_Model->subgraphs[subgraphIndex]->operators[operatorIndex]; const auto * options = operatorPtr->builtin_options.AsResizeBilinearOptions(); - desc.m_BilinearAlignCorners = options->align_corners; + desc.m_AlignCorners = options->align_corners; break; } case ResizeMethod::NearestNeighbor: diff --git a/src/backends/cl/workloads/ClResizeWorkload.cpp b/src/backends/cl/workloads/ClResizeWorkload.cpp index 05b212c..adfb368 100644 --- a/src/backends/cl/workloads/ClResizeWorkload.cpp +++ b/src/backends/cl/workloads/ClResizeWorkload.cpp @@ -40,7 +40,7 @@ arm_compute::Status ClResizeWorkloadValidate(const TensorInfo& input, arm_compute::PixelValue(0.f), arm_compute::SamplingPolicy::TOP_LEFT, true, - descriptor.m_BilinearAlignCorners); + descriptor.m_AlignCorners); } ClResizeWorkload::ClResizeWorkload(const ResizeQueueDescriptor& descriptor, const WorkloadInfo& info) : @@ -65,7 +65,7 @@ ClResizeWorkload::ClResizeWorkload(const ResizeQueueDescriptor& descriptor, cons arm_compute::PixelValue(0.f), arm_compute::SamplingPolicy::TOP_LEFT, true, - descriptor.m_Parameters.m_BilinearAlignCorners); + descriptor.m_Parameters.m_AlignCorners); }; void ClResizeWorkload::Execute() const diff --git a/src/backends/neon/workloads/NeonResizeWorkload.cpp b/src/backends/neon/workloads/NeonResizeWorkload.cpp index 9e3be26..afb753f 100644 --- a/src/backends/neon/workloads/NeonResizeWorkload.cpp +++ b/src/backends/neon/workloads/NeonResizeWorkload.cpp @@ -64,7 +64,7 @@ NeonResizeWorkload::NeonResizeWorkload(const ResizeQueueDescriptor& descriptor, arm_compute::PixelValue(0.f), arm_compute::SamplingPolicy::TOP_LEFT, true, - descriptor.m_Parameters.m_BilinearAlignCorners); + descriptor.m_Parameters.m_AlignCorners); }; void NeonResizeWorkload::Execute() const diff --git a/src/backends/reference/workloads/RefResizeWorkload.cpp b/src/backends/reference/workloads/RefResizeWorkload.cpp index 624b426..4e53c4f 100644 --- a/src/backends/reference/workloads/RefResizeWorkload.cpp +++ b/src/backends/reference/workloads/RefResizeWorkload.cpp @@ -35,7 +35,7 @@ void RefResizeWorkload::Execute() const outputInfo, m_Data.m_Parameters.m_DataLayout, m_Data.m_Parameters.m_Method, - m_Data.m_Parameters.m_BilinearAlignCorners); + m_Data.m_Parameters.m_AlignCorners); } } //namespace armnn