From 944fb508b1c30415e423b8916849c66a13867ea4 Mon Sep 17 00:00:00 2001 From: Tracy Narine Date: Tue, 4 Jul 2023 15:08:57 +0100 Subject: IVGCVSW-7832 Add REVERSE_V2 to Serializer and Deserializer * Support for ReverseV2 for the serializer and deserializer added * Tests added * CMake files updated for the build * Fixed an issue with the operator_list documentation for Resize and ReverseV2 Signed-off-by: Tracy Narine Change-Id: If396f55ecdd763d6f91c51707809f4bd58715cec --- src/armnnSerializer/ArmnnSchema.fbs | 11 +++++++++++ src/armnnSerializer/Serializer.cpp | 26 +++++++++++++++++++++++++ src/armnnSerializer/Serializer.hpp | 4 ++++ src/armnnSerializer/test/SerializerTests.cpp | 29 +++++++++++++++++++++++++++- 4 files changed, 69 insertions(+), 1 deletion(-) (limited to 'src/armnnSerializer') diff --git a/src/armnnSerializer/ArmnnSchema.fbs b/src/armnnSerializer/ArmnnSchema.fbs index 84149bd60d..76a1c12787 100644 --- a/src/armnnSerializer/ArmnnSchema.fbs +++ b/src/armnnSerializer/ArmnnSchema.fbs @@ -184,6 +184,7 @@ enum LayerType : uint { GatherNd = 67, BatchMatMul = 68, ElementwiseBinary = 69, + ReverseV2 = 70, } // Base layer table to be used as part of other layers @@ -979,6 +980,15 @@ table ResizeDescriptor { halfPixelCenters:bool; } +table ReverseV2Layer { + base:LayerBase; + descriptor:ReverseV2Descriptor; +} + +table ReverseV2Descriptor { + axis:[int]; +} + table StackLayer { base:LayerBase; descriptor:StackDescriptor; @@ -1117,6 +1127,7 @@ union Layer { GatherNdLayer, BatchMatMulLayer, ElementwiseBinaryLayer, + ReverseV2Layer, } table AnyLayer { diff --git a/src/armnnSerializer/Serializer.cpp b/src/armnnSerializer/Serializer.cpp index 5a095d9887..cf098eb5f8 100644 --- a/src/armnnSerializer/Serializer.cpp +++ b/src/armnnSerializer/Serializer.cpp @@ -1035,6 +1035,25 @@ void SerializerStrategy::SerializeResizeLayer(const armnn::IConnectableLayer* la CreateAnyLayer(flatBufferLayer.o, serializer::Layer::Layer_ResizeLayer); } +void SerializerStrategy::SerializeReverseV2Layer(const armnn::IConnectableLayer* layer, + const armnn::ReverseV2Descriptor& reverseV2Descriptor, + const char* name) +{ + IgnoreUnused(name); + + auto flatBufferBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_ReverseV2); + + auto flatBufferDescriptor = + CreateReverseV2Descriptor(m_flatBufferBuilder, + m_flatBufferBuilder.CreateVector(reverseV2Descriptor.m_Axis)); + + auto flatBufferLayer = serializer::CreateReverseV2Layer(m_flatBufferBuilder, + flatBufferBaseLayer, + flatBufferDescriptor); + + CreateAnyLayer(flatBufferLayer.o, serializer::Layer::Layer_ReverseV2Layer); +} + void SerializerStrategy::SerializeSliceLayer(const armnn::IConnectableLayer* layer, const armnn::SliceDescriptor& sliceDescriptor, const char* name) @@ -2332,6 +2351,13 @@ void SerializerStrategy::ExecuteStrategy(const armnn::IConnectableLayer* layer, SerializeResizeLayer(layer, layerDescriptor, name); break; } + case armnn::LayerType::ReverseV2: + { + const armnn::ReverseV2Descriptor& layerDescriptor = + static_cast(descriptor); + SerializeReverseV2Layer(layer, layerDescriptor, name); + break; + } case armnn::LayerType::Shape: { SerializeShapeLayer(layer, name); diff --git a/src/armnnSerializer/Serializer.hpp b/src/armnnSerializer/Serializer.hpp index 4d5e806db1..eb724752f2 100644 --- a/src/armnnSerializer/Serializer.hpp +++ b/src/armnnSerializer/Serializer.hpp @@ -289,6 +289,10 @@ private: const armnn::ResizeDescriptor& resizeDescriptor, const char* name = nullptr); + void SerializeReverseV2Layer(const armnn::IConnectableLayer* layer, + const armnn::ReverseV2Descriptor& reverseV2Descriptor, + const char* name = nullptr); + void SerializeSliceLayer(const armnn::IConnectableLayer* layer, const armnn::SliceDescriptor& sliceDescriptor, const char* name = nullptr); diff --git a/src/armnnSerializer/test/SerializerTests.cpp b/src/armnnSerializer/test/SerializerTests.cpp index bd8a76a103..7a988ee134 100644 --- a/src/armnnSerializer/test/SerializerTests.cpp +++ b/src/armnnSerializer/test/SerializerTests.cpp @@ -2453,6 +2453,33 @@ TEST_CASE("EnsureResizeBilinearBackwardCompatibility") deserializedNetwork->ExecuteStrategy(verifier); } +TEST_CASE("SerializeReverseV2") +{ + const std::string layerName("reverseV2"); + const armnn::TensorInfo inputInfo = armnn::TensorInfo({2, 3, 4}, armnn::DataType::Float32); + const armnn::TensorInfo outputInfo = armnn::TensorInfo({2, 3, 4}, armnn::DataType::Float32); + + armnn::ReverseV2Descriptor desc; + desc.m_Axis = {1, 0, 2}; + + armnn::INetworkPtr network = armnn::INetwork::Create(); + armnn::IConnectableLayer* const inputLayer = network->AddInputLayer(0); + armnn::IConnectableLayer* const reverseV2Layer = network->AddReverseV2Layer(desc, layerName.c_str()); + armnn::IConnectableLayer* const outputLayer = network->AddOutputLayer(0); + + inputLayer->GetOutputSlot(0).Connect(reverseV2Layer->GetInputSlot(0)); + reverseV2Layer->GetOutputSlot(0).Connect(outputLayer->GetInputSlot(0)); + + inputLayer->GetOutputSlot(0).SetTensorInfo(inputInfo); + reverseV2Layer->GetOutputSlot(0).SetTensorInfo(outputInfo); + + armnn::INetworkPtr deserializedNetwork = DeserializeNetwork(SerializeNetwork(*network)); + CHECK(deserializedNetwork); + + LayerVerifierBaseWithDescriptor verifier(layerName, {inputInfo}, {outputInfo}, desc); + deserializedNetwork->ExecuteStrategy(verifier); +} + TEST_CASE("SerializeShape") { const std::string layerName("shape"); @@ -2981,4 +3008,4 @@ TEST_CASE("SerializeDeserializeNonLinearNetwork") deserializedNetwork->ExecuteStrategy(verifier); } -} \ No newline at end of file +} -- cgit v1.2.1