aboutsummaryrefslogtreecommitdiff
path: root/src/armnnSerializer
diff options
context:
space:
mode:
Diffstat (limited to 'src/armnnSerializer')
-rw-r--r--src/armnnSerializer/ArmnnSchema.fbs25
-rw-r--r--src/armnnSerializer/Serializer.cpp15
-rw-r--r--src/armnnSerializer/Serializer.hpp6
-rw-r--r--src/armnnSerializer/SerializerSupport.md7
-rw-r--r--src/armnnSerializer/SerializerUtils.cpp19
-rw-r--r--src/armnnSerializer/SerializerUtils.hpp2
-rw-r--r--src/armnnSerializer/test/SerializerTests.cpp51
7 files changed, 70 insertions, 55 deletions
diff --git a/src/armnnSerializer/ArmnnSchema.fbs b/src/armnnSerializer/ArmnnSchema.fbs
index 0d30d96452..0f8a816093 100644
--- a/src/armnnSerializer/ArmnnSchema.fbs
+++ b/src/armnnSerializer/ArmnnSchema.fbs
@@ -147,7 +147,8 @@ enum LayerType : uint {
InstanceNormalization = 50,
LogSoftmax = 51,
Comparison = 52,
- StandIn = 53
+ StandIn = 53,
+ ElementwiseUnary = 54
}
// Base layer table to be used as part of other layers
@@ -166,6 +167,7 @@ table BindableLayerBase {
// Table for each layer defined below
+/// @deprecated Use ElementwiseUnaryLayer instead
table AbsLayer {
base:LayerBase;
}
@@ -252,6 +254,23 @@ table DivisionLayer {
base:LayerBase;
}
+enum UnaryOperation : byte {
+ Abs = 0,
+ Rsqrt = 1,
+ Sqrt = 2,
+ Exp = 3,
+ Neg = 4
+}
+
+table ElementwiseUnaryDescriptor {
+ operation:UnaryOperation;
+}
+
+table ElementwiseUnaryLayer {
+ base:LayerBase;
+ descriptor:ElementwiseUnaryDescriptor;
+}
+
/// @deprecated Use ComparisonLayer instead
table EqualLayer {
base:LayerBase;
@@ -502,6 +521,7 @@ table PadDescriptor {
padValue:float = 0;
}
+/// @deprecated Use ElementwiseUnaryLayer instead
table RsqrtLayer {
base:LayerBase;
}
@@ -798,7 +818,8 @@ union Layer {
InstanceNormalizationLayer,
LogSoftmaxLayer,
ComparisonLayer,
- StandInLayer
+ StandInLayer,
+ ElementwiseUnaryLayer
}
table AnyLayer {
diff --git a/src/armnnSerializer/Serializer.cpp b/src/armnnSerializer/Serializer.cpp
index 91b62413d8..13ea0f04a9 100644
--- a/src/armnnSerializer/Serializer.cpp
+++ b/src/armnnSerializer/Serializer.cpp
@@ -439,6 +439,21 @@ void SerializerVisitor::VisitDivisionLayer(const armnn::IConnectableLayer* layer
CreateAnyLayer(fbDivisionLayer.o, serializer::Layer::Layer_DivisionLayer);
}
+void SerializerVisitor::VisitElementwiseUnaryLayer(const armnn::IConnectableLayer* layer,
+ const armnn::ElementwiseUnaryDescriptor& descriptor,
+ const char* name)
+{
+ boost::ignore_unused(name);
+
+ auto fbBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_ElementwiseUnary);
+ auto fbDescriptor = serializer::CreateElementwiseUnaryDescriptor(
+ m_flatBufferBuilder,
+ GetFlatBufferUnaryOperation(descriptor.m_Operation));
+
+ auto fbLayer = serializer::CreateElementwiseUnaryLayer(m_flatBufferBuilder, fbBaseLayer, fbDescriptor);
+ CreateAnyLayer(fbLayer.o, serializer::Layer::Layer_ElementwiseUnaryLayer);
+}
+
void SerializerVisitor::VisitEqualLayer(const armnn::IConnectableLayer* layer, const char* name)
{
boost::ignore_unused(name);
diff --git a/src/armnnSerializer/Serializer.hpp b/src/armnnSerializer/Serializer.hpp
index 7dfd534081..d92c93d46c 100644
--- a/src/armnnSerializer/Serializer.hpp
+++ b/src/armnnSerializer/Serializer.hpp
@@ -44,6 +44,7 @@ public:
return m_serializedLayers;
}
+ ARMNN_DEPRECATED_MSG("Use VisitElementwiseUnaryLayer instead")
void VisitAbsLayer(const armnn::IConnectableLayer* layer,
const char* name = nullptr) override;
@@ -109,6 +110,10 @@ public:
void VisitDivisionLayer(const armnn::IConnectableLayer* layer,
const char* name = nullptr) override;
+ void VisitElementwiseUnaryLayer(const armnn::IConnectableLayer* layer,
+ const armnn::ElementwiseUnaryDescriptor& descriptor,
+ const char* name = nullptr) override;
+
ARMNN_DEPRECATED_MSG("Use VisitComparisonLayer instead")
void VisitEqualLayer(const armnn::IConnectableLayer* layer,
const char* name = nullptr) override;
@@ -210,6 +215,7 @@ public:
const armnn::ResizeBilinearDescriptor& resizeDescriptor,
const char* name = nullptr) override;
+ ARMNN_DEPRECATED_MSG("Use VisitElementwiseUnaryLayer instead")
void VisitRsqrtLayer(const armnn::IConnectableLayer* layer,
const char* name = nullptr) override;
diff --git a/src/armnnSerializer/SerializerSupport.md b/src/armnnSerializer/SerializerSupport.md
index 4fc880a856..2f77a8e778 100644
--- a/src/armnnSerializer/SerializerSupport.md
+++ b/src/armnnSerializer/SerializerSupport.md
@@ -6,12 +6,12 @@ This reference guide provides a list of layers which can be serialized currently
The Arm NN SDK Serializer currently supports the following layers:
-* Abs
* Activation
* Addition
* ArgMinMax
* BatchToSpaceNd
* BatchNormalization
+* Comparison
* Concat
* Constant
* Convolution2d
@@ -20,6 +20,7 @@ The Arm NN SDK Serializer currently supports the following layers:
* Dequantize
* DetectionPostProcess
* Division
+* ElementwiseUnary
* Floor
* FullyConnected
* Gather
@@ -43,7 +44,6 @@ The Arm NN SDK Serializer currently supports the following layers:
* QuantizedLstm
* Reshape
* Resize
-* Rsqrt
* Slice
* Softmax
* SpaceToBatchNd
@@ -66,3 +66,6 @@ Some layers have been deprecated and replaced by others layers. In order to main
* Merger will deserialize as Concat
* Greater will deserialize as Comparison
* ResizeBilinear will deserialize as Resize
+* Abs will deserialize as ElementwiseUnary
+* Rsqrt will deserialize as ElementwiseUnary
+
diff --git a/src/armnnSerializer/SerializerUtils.cpp b/src/armnnSerializer/SerializerUtils.cpp
index df1ef285de..02a5ed3872 100644
--- a/src/armnnSerializer/SerializerUtils.cpp
+++ b/src/armnnSerializer/SerializerUtils.cpp
@@ -79,6 +79,25 @@ armnnSerializer::DataLayout GetFlatBufferDataLayout(armnn::DataLayout dataLayout
}
}
+armnnSerializer::UnaryOperation GetFlatBufferUnaryOperation(armnn::UnaryOperation comparisonOperation)
+{
+ switch (comparisonOperation)
+ {
+ case armnn::UnaryOperation::Abs:
+ return armnnSerializer::UnaryOperation::UnaryOperation_Abs;
+ case armnn::UnaryOperation::Rsqrt:
+ return armnnSerializer::UnaryOperation::UnaryOperation_Rsqrt;
+ case armnn::UnaryOperation::Sqrt:
+ return armnnSerializer::UnaryOperation::UnaryOperation_Sqrt;
+ case armnn::UnaryOperation::Exp:
+ return armnnSerializer::UnaryOperation::UnaryOperation_Exp;
+ case armnn::UnaryOperation::Neg:
+ return armnnSerializer::UnaryOperation::UnaryOperation_Neg;
+ default:
+ throw armnn::InvalidArgumentException("Unary operation unknown");
+ }
+}
+
armnnSerializer::PoolingAlgorithm GetFlatBufferPoolingAlgorithm(armnn::PoolingAlgorithm poolingAlgorithm)
{
switch (poolingAlgorithm)
diff --git a/src/armnnSerializer/SerializerUtils.hpp b/src/armnnSerializer/SerializerUtils.hpp
index 48553334ba..edd48a5e25 100644
--- a/src/armnnSerializer/SerializerUtils.hpp
+++ b/src/armnnSerializer/SerializerUtils.hpp
@@ -18,6 +18,8 @@ armnnSerializer::DataType GetFlatBufferDataType(armnn::DataType dataType);
armnnSerializer::DataLayout GetFlatBufferDataLayout(armnn::DataLayout dataLayout);
+armnnSerializer::UnaryOperation GetFlatBufferUnaryOperation(armnn::UnaryOperation unaryOperation);
+
armnnSerializer::PoolingAlgorithm GetFlatBufferPoolingAlgorithm(armnn::PoolingAlgorithm poolingAlgorithm);
armnnSerializer::OutputShapeRounding GetFlatBufferOutputShapeRounding(
diff --git a/src/armnnSerializer/test/SerializerTests.cpp b/src/armnnSerializer/test/SerializerTests.cpp
index 2b13109725..47804fe328 100644
--- a/src/armnnSerializer/test/SerializerTests.cpp
+++ b/src/armnnSerializer/test/SerializerTests.cpp
@@ -268,32 +268,6 @@ static std::vector<DataType> GenerateRandomData(size_t size)
BOOST_AUTO_TEST_SUITE(SerializerTests)
-BOOST_AUTO_TEST_CASE(SerializeAbs)
-{
- DECLARE_LAYER_VERIFIER_CLASS(Abs)
-
- const std::string layerName("abs");
- const armnn::TensorInfo tensorInfo({1, 2, 3}, armnn::DataType::Float32);
-
- armnn::INetworkPtr network = armnn::INetwork::Create();
- armnn::IConnectableLayer* const inputLayer = network->AddInputLayer(0);
-
- armnn::IConnectableLayer* const absLayer = network->AddAbsLayer(layerName.c_str());
- armnn::IConnectableLayer* const outputLayer = network->AddOutputLayer(0);
-
- inputLayer->GetOutputSlot(0).Connect(absLayer->GetInputSlot(0));
- absLayer->GetOutputSlot(0).Connect(outputLayer->GetInputSlot(0));
-
- inputLayer->GetOutputSlot(0).SetTensorInfo(tensorInfo);
- absLayer->GetOutputSlot(0).SetTensorInfo(tensorInfo);
-
- armnn::INetworkPtr deserializedNetwork = DeserializeNetwork(SerializeNetwork(*network));
- BOOST_CHECK(deserializedNetwork);
-
- AbsLayerVerifier verifier(layerName, {tensorInfo}, {tensorInfo});
- deserializedNetwork->Accept(verifier);
-}
-
BOOST_AUTO_TEST_CASE(SerializeAddition)
{
DECLARE_LAYER_VERIFIER_CLASS(Addition)
@@ -2176,31 +2150,6 @@ BOOST_AUTO_TEST_CASE(EnsureResizeBilinearBackwardCompatibility)
deserializedNetwork->Accept(verifier);
}
-BOOST_AUTO_TEST_CASE(SerializeRsqrt)
-{
- DECLARE_LAYER_VERIFIER_CLASS(Rsqrt)
-
- const std::string layerName("rsqrt");
- const armnn::TensorInfo tensorInfo({ 3, 1, 2 }, armnn::DataType::Float32);
-
- armnn::INetworkPtr network = armnn::INetwork::Create();
- armnn::IConnectableLayer* const inputLayer = network->AddInputLayer(0);
- armnn::IConnectableLayer* const rsqrtLayer = network->AddRsqrtLayer(layerName.c_str());
- armnn::IConnectableLayer* const outputLayer = network->AddOutputLayer(0);
-
- inputLayer->GetOutputSlot(0).Connect(rsqrtLayer->GetInputSlot(0));
- rsqrtLayer->GetOutputSlot(0).Connect(outputLayer->GetInputSlot(0));
-
- inputLayer->GetOutputSlot(0).SetTensorInfo(tensorInfo);
- rsqrtLayer->GetOutputSlot(0).SetTensorInfo(tensorInfo);
-
- armnn::INetworkPtr deserializedNetwork = DeserializeNetwork(SerializeNetwork(*network));
- BOOST_CHECK(deserializedNetwork);
-
- RsqrtLayerVerifier verifier(layerName, {tensorInfo}, {tensorInfo});
- deserializedNetwork->Accept(verifier);
-}
-
BOOST_AUTO_TEST_CASE(SerializeSlice)
{
DECLARE_LAYER_VERIFIER_CLASS_WITH_DESCRIPTOR(Slice)