From 541880fcf4572887e57658a508623fb5f95ac554 Mon Sep 17 00:00:00 2001 From: Cathal Corbett Date: Mon, 16 May 2022 15:20:56 +0100 Subject: IVGCVSW-6147 ConstTensorsAsInput: Optimizer - FusePermuteIntoConstLayer * No trailing permute layer after a constant layer * Unit test for optimization Signed-off-by: Cathal Corbett Change-Id: I0d098f5af41d2c55df7cef1ccfb848093320ddc1 --- .../ConvertConstPermuteLayersToConstLayersTest.cpp | 60 ++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 src/armnn/test/optimizations/ConvertConstPermuteLayersToConstLayersTest.cpp (limited to 'src/armnn/test/optimizations/ConvertConstPermuteLayersToConstLayersTest.cpp') diff --git a/src/armnn/test/optimizations/ConvertConstPermuteLayersToConstLayersTest.cpp b/src/armnn/test/optimizations/ConvertConstPermuteLayersToConstLayersTest.cpp new file mode 100644 index 0000000000..1fcba0e581 --- /dev/null +++ b/src/armnn/test/optimizations/ConvertConstPermuteLayersToConstLayersTest.cpp @@ -0,0 +1,60 @@ +// +// Copyright © 2022 Arm Ltd and Contributors. All rights reserved. +// SPDX-License-Identifier: MIT +// + +#include "LayersFwd.hpp" +#include +#include +#include +#include + +TEST_SUITE("Optimizer") +{ +using namespace armnn; +using namespace armnn::optimizations; + +TEST_CASE("ConvertConstPermuteToConst") +{ + Graph graph; + const unsigned int shape[] = {1, 2, 2, 3}; + + const TensorInfo constTensorInfo(4, shape, DataType::Float32, 1.0, 0, true); + + ConstantLayer* constant = graph.AddLayer("constant"); + std::vector constantValues(constTensorInfo.GetNumElements(), 4.5f); + ConstTensor constTensor(constTensorInfo, constantValues.data()); + constant->m_LayerOutput = std::make_shared(constTensor); + constant->GetOutputSlot().SetTensorInfo(constTensorInfo); + + PermuteDescriptor desc({ 0, 2, 3, 1 }); + PermuteLayer* permuteLayer = graph.AddLayer(desc, "permute"); + TensorInfo infoPermuted = armnnUtils::Permuted(constTensorInfo, { 0, 2, 3, 1 }); + permuteLayer->GetOutputSlot().SetTensorInfo(infoPermuted); + + OutputLayer* output = graph.AddLayer(0, "output"); + + // Connect up constant -> permute -> output + constant->GetOutputSlot().Connect(permuteLayer->GetInputSlot(0)); + permuteLayer->GetOutputSlot().Connect(output->GetInputSlot(0)); + + CHECK(CheckSequence(graph.cbegin(), graph.cend(), + &IsLayerOfType, + &IsLayerOfType, + &IsLayerOfType)); + + armnn::Optimizer::Pass(graph, MakeOptimizations(FusePermuteIntoConstLayer())); + + CHECK(CheckSequence(graph.cbegin(), graph.cend(), + &IsLayerOfType, + &IsLayerOfType)); + + TensorShape tensorShape = constant->GetOutputSlot(0).GetTensorInfo().GetShape(); + CHECK(tensorShape[0] == shape[0]); + CHECK(tensorShape[1] == shape[3]); + CHECK(tensorShape[2] == shape[1]); + CHECK(tensorShape[3] == shape[2]); + +} + +} -- cgit v1.2.1