1 // 2 // Copyright © 2022 Arm Ltd and Contributors. All rights reserved. 3 // SPDX-License-Identifier: MIT 4 // 5 6 #include "AvgPool2DIgnoreValueChecker.hpp" 7 #include <armnn/IRuntime.hpp> 8 9 using namespace armnn; 10 using namespace tosa; 11 12 TEST_SUITE("TosaOperatorMappingOneToManyTests") 13 { 14 TEST_CASE("GetTosaMapping_AvgPool2DIgnoreValueLayer") 15 { 16 armnn::Pooling2dDescriptor descriptor; 17 descriptor.m_PoolType = armnn::PoolingAlgorithm::Average; 18 descriptor.m_PoolWidth = descriptor.m_PoolHeight = 2; 19 descriptor.m_StrideX = descriptor.m_StrideY = 2; 20 descriptor.m_PadLeft = 1; 21 descriptor.m_PadRight = 1; 22 descriptor.m_PadTop = 1; 23 descriptor.m_PadBottom = 1; 24 descriptor.m_PaddingMethod = armnn::PaddingMethod::IgnoreValue; 25 26 armnn::TensorInfo inputTensorInfo({ 1, 1, 4, 4 }, DataType::Float32); 27 armnn::TensorInfo outputTensorInfo({ 1, 1, 3, 3 }, DataType::Float32); 28 29 std::vector<std::vector<int32_t>> inputShape = {{ 1, 1, 4, 4 }}; 30 std::vector<std::vector<int32_t>> intermediateShape = {{ 1, 1, 6, 6 }}; 31 std::vector<std::vector<int32_t>> outputShape = {{ 1, 1, 3, 3 }}; 32 33 TosaSerializationBasicBlock* basicBlock = 34 GetTosaMapping(nullptr, LayerType::Pooling2d, {&inputTensorInfo}, {&outputTensorInfo}, descriptor); 35 VerifyAvgPool2DIgnoreValue(basicBlock, 36 inputShape, 37 outputShape, 38 intermediateShape, 39 descriptor); 40 } 41 42 TEST_CASE("GetTosaMappingFromLayer_AvgPool2DIgnoreValueLayer") 43 { 44 IRuntime::CreationOptions options; 45 IRuntimePtr runtime(IRuntime::Create(options)); 46 47 // Builds up the structure of the network. 48 INetworkPtr net(INetwork::Create()); 49 50 armnn::Pooling2dDescriptor descriptor; 51 descriptor.m_PoolType = armnn::PoolingAlgorithm::Average; 52 descriptor.m_PoolWidth = descriptor.m_PoolHeight = 2; 53 descriptor.m_StrideX = descriptor.m_StrideY = 2; 54 descriptor.m_PadLeft = 1; 55 descriptor.m_PadRight = 1; 56 descriptor.m_PadTop = 1; 57 descriptor.m_PadBottom = 1; 58 descriptor.m_PaddingMethod = armnn::PaddingMethod::IgnoreValue; 59 60 IConnectableLayer* input0 = net->AddInputLayer(0, "input0"); 61 IConnectableLayer* pool = net->AddPooling2dLayer(descriptor, "pool"); 62 IConnectableLayer* output = net->AddOutputLayer(0, "output"); 63 64 input0->GetOutputSlot(0).Connect(pool->GetInputSlot(0)); 65 pool->GetOutputSlot(0).Connect(output->GetInputSlot(0)); 66 67 armnn::TensorInfo inputTensorInfo({ 1, 1, 4, 4 }, DataType::Float32); 68 armnn::TensorInfo outputTensorInfo({ 1, 1, 3, 3 }, DataType::Float32); 69 70 std::vector<std::vector<int32_t>> inputShape = {{ 1, 1, 4, 4 }}; 71 std::vector<std::vector<int32_t>> intermediateShape = {{ 1, 1, 6, 6 }}; 72 std::vector<std::vector<int32_t>> outputShape = {{ 1, 1, 3, 3 }}; 73 74 input0->GetOutputSlot(0).SetTensorInfo(inputTensorInfo); 75 pool->GetOutputSlot(0).SetTensorInfo(outputTensorInfo); 76 77 TosaSerializationBasicBlock* basicBlock = 78 GetTosaMappingFromLayer(PolymorphicDowncast<Layer*>(pool)); 79 VerifyAvgPool2DIgnoreValue(basicBlock, 80 inputShape, 81 outputShape, 82 intermediateShape, 83 descriptor); 84 } 85 }