IVGCVSW-2839 Add QuantisedSymm16 support to the ArmNN frontend
Change-Id: I76f4e7db55b0efbb1a5f7d1a32bf451e66add0c7
Signed-off-by: Nattapat Chaimanowong <nattapat.chaimanowong@arm.com>
diff --git a/include/armnn/Types.hpp b/include/armnn/Types.hpp
index 598eaaf..36e3c5b 100644
--- a/include/armnn/Types.hpp
+++ b/include/armnn/Types.hpp
@@ -29,7 +29,8 @@
Float32 = 1,
QuantisedAsymm8 = 2,
Signed32 = 3,
- Boolean = 4
+ Boolean = 4,
+ QuantisedSymm16 = 5
};
enum class DataLayout
diff --git a/include/armnn/TypesUtils.hpp b/include/armnn/TypesUtils.hpp
index e765264..b5fb95d 100644
--- a/include/armnn/TypesUtils.hpp
+++ b/include/armnn/TypesUtils.hpp
@@ -83,6 +83,7 @@
case DataType::Float32:
case DataType::Signed32: return 4U;
case DataType::QuantisedAsymm8: return 1U;
+ case DataType::QuantisedSymm16: return 2U;
case DataType::Boolean: return 1U;
default: return 0U;
}
@@ -128,6 +129,7 @@
case DataType::Float16: return "Float16";
case DataType::Float32: return "Float32";
case DataType::QuantisedAsymm8: return "Unsigned8";
+ case DataType::QuantisedSymm16: return "Signed16";
case DataType::Signed32: return "Signed32";
case DataType::Boolean: return "Boolean";
diff --git a/src/armnn/CompatibleTypes.hpp b/src/armnn/CompatibleTypes.hpp
index 2449876..4e31aed 100644
--- a/src/armnn/CompatibleTypes.hpp
+++ b/src/armnn/CompatibleTypes.hpp
@@ -36,6 +36,12 @@
}
template<>
+inline bool CompatibleTypes<int16_t>(DataType dataType)
+{
+ return dataType == DataType::QuantisedSymm16;
+}
+
+template<>
inline bool CompatibleTypes<int32_t>(DataType dataType)
{
return dataType == DataType::Signed32;
diff --git a/src/armnn/TypeUtils.hpp b/src/armnn/TypeUtils.hpp
index f7d0e07..55269f4 100644
--- a/src/armnn/TypeUtils.hpp
+++ b/src/armnn/TypeUtils.hpp
@@ -33,6 +33,12 @@
};
template<>
+struct ResolveTypeImpl<DataType::QuantisedSymm16>
+{
+ using Type = int16_t;
+};
+
+template<>
struct ResolveTypeImpl<DataType::Signed32>
{
using Type = int32_t;
diff --git a/src/armnnDeserializer/Deserializer.cpp b/src/armnnDeserializer/Deserializer.cpp
index fc84462..152a5b4 100644
--- a/src/armnnDeserializer/Deserializer.cpp
+++ b/src/armnnDeserializer/Deserializer.cpp
@@ -373,6 +373,9 @@
case DataType_QuantisedAsymm8:
type = armnn::DataType::QuantisedAsymm8;
break;
+ case DataType_QuantisedSymm16:
+ type = armnn::DataType::QuantisedSymm16;
+ break;
case DataType_Signed32:
type = armnn::DataType::Signed32;
break;
diff --git a/src/armnnSerializer/ArmnnSchema.fbs b/src/armnnSerializer/ArmnnSchema.fbs
index 00c1a45..a11eead 100644
--- a/src/armnnSerializer/ArmnnSchema.fbs
+++ b/src/armnnSerializer/ArmnnSchema.fbs
@@ -27,7 +27,8 @@
Float32 = 1,
QuantisedAsymm8 = 2,
Signed32 = 3,
- Boolean = 4
+ Boolean = 4,
+ QuantisedSymm16 = 5
}
enum DataLayout : byte {
diff --git a/src/armnnSerializer/Serializer.cpp b/src/armnnSerializer/Serializer.cpp
index 0340f56..cf67022 100644
--- a/src/armnnSerializer/Serializer.cpp
+++ b/src/armnnSerializer/Serializer.cpp
@@ -855,6 +855,15 @@
fbPayload = flatBuffersData.o;
break;
}
+ case armnn::DataType::QuantisedSymm16:
+ {
+ auto fbVector = CreateDataVector<int16_t>(constTensor.GetMemoryArea(), constTensor.GetNumBytes());
+ flatbuffers::Offset<serializer::ShortData> flatBuffersData = serializer::CreateShortData(
+ m_flatBufferBuilder,
+ fbVector);
+ fbPayload = flatBuffersData.o;
+ break;
+ }
case armnn::DataType::QuantisedAsymm8:
case armnn::DataType::Boolean:
default: