diff options
Diffstat (limited to 'src/armnnSerializer')
-rw-r--r-- | src/armnnSerializer/ArmnnSchema.fbs | 4 | ||||
-rw-r--r-- | src/armnnSerializer/ArmnnSchema_generated.h | 16 | ||||
-rw-r--r-- | src/armnnSerializer/SerializerUtils.cpp | 4 | ||||
-rw-r--r-- | src/armnnSerializer/test/SerializerTests.cpp | 105 |
4 files changed, 64 insertions, 65 deletions
diff --git a/src/armnnSerializer/ArmnnSchema.fbs b/src/armnnSerializer/ArmnnSchema.fbs index 1c9a1de792..753c2443a4 100644 --- a/src/armnnSerializer/ArmnnSchema.fbs +++ b/src/armnnSerializer/ArmnnSchema.fbs @@ -287,7 +287,9 @@ enum UnaryOperation : byte { Sqrt = 2, Exp = 3, Neg = 4, - LogicalNot = 5 + LogicalNot = 5, + Log = 6, + Sin = 7 } table ElementwiseUnaryDescriptor { diff --git a/src/armnnSerializer/ArmnnSchema_generated.h b/src/armnnSerializer/ArmnnSchema_generated.h index fc55d9befa..675fcc6490 100644 --- a/src/armnnSerializer/ArmnnSchema_generated.h +++ b/src/armnnSerializer/ArmnnSchema_generated.h @@ -931,37 +931,43 @@ enum UnaryOperation { UnaryOperation_Exp = 3, UnaryOperation_Neg = 4, UnaryOperation_LogicalNot = 5, + UnaryOperation_Log = 6, + UnaryOperation_Sin = 7, UnaryOperation_MIN = UnaryOperation_Abs, - UnaryOperation_MAX = UnaryOperation_LogicalNot + UnaryOperation_MAX = UnaryOperation_Sin }; -inline const UnaryOperation (&EnumValuesUnaryOperation())[6] { +inline const UnaryOperation (&EnumValuesUnaryOperation())[8] { static const UnaryOperation values[] = { UnaryOperation_Abs, UnaryOperation_Rsqrt, UnaryOperation_Sqrt, UnaryOperation_Exp, UnaryOperation_Neg, - UnaryOperation_LogicalNot + UnaryOperation_LogicalNot, + UnaryOperation_Log, + UnaryOperation_Sin }; return values; } inline const char * const *EnumNamesUnaryOperation() { - static const char * const names[7] = { + static const char * const names[9] = { "Abs", "Rsqrt", "Sqrt", "Exp", "Neg", "LogicalNot", + "Log", + "Sin", nullptr }; return names; } inline const char *EnumNameUnaryOperation(UnaryOperation e) { - if (flatbuffers::IsOutRange(e, UnaryOperation_Abs, UnaryOperation_LogicalNot)) return ""; + if (flatbuffers::IsOutRange(e, UnaryOperation_Abs, UnaryOperation_Sin)) return ""; const size_t index = static_cast<size_t>(e); return EnumNamesUnaryOperation()[index]; } diff --git a/src/armnnSerializer/SerializerUtils.cpp b/src/armnnSerializer/SerializerUtils.cpp index 936fb531d5..1df8d4e608 100644 --- a/src/armnnSerializer/SerializerUtils.cpp +++ b/src/armnnSerializer/SerializerUtils.cpp @@ -119,6 +119,10 @@ armnnSerializer::UnaryOperation GetFlatBufferUnaryOperation(armnn::UnaryOperatio return armnnSerializer::UnaryOperation::UnaryOperation_Neg; case armnn::UnaryOperation::LogicalNot: return armnnSerializer::UnaryOperation::UnaryOperation_LogicalNot; + case armnn::UnaryOperation::Log: + return armnnSerializer::UnaryOperation::UnaryOperation_Log; + case armnn::UnaryOperation::Sin: + return armnnSerializer::UnaryOperation::UnaryOperation_Sin; default: throw armnn::InvalidArgumentException("Unary operation unknown"); } diff --git a/src/armnnSerializer/test/SerializerTests.cpp b/src/armnnSerializer/test/SerializerTests.cpp index 4cb1a81b1a..8e7ca37cfa 100644 --- a/src/armnnSerializer/test/SerializerTests.cpp +++ b/src/armnnSerializer/test/SerializerTests.cpp @@ -23,31 +23,6 @@ using armnnDeserializer::IDeserializer; TEST_SUITE("SerializerTests") { -TEST_CASE("SerializeAbs") -{ - 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_NO_DEPRECATE_WARN_BEGIN - armnn::IConnectableLayer* const absLayer = network->AddAbsLayer(layerName.c_str()); - ARMNN_NO_DEPRECATE_WARN_END - 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)); - CHECK(deserializedNetwork); - - LayerVerifierBase verifier(layerName, {tensorInfo}, {tensorInfo}); - deserializedNetwork->ExecuteStrategy(verifier); -} TEST_CASE("SerializeAddition") { @@ -719,6 +694,51 @@ TEST_CASE("SerializeDeserializeEqual") deserializedNetwork->ExecuteStrategy(verifier); } +void SerializeElementwiseUnaryTest(armnn::UnaryOperation unaryOperation) +{ + auto layerName = GetUnaryOperationAsCString(unaryOperation); + + const armnn::TensorShape shape{2, 1, 2, 2}; + + const armnn::TensorInfo inputInfo = armnn::TensorInfo(shape, armnn::DataType::Float32); + const armnn::TensorInfo outputInfo = armnn::TensorInfo(shape, armnn::DataType::Float32); + + armnn::ElementwiseUnaryDescriptor descriptor(unaryOperation); + + armnn::INetworkPtr network = armnn::INetwork::Create(); + armnn::IConnectableLayer* const inputLayer = network->AddInputLayer(0); + armnn::IConnectableLayer* const elementwiseUnaryLayer = + network->AddElementwiseUnaryLayer(descriptor, layerName); + armnn::IConnectableLayer* const outputLayer = network->AddOutputLayer(0); + + inputLayer->GetOutputSlot(0).Connect(elementwiseUnaryLayer->GetInputSlot(0)); + elementwiseUnaryLayer->GetOutputSlot(0).Connect(outputLayer->GetInputSlot(0)); + + inputLayer->GetOutputSlot(0).SetTensorInfo(inputInfo); + elementwiseUnaryLayer->GetOutputSlot(0).SetTensorInfo(outputInfo); + + armnn::INetworkPtr deserializedNetwork = DeserializeNetwork(SerializeNetwork(*network)); + + CHECK(deserializedNetwork); + + LayerVerifierBaseWithDescriptor<armnn::ElementwiseUnaryDescriptor> + verifier(layerName, { inputInfo }, { outputInfo }, descriptor); + + deserializedNetwork->ExecuteStrategy(verifier); +} + +TEST_CASE("SerializeElementwiseUnary") +{ + using op = armnn::UnaryOperation; + std::initializer_list<op> allUnaryOperations = {op::Abs, op::Exp, op::Sqrt, op::Rsqrt, op::Neg, + op::LogicalNot, op::Log, op::Sin}; + + for (auto unaryOperation : allUnaryOperations) + { + SerializeElementwiseUnaryTest(unaryOperation); + } +} + TEST_CASE("SerializeFill") { const std::string layerName("fill"); @@ -1114,39 +1134,6 @@ TEST_CASE("SerializeLogicalBinary") deserializedNetwork->ExecuteStrategy(verifier); } -TEST_CASE("SerializeLogicalUnary") -{ - const std::string layerName("elementwiseUnaryLogicalNot"); - - const armnn::TensorShape shape{2, 1, 2, 2}; - - const armnn::TensorInfo inputInfo = armnn::TensorInfo(shape, armnn::DataType::Boolean); - const armnn::TensorInfo outputInfo = armnn::TensorInfo(shape, armnn::DataType::Boolean); - - armnn::ElementwiseUnaryDescriptor descriptor(armnn::UnaryOperation::LogicalNot); - - armnn::INetworkPtr network = armnn::INetwork::Create(); - armnn::IConnectableLayer* const inputLayer = network->AddInputLayer(0); - armnn::IConnectableLayer* const elementwiseUnaryLayer = - network->AddElementwiseUnaryLayer(descriptor, layerName.c_str()); - armnn::IConnectableLayer* const outputLayer = network->AddOutputLayer(0); - - inputLayer->GetOutputSlot(0).Connect(elementwiseUnaryLayer->GetInputSlot(0)); - elementwiseUnaryLayer->GetOutputSlot(0).Connect(outputLayer->GetInputSlot(0)); - - inputLayer->GetOutputSlot(0).SetTensorInfo(inputInfo); - elementwiseUnaryLayer->GetOutputSlot(0).SetTensorInfo(outputInfo); - - armnn::INetworkPtr deserializedNetwork = DeserializeNetwork(SerializeNetwork(*network)); - - CHECK(deserializedNetwork); - - LayerVerifierBaseWithDescriptor<armnn::ElementwiseUnaryDescriptor> verifier( - layerName, { inputInfo }, { outputInfo }, descriptor); - - deserializedNetwork->ExecuteStrategy(verifier); -} - TEST_CASE("SerializeLogSoftmax") { const std::string layerName("log_softmax"); @@ -2462,4 +2449,4 @@ TEST_CASE("SerializeDeserializeNonLinearNetwork") deserializedNetwork->ExecuteStrategy(verifier); } -} +}
\ No newline at end of file |