// // Copyright © 2017 Arm Ltd. All rights reserved. // SPDX-License-Identifier: MIT // #pragma once #include #include #include #include namespace { template armnn::INetworkPtr CreateDequantizeNetwork(const armnn::TensorInfo& inputInfo, const armnn::TensorInfo& outputInfo) { armnn::INetworkPtr net(armnn::INetwork::Create()); armnn::IConnectableLayer* inputLayer = net->AddInputLayer(0); armnn::IConnectableLayer* dequantizeLayer = net->AddDequantizeLayer("Dequantize"); armnn::IConnectableLayer* outputLayer = net->AddOutputLayer(0, "output"); Connect(inputLayer, dequantizeLayer, inputInfo, 0, 0); Connect(dequantizeLayer, outputLayer, outputInfo, 0, 0); return net; } template> void DequantizeEndToEndLayerTestImpl(const std::vector& backends, const armnn::TensorShape& tensorShape, const std::vector& input, const std::vector& expectedOutput, float scale, int32_t offset) { armnn::TensorInfo inputInfo(tensorShape, ArmnnType); armnn::TensorInfo outputInfo(tensorShape, armnn::DataType::Float32); inputInfo.SetQuantizationScale(scale); inputInfo.SetQuantizationOffset(offset); inputInfo.SetConstant(true); // Builds up the structure of the network armnn::INetworkPtr net = CreateDequantizeNetwork(inputInfo, outputInfo); CHECK(net); std::map> inputTensorData = { { 0, input } }; std::map> expectedOutputData = { { 0, expectedOutput } }; EndToEndLayerTestImpl( move(net), inputTensorData, expectedOutputData, backends); } template> void DequantizeEndToEndSimple(const std::vector& backends) { const armnn::TensorShape tensorShape({ 1, 2, 2, 4 }); std::vector inputData = std::vector( { 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32 }); std::vector expectedOutputData = std::vector( { 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f, 13.0f, 14.0f, 15.0f, 16.0f }); DequantizeEndToEndLayerTestImpl(backends, tensorShape, inputData, expectedOutputData, 0.5f, 0); }; template> void DequantizeEndToEndOffset(const std::vector& backends) { const armnn::TensorShape tensorShape({ 1, 2, 2, 4 }); std::vector inputData = std::vector( { 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33 }); std::vector expectedOutputData = std::vector( { 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f, 10.0f, 11.0f, 12.0f, 13.0f, 14.0f, 15.0f, 16.0f }); DequantizeEndToEndLayerTestImpl(backends, tensorShape, inputData, expectedOutputData, 0.5f, 1); }; } // anonymous namespace