From 169d2f120cc9021f170fede22a448fd6b66fc979 Mon Sep 17 00:00:00 2001 From: Aron Virginas-Tar Date: Mon, 1 Jul 2019 19:01:44 +0100 Subject: IVGCVSW-3382 Deprecate ResizeBilinear and use Resize with Bilinear method !android-nn-driver:1451 Signed-off-by: Aron Virginas-Tar Change-Id: Ieedbce1f6e95891137a250fdd07e2f7e4e1f4828 --- src/backends/backendsCommon/LayerSupportBase.hpp | 9 ++++--- src/backends/backendsCommon/WorkloadFactory.cpp | 11 +------- src/backends/backendsCommon/WorkloadFactory.hpp | 7 ++--- .../test/IsLayerSupportedTestImpl.hpp | 2 -- src/backends/backendsCommon/test/LayerTests.hpp | 30 ++++++++++++++-------- src/backends/cl/ClLayerSupport.cpp | 18 +++++++++++++ src/backends/cl/ClLayerSupport.hpp | 6 +++++ src/backends/cl/ClWorkloadFactory.cpp | 19 ++++++++++++++ src/backends/cl/ClWorkloadFactory.hpp | 4 +++ src/backends/cl/test/ClCreateWorkloadTests.cpp | 5 ++-- src/backends/neon/NeonLayerSupport.cpp | 16 ++++++++++++ src/backends/neon/NeonLayerSupport.hpp | 6 +++++ src/backends/neon/NeonWorkloadFactory.cpp | 19 ++++++++++++++ src/backends/neon/NeonWorkloadFactory.hpp | 4 +++ src/backends/reference/RefWorkloadFactory.cpp | 12 +++++---- .../reference/test/RefCreateWorkloadTests.cpp | 8 +++--- 16 files changed, 136 insertions(+), 40 deletions(-) (limited to 'src/backends') diff --git a/src/backends/backendsCommon/LayerSupportBase.hpp b/src/backends/backendsCommon/LayerSupportBase.hpp index 8abd975922..03a928a706 100644 --- a/src/backends/backendsCommon/LayerSupportBase.hpp +++ b/src/backends/backendsCommon/LayerSupportBase.hpp @@ -238,15 +238,16 @@ public: const ReshapeDescriptor& descriptor, Optional reasonIfUnsupported = EmptyOptional()) const override; - bool IsResizeBilinearSupported(const TensorInfo& input, - const TensorInfo& output, - Optional reasonIfUnsupported = EmptyOptional()) const override; - bool IsResizeSupported(const TensorInfo& input, const TensorInfo& output, const ResizeDescriptor& descriptor, Optional reasonIfUnsupported = EmptyOptional()) const override; + ARMNN_DEPRECATED_MSG("Use IsResizeSupported instead") + bool IsResizeBilinearSupported(const TensorInfo& input, + const TensorInfo& output, + Optional reasonIfUnsupported = EmptyOptional()) const override; + bool IsRsqrtSupported(const TensorInfo& input, const TensorInfo& output, Optional reasonIfUnsupported = EmptyOptional()) const override; diff --git a/src/backends/backendsCommon/WorkloadFactory.cpp b/src/backends/backendsCommon/WorkloadFactory.cpp index 8ef5985fb3..1aca6bfb46 100644 --- a/src/backends/backendsCommon/WorkloadFactory.cpp +++ b/src/backends/backendsCommon/WorkloadFactory.cpp @@ -674,7 +674,7 @@ bool IWorkloadFactory::IsLayerSupported(const BackendId& backendId, case LayerType::Resize: { auto cLayer = boost::polymorphic_downcast(&layer); - const TensorInfo& input = layer.GetInputSlot(0).GetConnection()->GetTensorInfo(); + const TensorInfo& input = layer.GetInputSlot(0).GetConnection()->GetTensorInfo(); const TensorInfo& output = layer.GetOutputSlot(0).GetTensorInfo(); result = layerSupportObject->IsResizeSupported(OverrideDataType(input, dataType), OverrideDataType(output, dataType), @@ -682,15 +682,6 @@ bool IWorkloadFactory::IsLayerSupported(const BackendId& backendId, reason); break; } - case LayerType::ResizeBilinear: - { - const TensorInfo& input = layer.GetInputSlot(0).GetConnection()->GetTensorInfo(); - const TensorInfo& output = layer.GetOutputSlot(0).GetTensorInfo(); - result = layerSupportObject->IsResizeBilinearSupported(OverrideDataType(input, dataType), - OverrideDataType(output, dataType), - reason); - break; - } case LayerType::Rsqrt: { const TensorInfo& input = layer.GetInputSlot(0).GetConnection()->GetTensorInfo(); diff --git a/src/backends/backendsCommon/WorkloadFactory.hpp b/src/backends/backendsCommon/WorkloadFactory.hpp index 02a800265c..e09640f760 100644 --- a/src/backends/backendsCommon/WorkloadFactory.hpp +++ b/src/backends/backendsCommon/WorkloadFactory.hpp @@ -164,12 +164,13 @@ public: virtual std::unique_ptr CreateReshape(const ReshapeQueueDescriptor& descriptor, const WorkloadInfo& info) const; - virtual std::unique_ptr CreateResizeBilinear(const ResizeBilinearQueueDescriptor& descriptor, - const WorkloadInfo& info) const; - virtual std::unique_ptr CreateResize(const ResizeQueueDescriptor& descriptor, const WorkloadInfo& info) const; + ARMNN_DEPRECATED_MSG("Use CreateResize instead") + virtual std::unique_ptr CreateResizeBilinear(const ResizeBilinearQueueDescriptor& descriptor, + const WorkloadInfo& info) const; + virtual std::unique_ptr CreateRsqrt(const RsqrtQueueDescriptor& descriptor, const WorkloadInfo& info) const; diff --git a/src/backends/backendsCommon/test/IsLayerSupportedTestImpl.hpp b/src/backends/backendsCommon/test/IsLayerSupportedTestImpl.hpp index 6f3a9d3248..b02ab7b301 100644 --- a/src/backends/backendsCommon/test/IsLayerSupportedTestImpl.hpp +++ b/src/backends/backendsCommon/test/IsLayerSupportedTestImpl.hpp @@ -396,8 +396,6 @@ DECLARE_LAYER_POLICY_1_PARAM(Division) DECLARE_LAYER_POLICY_2_PARAM(Resize) -DECLARE_LAYER_POLICY_2_PARAM(ResizeBilinear) - DECLARE_LAYER_POLICY_2_PARAM(Reshape) DECLARE_LAYER_POLICY_1_PARAM(Rsqrt) diff --git a/src/backends/backendsCommon/test/LayerTests.hpp b/src/backends/backendsCommon/test/LayerTests.hpp index 66324e104c..259ad01c62 100644 --- a/src/backends/backendsCommon/test/LayerTests.hpp +++ b/src/backends/backendsCommon/test/LayerTests.hpp @@ -2557,13 +2557,15 @@ LayerTestResult ResizeBilinearNopTest( std::unique_ptr inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo); std::unique_ptr outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo); - armnn::ResizeBilinearQueueDescriptor descriptor; + armnn::ResizeQueueDescriptor descriptor; + descriptor.m_Parameters.m_Method = armnn::ResizeMethod::Bilinear; descriptor.m_Parameters.m_DataLayout = dataLayout; + armnn::WorkloadInfo info; AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get()); AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get()); - std::unique_ptr workload = workloadFactory.CreateResizeBilinear(descriptor, info); + std::unique_ptr workload = workloadFactory.CreateResize(descriptor, info); inputHandle->Allocate(); outputHandle->Allocate(); @@ -2655,13 +2657,15 @@ LayerTestResult SimpleResizeBilinearTest( std::unique_ptr inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo); std::unique_ptr outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo); - armnn::ResizeBilinearQueueDescriptor descriptor; + armnn::ResizeQueueDescriptor descriptor; + descriptor.m_Parameters.m_Method = armnn::ResizeMethod::Bilinear; descriptor.m_Parameters.m_DataLayout = dataLayout; + armnn::WorkloadInfo info; AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get()); AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get()); - std::unique_ptr workload = workloadFactory.CreateResizeBilinear(descriptor, info); + std::unique_ptr workload = workloadFactory.CreateResize(descriptor, info); inputHandle->Allocate(); outputHandle->Allocate(); @@ -2756,13 +2760,15 @@ LayerTestResult ResizeBilinearSqMinTest( std::unique_ptr inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo); std::unique_ptr outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo); - armnn::ResizeBilinearQueueDescriptor descriptor; + armnn::ResizeQueueDescriptor descriptor; + descriptor.m_Parameters.m_Method = armnn::ResizeMethod::Bilinear; descriptor.m_Parameters.m_DataLayout = dataLayout; + armnn::WorkloadInfo info; AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get()); AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get()); - std::unique_ptr workload = workloadFactory.CreateResizeBilinear(descriptor, info); + std::unique_ptr workload = workloadFactory.CreateResize(descriptor, info); inputHandle->Allocate(); outputHandle->Allocate(); @@ -2852,13 +2858,15 @@ LayerTestResult ResizeBilinearMinTest( std::unique_ptr inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo); std::unique_ptr outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo); - armnn::ResizeBilinearQueueDescriptor descriptor; + armnn::ResizeQueueDescriptor descriptor; + descriptor.m_Parameters.m_Method = armnn::ResizeMethod::Bilinear; descriptor.m_Parameters.m_DataLayout = dataLayout; + armnn::WorkloadInfo info; AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get()); AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get()); - std::unique_ptr workload = workloadFactory.CreateResizeBilinear(descriptor, info); + std::unique_ptr workload = workloadFactory.CreateResize(descriptor, info); inputHandle->Allocate(); outputHandle->Allocate(); @@ -2955,13 +2963,15 @@ LayerTestResult ResizeBilinearMagTest( std::unique_ptr inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo); std::unique_ptr outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo); - armnn::ResizeBilinearQueueDescriptor descriptor; + armnn::ResizeQueueDescriptor descriptor; + descriptor.m_Parameters.m_Method = armnn::ResizeMethod::Bilinear; descriptor.m_Parameters.m_DataLayout = dataLayout; + armnn::WorkloadInfo info; AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get()); AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get()); - std::unique_ptr workload = workloadFactory.CreateResizeBilinear(descriptor, info); + std::unique_ptr workload = workloadFactory.CreateResize(descriptor, info); inputHandle->Allocate(); outputHandle->Allocate(); diff --git a/src/backends/cl/ClLayerSupport.cpp b/src/backends/cl/ClLayerSupport.cpp index ec134a16e8..d79f6126a7 100644 --- a/src/backends/cl/ClLayerSupport.cpp +++ b/src/backends/cl/ClLayerSupport.cpp @@ -591,6 +591,24 @@ bool ClLayerSupport::IsReshapeSupported(const TensorInfo& input, return true; } +bool ClLayerSupport::IsResizeSupported(const TensorInfo& input, + const TensorInfo& output, + const ResizeDescriptor& descriptor, + Optional reasonIfUnsupported) const +{ + ignore_unused(output); + + if (descriptor.m_Method == ResizeMethod::Bilinear) + { + return IsSupportedForDataTypeCl(reasonIfUnsupported, + input.GetDataType(), + &TrueFunc<>, + &FalseFuncU8<>); + } + + return false; +} + bool ClLayerSupport::IsResizeBilinearSupported(const TensorInfo& input, const TensorInfo& output, Optional reasonIfUnsupported) const diff --git a/src/backends/cl/ClLayerSupport.hpp b/src/backends/cl/ClLayerSupport.hpp index 4d0f5bdfbb..1461f41691 100644 --- a/src/backends/cl/ClLayerSupport.hpp +++ b/src/backends/cl/ClLayerSupport.hpp @@ -198,6 +198,12 @@ public: const ReshapeDescriptor& descriptor, Optional reasonIfUnsupported = EmptyOptional()) const override; + bool IsResizeSupported(const TensorInfo& input, + const TensorInfo& output, + const ResizeDescriptor& descriptor, + Optional reasonIfUnsupported = EmptyOptional()) const override; + + ARMNN_DEPRECATED_MSG("Use IsResizeSupported instead") bool IsResizeBilinearSupported(const TensorInfo& input, const TensorInfo& output, Optional reasonIfUnsupported = EmptyOptional()) const override; diff --git a/src/backends/cl/ClWorkloadFactory.cpp b/src/backends/cl/ClWorkloadFactory.cpp index 4bce653462..c662a9db29 100644 --- a/src/backends/cl/ClWorkloadFactory.cpp +++ b/src/backends/cl/ClWorkloadFactory.cpp @@ -251,6 +251,25 @@ std::unique_ptr ClWorkloadFactory::CreateMemCopy(const MemCopy return MakeWorkload(descriptor, info); } +std::unique_ptr ClWorkloadFactory::CreateResize(const ResizeQueueDescriptor& descriptor, + const WorkloadInfo& info) const +{ + if (descriptor.m_Parameters.m_Method == ResizeMethod::Bilinear) + { + ResizeBilinearQueueDescriptor resizeBilinearDescriptor; + resizeBilinearDescriptor.m_Inputs = descriptor.m_Inputs; + resizeBilinearDescriptor.m_Outputs = descriptor.m_Outputs; + + resizeBilinearDescriptor.m_Parameters.m_DataLayout = descriptor.m_Parameters.m_DataLayout; + resizeBilinearDescriptor.m_Parameters.m_TargetWidth = descriptor.m_Parameters.m_TargetWidth; + resizeBilinearDescriptor.m_Parameters.m_TargetHeight = descriptor.m_Parameters.m_TargetHeight; + + return MakeWorkload(resizeBilinearDescriptor, info); + } + + return MakeWorkload(descriptor, info); +} + std::unique_ptr ClWorkloadFactory::CreateResizeBilinear( const ResizeBilinearQueueDescriptor& descriptor, const WorkloadInfo& info) const diff --git a/src/backends/cl/ClWorkloadFactory.hpp b/src/backends/cl/ClWorkloadFactory.hpp index 8c3e756c0d..32925f7f95 100644 --- a/src/backends/cl/ClWorkloadFactory.hpp +++ b/src/backends/cl/ClWorkloadFactory.hpp @@ -91,6 +91,10 @@ public: std::unique_ptr CreateMemCopy(const MemCopyQueueDescriptor& descriptor, const WorkloadInfo& info) const override; + std::unique_ptr CreateResize(const ResizeQueueDescriptor& descriptor, + const WorkloadInfo& info) const override; + + ARMNN_DEPRECATED_MSG("Use CreateResize instead") std::unique_ptr CreateResizeBilinear(const ResizeBilinearQueueDescriptor& descriptor, const WorkloadInfo& info) const override; diff --git a/src/backends/cl/test/ClCreateWorkloadTests.cpp b/src/backends/cl/test/ClCreateWorkloadTests.cpp index d401701dda..aa1393f407 100644 --- a/src/backends/cl/test/ClCreateWorkloadTests.cpp +++ b/src/backends/cl/test/ClCreateWorkloadTests.cpp @@ -726,8 +726,9 @@ static void ClResizeBilinearWorkloadTest(DataLayout dataLayout) auto workload = CreateResizeBilinearWorkloadTest(factory, graph, dataLayout); // Checks that inputs/outputs are as we expect them (see definition of CreateResizeBilinearWorkloadTest). - ResizeBilinearQueueDescriptor queueDescriptor = workload->GetData(); - auto inputHandle = boost::polymorphic_downcast(queueDescriptor.m_Inputs[0]); + auto queueDescriptor = workload->GetData(); + + auto inputHandle = boost::polymorphic_downcast(queueDescriptor.m_Inputs[0]); auto outputHandle = boost::polymorphic_downcast(queueDescriptor.m_Outputs[0]); switch (dataLayout) diff --git a/src/backends/neon/NeonLayerSupport.cpp b/src/backends/neon/NeonLayerSupport.cpp index 32027d46e7..e49ad793a1 100644 --- a/src/backends/neon/NeonLayerSupport.cpp +++ b/src/backends/neon/NeonLayerSupport.cpp @@ -471,6 +471,22 @@ bool NeonLayerSupport::IsReshapeSupported(const TensorInfo& input, &TrueFunc<>); } +bool NeonLayerSupport::IsResizeSupported(const TensorInfo& input, + const TensorInfo& output, + const ResizeDescriptor& descriptor, + Optional reasonIfUnsupported) const +{ + if (descriptor.m_Method == ResizeMethod::Bilinear) + { + FORWARD_WORKLOAD_VALIDATE_FUNC(NeonResizeBilinearWorkloadValidate, + reasonIfUnsupported, + input, + output); + } + + return false; +} + bool NeonLayerSupport::IsResizeBilinearSupported(const TensorInfo& input, const TensorInfo& output, Optional reasonIfUnsupported) const diff --git a/src/backends/neon/NeonLayerSupport.hpp b/src/backends/neon/NeonLayerSupport.hpp index 1539ffea93..781da42b75 100644 --- a/src/backends/neon/NeonLayerSupport.hpp +++ b/src/backends/neon/NeonLayerSupport.hpp @@ -157,6 +157,12 @@ public: const ReshapeDescriptor& descriptor, Optional reasonIfUnsupported = EmptyOptional()) const override; + bool IsResizeSupported(const TensorInfo& input, + const TensorInfo& output, + const ResizeDescriptor& descriptor, + Optional reasonIfUnsupported = EmptyOptional()) const override; + + ARMNN_DEPRECATED_MSG("Use IsResizeSupported instead") bool IsResizeBilinearSupported(const TensorInfo& input, const TensorInfo& output, Optional reasonIfUnsupported = EmptyOptional()) const override; diff --git a/src/backends/neon/NeonWorkloadFactory.cpp b/src/backends/neon/NeonWorkloadFactory.cpp index d784a483f8..a9913186c4 100644 --- a/src/backends/neon/NeonWorkloadFactory.cpp +++ b/src/backends/neon/NeonWorkloadFactory.cpp @@ -218,6 +218,25 @@ std::unique_ptr NeonWorkloadFactory::CreateMemCopy(const MemCo return MakeWorkloadHelper(descriptor, info); } +std::unique_ptr NeonWorkloadFactory::CreateResize(const ResizeQueueDescriptor& descriptor, + const WorkloadInfo& info) const +{ + if (descriptor.m_Parameters.m_Method == ResizeMethod::Bilinear) + { + ResizeBilinearQueueDescriptor resizeBilinearDescriptor; + resizeBilinearDescriptor.m_Inputs = descriptor.m_Inputs; + resizeBilinearDescriptor.m_Outputs = descriptor.m_Outputs; + + resizeBilinearDescriptor.m_Parameters.m_DataLayout = descriptor.m_Parameters.m_DataLayout; + resizeBilinearDescriptor.m_Parameters.m_TargetWidth = descriptor.m_Parameters.m_TargetWidth; + resizeBilinearDescriptor.m_Parameters.m_TargetHeight = descriptor.m_Parameters.m_TargetHeight; + + return std::make_unique(resizeBilinearDescriptor, info); + } + + return MakeWorkloadHelper(descriptor, info); +} + std::unique_ptr NeonWorkloadFactory::CreateResizeBilinear( const ResizeBilinearQueueDescriptor& descriptor, const WorkloadInfo& info) const diff --git a/src/backends/neon/NeonWorkloadFactory.hpp b/src/backends/neon/NeonWorkloadFactory.hpp index 4ad52e4835..ebd5001f54 100644 --- a/src/backends/neon/NeonWorkloadFactory.hpp +++ b/src/backends/neon/NeonWorkloadFactory.hpp @@ -92,6 +92,10 @@ public: std::unique_ptr CreateMemCopy(const MemCopyQueueDescriptor& descriptor, const WorkloadInfo& info) const override; + std::unique_ptr CreateResize(const ResizeQueueDescriptor& descriptor, + const WorkloadInfo& info) const override; + + ARMNN_DEPRECATED_MSG("Use CreateResize instead") std::unique_ptr CreateResizeBilinear(const ResizeBilinearQueueDescriptor& descriptor, const WorkloadInfo& info) const override; diff --git a/src/backends/reference/RefWorkloadFactory.cpp b/src/backends/reference/RefWorkloadFactory.cpp index 8d2a2b1edf..b16e8565d5 100644 --- a/src/backends/reference/RefWorkloadFactory.cpp +++ b/src/backends/reference/RefWorkloadFactory.cpp @@ -253,11 +253,13 @@ std::unique_ptr RefWorkloadFactory::CreateResize(const ResizeQueueDes std::unique_ptr RefWorkloadFactory::CreateResizeBilinear(const ResizeBilinearQueueDescriptor& descriptor, const WorkloadInfo& info) const { - if (IsFloat16(info)) - { - return MakeWorkload(descriptor, info); - } - return std::make_unique(descriptor, info); + ResizeQueueDescriptor resizeDescriptor; + resizeDescriptor.m_Parameters.m_Method = ResizeMethod::Bilinear; + resizeDescriptor.m_Parameters.m_DataLayout = descriptor.m_Parameters.m_DataLayout; + resizeDescriptor.m_Parameters.m_TargetWidth = descriptor.m_Parameters.m_TargetWidth; + resizeDescriptor.m_Parameters.m_TargetHeight = descriptor.m_Parameters.m_TargetHeight; + + return CreateResize(resizeDescriptor, info); } std::unique_ptr RefWorkloadFactory::CreateFakeQuantization( diff --git a/src/backends/reference/test/RefCreateWorkloadTests.cpp b/src/backends/reference/test/RefCreateWorkloadTests.cpp index 9071679e6a..945a87430c 100644 --- a/src/backends/reference/test/RefCreateWorkloadTests.cpp +++ b/src/backends/reference/test/RefCreateWorkloadTests.cpp @@ -643,22 +643,22 @@ static void RefCreateResizeBilinearTest(DataLayout dataLayout) BOOST_AUTO_TEST_CASE(CreateResizeBilinearFloat32) { - RefCreateResizeBilinearTest(DataLayout::NCHW); + RefCreateResizeBilinearTest(DataLayout::NCHW); } BOOST_AUTO_TEST_CASE(CreateResizeBilinearUint8) { - RefCreateResizeBilinearTest(DataLayout::NCHW); + RefCreateResizeBilinearTest(DataLayout::NCHW); } BOOST_AUTO_TEST_CASE(CreateResizeBilinearQuantisedAsymm16) { - RefCreateResizeBilinearTest(DataLayout::NCHW); + RefCreateResizeBilinearTest(DataLayout::NCHW); } BOOST_AUTO_TEST_CASE(CreateResizeBilinearFloat32Nhwc) { - RefCreateResizeBilinearTest(DataLayout::NHWC); + RefCreateResizeBilinearTest(DataLayout::NHWC); } template -- cgit v1.2.1