From cd5ac23039dc3acd750c44442960280cc33307ef Mon Sep 17 00:00:00 2001 From: Nattapat Chaimanowong Date: Tue, 19 Mar 2019 12:26:36 +0000 Subject: [PATCH] IVGCVSW-2839 Add QuantisedSymm16 support to the ArmNN frontend Change-Id: I76f4e7db55b0efbb1a5f7d1a32bf451e66add0c7 Signed-off-by: Nattapat Chaimanowong --- include/armnn/Types.hpp | 3 ++- include/armnn/TypesUtils.hpp | 2 ++ src/armnn/CompatibleTypes.hpp | 6 ++++++ src/armnn/TypeUtils.hpp | 6 ++++++ src/armnnDeserializer/Deserializer.cpp | 3 +++ src/armnnSerializer/ArmnnSchema.fbs | 3 ++- src/armnnSerializer/Serializer.cpp | 9 +++++++++ 7 files changed, 30 insertions(+), 2 deletions(-) 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 @@ enum class DataType 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 @@ constexpr unsigned int GetDataTypeSize(DataType dataType) 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 @@ constexpr const char* GetDataTypeName(DataType dataType) 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 @@ inline bool CompatibleTypes(DataType dataType) } template<> +inline bool CompatibleTypes(DataType dataType) +{ + return dataType == DataType::QuantisedSymm16; +} + +template<> inline bool CompatibleTypes(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 @@ struct ResolveTypeImpl }; template<> +struct ResolveTypeImpl +{ + using Type = int16_t; +}; + +template<> struct ResolveTypeImpl { 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 @@ armnn::TensorInfo ToTensorInfo(Deserializer::TensorRawPtr tensorPtr) 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 @@ enum DataType : byte { 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 @@ flatbuffers::Offset fbPayload = flatBuffersData.o; break; } + case armnn::DataType::QuantisedSymm16: + { + auto fbVector = CreateDataVector(constTensor.GetMemoryArea(), constTensor.GetNumBytes()); + flatbuffers::Offset flatBuffersData = serializer::CreateShortData( + m_flatBufferBuilder, + fbVector); + fbPayload = flatBuffersData.o; + break; + } case armnn::DataType::QuantisedAsymm8: case armnn::DataType::Boolean: default: -- 2.7.4