diff options
author | Tracy Narine <tracy.narine@arm.com> | 2023-07-04 15:08:57 +0100 |
---|---|---|
committer | Tracy Narine <tracy.narine@arm.com> | 2023-07-07 10:05:28 +0000 |
commit | 944fb508b1c30415e423b8916849c66a13867ea4 (patch) | |
tree | b4a3c96425184965415f0adc3a9cd7a0011e97cd /src/armnnSerializer | |
parent | 8e9747ab5211460e8dcc5e81d97e567152a0b710 (diff) | |
download | armnn-944fb508b1c30415e423b8916849c66a13867ea4.tar.gz |
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 <tracy.narine@arm.com>
Change-Id: If396f55ecdd763d6f91c51707809f4bd58715cec
Diffstat (limited to 'src/armnnSerializer')
-rw-r--r-- | src/armnnSerializer/ArmnnSchema.fbs | 11 | ||||
-rw-r--r-- | src/armnnSerializer/Serializer.cpp | 26 | ||||
-rw-r--r-- | src/armnnSerializer/Serializer.hpp | 4 | ||||
-rw-r--r-- | src/armnnSerializer/test/SerializerTests.cpp | 29 |
4 files changed, 69 insertions, 1 deletions
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<const armnn::ReverseV2Descriptor&>(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<armnn::ReverseV2Descriptor> 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 +} |