aboutsummaryrefslogtreecommitdiff
path: root/src/armnnSerializer
diff options
context:
space:
mode:
authorTracy Narine <tracy.narine@arm.com>2023-07-04 15:08:57 +0100
committerTracy Narine <tracy.narine@arm.com>2023-07-07 10:05:28 +0000
commit944fb508b1c30415e423b8916849c66a13867ea4 (patch)
treeb4a3c96425184965415f0adc3a9cd7a0011e97cd /src/armnnSerializer
parent8e9747ab5211460e8dcc5e81d97e567152a0b710 (diff)
downloadarmnn-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.fbs11
-rw-r--r--src/armnnSerializer/Serializer.cpp26
-rw-r--r--src/armnnSerializer/Serializer.hpp4
-rw-r--r--src/armnnSerializer/test/SerializerTests.cpp29
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
+}