aboutsummaryrefslogtreecommitdiff
path: root/src/armnnSerializer
diff options
context:
space:
mode:
Diffstat (limited to 'src/armnnSerializer')
-rw-r--r--src/armnnSerializer/ArmnnSchema.fbs17
-rw-r--r--src/armnnSerializer/Serializer.cpp19
-rw-r--r--src/armnnSerializer/Serializer.hpp4
-rw-r--r--src/armnnSerializer/SerializerSupport.md1
-rw-r--r--src/armnnSerializer/test/SerializerTests.cpp42
5 files changed, 81 insertions, 2 deletions
diff --git a/src/armnnSerializer/ArmnnSchema.fbs b/src/armnnSerializer/ArmnnSchema.fbs
index 410849ec8b..dea5889186 100644
--- a/src/armnnSerializer/ArmnnSchema.fbs
+++ b/src/armnnSerializer/ArmnnSchema.fbs
@@ -105,7 +105,8 @@ enum LayerType : uint {
Rsqrt = 21,
Floor = 22,
BatchNormalization = 23,
- Greater = 24
+ Greater = 24,
+ ResizeBilinear = 25
}
// Base layer table to be used as part of other layers
@@ -364,6 +365,17 @@ table BatchNormalizationDescriptor {
dataLayout:DataLayout;
}
+table ResizeBilinearLayer {
+ base:LayerBase;
+ descriptor:ResizeBilinearDescriptor;
+}
+
+table ResizeBilinearDescriptor {
+ targetWidth:uint;
+ targetHeight:uint;
+ dataLayout:DataLayout;
+}
+
union Layer {
ActivationLayer,
AdditionLayer,
@@ -389,7 +401,8 @@ union Layer {
PadLayer,
RsqrtLayer,
FloorLayer,
- GreaterLayer
+ GreaterLayer,
+ ResizeBilinearLayer
}
table AnyLayer {
diff --git a/src/armnnSerializer/Serializer.cpp b/src/armnnSerializer/Serializer.cpp
index b55adb266d..d6df61cbcf 100644
--- a/src/armnnSerializer/Serializer.cpp
+++ b/src/armnnSerializer/Serializer.cpp
@@ -424,6 +424,25 @@ void SerializerVisitor::VisitReshapeLayer(const armnn::IConnectableLayer* layer,
CreateAnyLayer(flatBufferReshapeLayer.o, serializer::Layer::Layer_ReshapeLayer);
}
+void SerializerVisitor::VisitResizeBilinearLayer(const armnn::IConnectableLayer* layer,
+ const armnn::ResizeBilinearDescriptor& resizeDescriptor,
+ const char* name)
+{
+ auto flatBufferBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_ResizeBilinear);
+
+ auto flatBufferDescriptor =
+ CreateResizeBilinearDescriptor(m_flatBufferBuilder,
+ resizeDescriptor.m_TargetWidth,
+ resizeDescriptor.m_TargetHeight,
+ GetFlatBufferDataLayout(resizeDescriptor.m_DataLayout));
+
+ auto flatBufferLayer = serializer::CreateResizeBilinearLayer(m_flatBufferBuilder,
+ flatBufferBaseLayer,
+ flatBufferDescriptor);
+
+ CreateAnyLayer(flatBufferLayer.o, serializer::Layer::Layer_ResizeBilinearLayer);
+}
+
void SerializerVisitor::VisitRsqrtLayer(const armnn::IConnectableLayer* layer, const char* name)
{
auto fbRsqrtBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_Rsqrt);
diff --git a/src/armnnSerializer/Serializer.hpp b/src/armnnSerializer/Serializer.hpp
index 164db19e6a..bbc67d49da 100644
--- a/src/armnnSerializer/Serializer.hpp
+++ b/src/armnnSerializer/Serializer.hpp
@@ -128,6 +128,10 @@ public:
const armnn::ReshapeDescriptor& reshapeDescriptor,
const char* name = nullptr) override;
+ void VisitResizeBilinearLayer(const armnn::IConnectableLayer* layer,
+ const armnn::ResizeBilinearDescriptor& resizeDescriptor,
+ const char* name = nullptr) override;
+
void VisitRsqrtLayer(const armnn::IConnectableLayer* layer,
const char* name = nullptr) override;
diff --git a/src/armnnSerializer/SerializerSupport.md b/src/armnnSerializer/SerializerSupport.md
index f18ef3af68..6071c9c4e8 100644
--- a/src/armnnSerializer/SerializerSupport.md
+++ b/src/armnnSerializer/SerializerSupport.md
@@ -26,6 +26,7 @@ The Arm NN SDK Serializer currently supports the following layers:
* Permute
* Pooling2d
* Reshape
+* ResizeBilinear
* Rsqrt
* Softmax
* SpaceToBatchNd
diff --git a/src/armnnSerializer/test/SerializerTests.cpp b/src/armnnSerializer/test/SerializerTests.cpp
index 7206d6dc53..ad6676edc7 100644
--- a/src/armnnSerializer/test/SerializerTests.cpp
+++ b/src/armnnSerializer/test/SerializerTests.cpp
@@ -1208,4 +1208,46 @@ BOOST_AUTO_TEST_CASE(SerializeRsqrt)
{tensorInfo.GetShape()});
}
+BOOST_AUTO_TEST_CASE(SerializeDeserializeResizeBilinear)
+{
+ class VerifyResizeBilinearName : public armnn::LayerVisitorBase<armnn::VisitorNoThrowPolicy>
+ {
+ public:
+ void VisitResizeBilinearLayer(const armnn::IConnectableLayer*,
+ const armnn::ResizeBilinearDescriptor& descriptor,
+ const char* name) override
+ {
+ BOOST_TEST(name == "ResizeBilinearLayer");
+ }
+ };
+
+ armnn::ResizeBilinearDescriptor desc;
+ desc.m_TargetWidth = 4;
+ desc.m_TargetHeight = 2;
+
+ const armnn::TensorInfo inputTensorInfo = armnn::TensorInfo({1, 3, 5, 5}, armnn::DataType::Float32);
+ const armnn::TensorInfo outputTensorInfo = armnn::TensorInfo({1, 3, 2, 4}, armnn::DataType::Float32);
+
+ armnn::INetworkPtr network = armnn::INetwork::Create();
+ armnn::IConnectableLayer* const inputLayer = network->AddInputLayer(0);
+ armnn::IConnectableLayer* const resizeLayer = network->AddResizeBilinearLayer(desc, "ResizeBilinearLayer");
+ armnn::IConnectableLayer* const outputLayer = network->AddOutputLayer(0);
+
+ inputLayer->GetOutputSlot(0).Connect(resizeLayer->GetInputSlot(0));
+ inputLayer->GetOutputSlot(0).SetTensorInfo(inputTensorInfo);
+ resizeLayer->GetOutputSlot(0).Connect(outputLayer->GetInputSlot(0));
+ resizeLayer->GetOutputSlot(0).SetTensorInfo(outputTensorInfo);
+
+ armnn::INetworkPtr deserializedNetwork = DeserializeNetwork(SerializeNetwork(*network));
+ BOOST_CHECK(deserializedNetwork);
+
+ VerifyResizeBilinearName nameChecker;
+ deserializedNetwork->Accept(nameChecker);
+
+ CheckDeserializedNetworkAgainstOriginal(*network,
+ *deserializedNetwork,
+ {inputTensorInfo.GetShape()},
+ {outputTensorInfo.GetShape()});
+}
+
BOOST_AUTO_TEST_SUITE_END()