aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMatthew Sloyan <matthew.sloyan@arm.com>2020-12-16 12:50:01 +0000
committerJim Flynn <jim.flynn@arm.com>2020-12-17 12:20:58 +0000
commit7515d0730acc926316886a85401bcd36f640627e (patch)
tree97b312e641e7419b14dd6f7b1686afc6b56e788b /src
parentdf82f3abc8acc90acfd56f18744a8cae201a759a (diff)
downloadarmnn-7515d0730acc926316886a85401bcd36f640627e.tar.gz
IVGCVSW-5614 Enable Hard Swish and Elu activations
* Enabled Hard Swish and Elu in TfLiteDelegate * Added support for Elu in TfLiteParser Signed-off-by: Matthew Sloyan <matthew.sloyan@arm.com> Change-Id: If09321b58568a98e14cabce610a1586556da041e
Diffstat (limited to 'src')
-rw-r--r--src/armnnTfLiteParser/TensorFlowLiteSupport.md4
-rw-r--r--src/armnnTfLiteParser/TfLiteParser.cpp14
-rw-r--r--src/armnnTfLiteParser/TfLiteParser.hpp1
-rw-r--r--src/armnnTfLiteParser/test/Activations.cpp12
4 files changed, 31 insertions, 0 deletions
diff --git a/src/armnnTfLiteParser/TensorFlowLiteSupport.md b/src/armnnTfLiteParser/TensorFlowLiteSupport.md
index faad3d0fa9..118fed7f7c 100644
--- a/src/armnnTfLiteParser/TensorFlowLiteSupport.md
+++ b/src/armnnTfLiteParser/TensorFlowLiteSupport.md
@@ -22,10 +22,14 @@ The Arm NN SDK TensorFlow Lite parser currently supports the following operators
* DIV
+* ELU
+
* EXP
* FULLY_CONNECTED, Supported Fused Activation: RELU , RELU6 , TANH, NONE
+* HARD_SWISH
+
* LEAKY_RELU
* LOGISTIC
diff --git a/src/armnnTfLiteParser/TfLiteParser.cpp b/src/armnnTfLiteParser/TfLiteParser.cpp
index c3d56b13d3..9d9f4fa14b 100644
--- a/src/armnnTfLiteParser/TfLiteParser.cpp
+++ b/src/armnnTfLiteParser/TfLiteParser.cpp
@@ -549,6 +549,7 @@ TfLiteParser::TfLiteParser(const Optional<ITfLiteParser::TfLiteParserOptions>& o
m_ParserFunctions[tflite::BuiltinOperator_CUSTOM] = &TfLiteParser::ParseCustomOperator;
m_ParserFunctions[tflite::BuiltinOperator_DEPTHWISE_CONV_2D] = &TfLiteParser::ParseDepthwiseConv2D;
m_ParserFunctions[tflite::BuiltinOperator_DEQUANTIZE] = &TfLiteParser::ParseDequantize;
+ m_ParserFunctions[tflite::BuiltinOperator_ELU] = &TfLiteParser::ParseElu;
m_ParserFunctions[tflite::BuiltinOperator_EXP] = &TfLiteParser::ParseExp;
m_ParserFunctions[tflite::BuiltinOperator_FULLY_CONNECTED] = &TfLiteParser::ParseFullyConnected;
m_ParserFunctions[tflite::BuiltinOperator_HARD_SWISH] = &TfLiteParser::ParseHardSwish;
@@ -1928,6 +1929,11 @@ void TfLiteParser::ParseTanH(size_t subgraphIndex, size_t operatorIndex)
ParseActivation(subgraphIndex,operatorIndex,ActivationFunction::TanH);
}
+void TfLiteParser::ParseElu(size_t subgraphIndex, size_t operatorIndex)
+{
+ ParseActivation(subgraphIndex, operatorIndex, ActivationFunction::Elu);
+}
+
void TfLiteParser::ParseHardSwish(size_t subgraphIndex, size_t operatorIndex)
{
ParseActivation(subgraphIndex, operatorIndex, ActivationFunction::HardSwish);
@@ -1982,9 +1988,17 @@ void TfLiteParser::ParseActivation(size_t subgraphIndex, size_t operatorIndex, A
activationDesc.m_A = options->alpha;
break;
}
+ case ActivationFunction::Elu:
+ {
+ layerName += fmt::format("ELU:{}:{}", subgraphIndex, operatorIndex);
+ activationDesc.m_A = 1.0f;
+ break;
+ }
case ActivationFunction::HardSwish:
+ {
layerName += fmt::format("HARDSWISH:{}:{}", subgraphIndex, operatorIndex);
break;
+ }
default:
{
throw ParseException(
diff --git a/src/armnnTfLiteParser/TfLiteParser.hpp b/src/armnnTfLiteParser/TfLiteParser.hpp
index 9b081a5db9..a8ddc69df8 100644
--- a/src/armnnTfLiteParser/TfLiteParser.hpp
+++ b/src/armnnTfLiteParser/TfLiteParser.hpp
@@ -102,6 +102,7 @@ private:
void ParseDepthwiseConv2D(size_t subgraphIndex, size_t operatorIndex);
void ParseDequantize(size_t subgraphIndex, size_t operatorIndex);
void ParseDetectionPostProcess(size_t subgraphIndex, size_t operatorIndex);
+ void ParseElu(size_t subgraphIndex, size_t operatorIndex);
void ParseExp(size_t subgraphIndex, size_t operatorIndex);
void ParseFullyConnected(size_t subgraphIndex, size_t operatorIndex);
void ParseHardSwish(size_t subgraphIndex, size_t operatorIndex);
diff --git a/src/armnnTfLiteParser/test/Activations.cpp b/src/armnnTfLiteParser/test/Activations.cpp
index e57477e620..f74c22d107 100644
--- a/src/armnnTfLiteParser/test/Activations.cpp
+++ b/src/armnnTfLiteParser/test/Activations.cpp
@@ -106,6 +106,18 @@ BOOST_FIXTURE_TEST_CASE(ParseTanH, TanHFixture)
{ -0.09966799f, -0.19737528f, -0.29131261f, -0.379949f, 0.09966799f, 0.19737528f, 0.29131261f });
}
+struct EluFixture : ActivationFixture
+{
+ EluFixture() : ActivationFixture("ELU", "FLOAT32") {}
+};
+
+BOOST_FIXTURE_TEST_CASE(ParseElu, EluFixture)
+{
+ RunTest<2, armnn::DataType::Float32>(0,
+ { -2.0f, -1.0f, -0.0f, 0.0f, 1.0f, 2.0f, 3.0f },
+ { -0.86466471676f, -0.63212055882f, -0.0f, 0.0f, 1.0f, 2.0f, 3.0f });
+}
+
struct HardSwishFixture : ActivationFixture
{
HardSwishFixture() : ActivationFixture("HARD_SWISH", "FLOAT32") {}