blob: 970c4151175bea998f338fe3a4f2a751da48e45e [file] [log] [blame]
Saoirse Stewart3166c3e2019-02-18 15:24:53 +00001//
Mike Kelly3ec30772023-03-08 13:47:17 +00002// Copyright © 2017,2019-2021,2023 Arm Ltd and Contributors. All rights reserved.
Saoirse Stewart3166c3e2019-02-18 15:24:53 +00003// SPDX-License-Identifier: MIT
4//
5
6#include "SerializerUtils.hpp"
7
8namespace armnnSerializer
9{
10
Aron Virginas-Tare80ebd12019-10-17 16:11:54 +010011armnnSerializer::ComparisonOperation GetFlatBufferComparisonOperation(armnn::ComparisonOperation comparisonOperation)
12{
13 switch (comparisonOperation)
14 {
15 case armnn::ComparisonOperation::Equal:
16 return armnnSerializer::ComparisonOperation::ComparisonOperation_Equal;
17 case armnn::ComparisonOperation::Greater:
18 return armnnSerializer::ComparisonOperation::ComparisonOperation_Greater;
19 case armnn::ComparisonOperation::GreaterOrEqual:
20 return armnnSerializer::ComparisonOperation::ComparisonOperation_GreaterOrEqual;
21 case armnn::ComparisonOperation::Less:
22 return armnnSerializer::ComparisonOperation::ComparisonOperation_Less;
23 case armnn::ComparisonOperation::LessOrEqual:
24 return armnnSerializer::ComparisonOperation::ComparisonOperation_LessOrEqual;
25 case armnn::ComparisonOperation::NotEqual:
26 default:
27 return armnnSerializer::ComparisonOperation::ComparisonOperation_NotEqual;
28 }
29}
Saoirse Stewart3166c3e2019-02-18 15:24:53 +000030
James Conroyaba90cd2020-11-06 16:28:18 +000031armnnSerializer::LogicalBinaryOperation GetFlatBufferLogicalBinaryOperation(
32 armnn::LogicalBinaryOperation logicalBinaryOperation)
33{
34 switch (logicalBinaryOperation)
35 {
36 case armnn::LogicalBinaryOperation::LogicalAnd:
37 return armnnSerializer::LogicalBinaryOperation::LogicalBinaryOperation_LogicalAnd;
38 case armnn::LogicalBinaryOperation::LogicalOr:
39 return armnnSerializer::LogicalBinaryOperation::LogicalBinaryOperation_LogicalOr;
40 default:
41 throw armnn::InvalidArgumentException("Logical Binary operation unknown");
42 }
43}
44
Derek Lamberti0028d1b2019-02-20 13:57:42 +000045armnnSerializer::ConstTensorData GetFlatBufferConstTensorData(armnn::DataType dataType)
Mike Kellya0766c32019-02-19 17:22:07 +000046{
47 switch (dataType)
48 {
Derek Lamberti0028d1b2019-02-20 13:57:42 +000049 case armnn::DataType::Float32:
50 case armnn::DataType::Signed32:
51 return armnnSerializer::ConstTensorData::ConstTensorData_IntData;
52 case armnn::DataType::Float16:
Derek Lambertif90c56d2020-01-10 17:14:08 +000053 case armnn::DataType::QSymmS16:
Derek Lamberti0028d1b2019-02-20 13:57:42 +000054 return armnnSerializer::ConstTensorData::ConstTensorData_ShortData;
Teresa Charlin8e0d6082021-03-14 15:05:32 +000055 case armnn::DataType::QAsymmS8:
Derek Lambertif90c56d2020-01-10 17:14:08 +000056 case armnn::DataType::QAsymmU8:
Sadik Armagan1a84fe32020-03-27 15:56:57 +000057 case armnn::DataType::QSymmS8:
Derek Lamberti0028d1b2019-02-20 13:57:42 +000058 case armnn::DataType::Boolean:
59 return armnnSerializer::ConstTensorData::ConstTensorData_ByteData;
Mike Kelly1f140f72021-04-06 12:25:55 +010060 case armnn::DataType::Signed64:
61 return armnnSerializer::ConstTensorData::ConstTensorData_LongData;
Mike Kellya0766c32019-02-19 17:22:07 +000062 default:
Derek Lamberti0028d1b2019-02-20 13:57:42 +000063 return armnnSerializer::ConstTensorData::ConstTensorData_NONE;
Mike Kellya0766c32019-02-19 17:22:07 +000064 }
65}
66
Derek Lamberti0028d1b2019-02-20 13:57:42 +000067armnnSerializer::DataType GetFlatBufferDataType(armnn::DataType dataType)
Saoirse Stewart3166c3e2019-02-18 15:24:53 +000068{
69 switch (dataType)
70 {
Derek Lamberti0028d1b2019-02-20 13:57:42 +000071 case armnn::DataType::Float32:
72 return armnnSerializer::DataType::DataType_Float32;
73 case armnn::DataType::Float16:
74 return armnnSerializer::DataType::DataType_Float16;
75 case armnn::DataType::Signed32:
76 return armnnSerializer::DataType::DataType_Signed32;
Mike Kelly1f140f72021-04-06 12:25:55 +010077 case armnn::DataType::Signed64:
78 return armnnSerializer::DataType::DataType_Signed64;
Derek Lambertif90c56d2020-01-10 17:14:08 +000079 case armnn::DataType::QSymmS16:
80 return armnnSerializer::DataType::DataType_QSymmS16;
Francis Murtaghddb1d062020-03-10 13:51:45 +000081 case armnn::DataType::QAsymmS8:
82 return armnnSerializer::DataType::DataType_QAsymmS8;
Derek Lambertif90c56d2020-01-10 17:14:08 +000083 case armnn::DataType::QAsymmU8:
84 return armnnSerializer::DataType::DataType_QAsymmU8;
Sadik Armagan1a84fe32020-03-27 15:56:57 +000085 case armnn::DataType::QSymmS8:
86 return armnnSerializer::DataType::DataType_QSymmS8;
Derek Lamberti0028d1b2019-02-20 13:57:42 +000087 case armnn::DataType::Boolean:
88 return armnnSerializer::DataType::DataType_Boolean;
Saoirse Stewart3166c3e2019-02-18 15:24:53 +000089 default:
Derek Lamberti0028d1b2019-02-20 13:57:42 +000090 return armnnSerializer::DataType::DataType_Float16;
Saoirse Stewart3166c3e2019-02-18 15:24:53 +000091 }
92}
93
Derek Lamberti0028d1b2019-02-20 13:57:42 +000094armnnSerializer::DataLayout GetFlatBufferDataLayout(armnn::DataLayout dataLayout)
Saoirse Stewart3166c3e2019-02-18 15:24:53 +000095{
96 switch (dataLayout)
97 {
Derek Lamberti0028d1b2019-02-20 13:57:42 +000098 case armnn::DataLayout::NHWC:
99 return armnnSerializer::DataLayout::DataLayout_NHWC;
Matthew Sloyanb63a3112021-09-08 13:05:51 +0100100 case armnn::DataLayout::NDHWC:
101 return armnnSerializer::DataLayout::DataLayout_NDHWC;
Matthew Sloyan5d7b0a32021-10-18 13:07:49 +0100102 case armnn::DataLayout::NCDHW:
103 return armnnSerializer::DataLayout::DataLayout_NCDHW;
Derek Lamberti0028d1b2019-02-20 13:57:42 +0000104 case armnn::DataLayout::NCHW:
Saoirse Stewart3166c3e2019-02-18 15:24:53 +0000105 default:
Derek Lamberti0028d1b2019-02-20 13:57:42 +0000106 return armnnSerializer::DataLayout::DataLayout_NCHW;
Saoirse Stewart3166c3e2019-02-18 15:24:53 +0000107 }
108}
109
Mike Kelly3ec30772023-03-08 13:47:17 +0000110armnnSerializer::BinaryOperation GetFlatBufferBinaryOperation(armnn::BinaryOperation binaryOperation)
josh minor4a3c6102020-01-06 16:40:46 -0600111{
Mike Kelly3ec30772023-03-08 13:47:17 +0000112 switch (binaryOperation)
113 {
114 case armnn::BinaryOperation::Add:
115 return armnnSerializer::BinaryOperation::BinaryOperation_Add;
116 case armnn::BinaryOperation::Div:
117 return armnnSerializer::BinaryOperation::BinaryOperation_Div;
118 case armnn::BinaryOperation::Maximum:
119 return armnnSerializer::BinaryOperation::BinaryOperation_Maximum;
120 case armnn::BinaryOperation::Minimum:
121 return armnnSerializer::BinaryOperation::BinaryOperation_Minimum;
122 case armnn::BinaryOperation::Mul:
123 return armnnSerializer::BinaryOperation::BinaryOperation_Mul;
124 case armnn::BinaryOperation::Sub:
125 return armnnSerializer::BinaryOperation::BinaryOperation_Sub;
John Mcloughlin0ec00872023-05-15 17:03:49 +0100126 case armnn::BinaryOperation::SqDiff:
127 return armnnSerializer::BinaryOperation::BinaryOperation_SqDiff;
128 case armnn::BinaryOperation::Power:
129 return armnnSerializer::BinaryOperation::BinaryOperation_Power;
Mike Kelly3ec30772023-03-08 13:47:17 +0000130 default:
131 throw armnn::InvalidArgumentException("Elementwise Binary operation unknown");
132 }
133}
134
135armnnSerializer::UnaryOperation GetFlatBufferUnaryOperation(armnn::UnaryOperation unaryOperation)
136{
137 switch (unaryOperation)
josh minor4a3c6102020-01-06 16:40:46 -0600138 {
139 case armnn::UnaryOperation::Abs:
140 return armnnSerializer::UnaryOperation::UnaryOperation_Abs;
Teresa Charlin93f0ad02023-03-23 15:28:02 +0000141 case armnn::UnaryOperation::Ceil:
142 return armnnSerializer::UnaryOperation::UnaryOperation_Ceil;
josh minor4a3c6102020-01-06 16:40:46 -0600143 case armnn::UnaryOperation::Rsqrt:
144 return armnnSerializer::UnaryOperation::UnaryOperation_Rsqrt;
145 case armnn::UnaryOperation::Sqrt:
146 return armnnSerializer::UnaryOperation::UnaryOperation_Sqrt;
147 case armnn::UnaryOperation::Exp:
148 return armnnSerializer::UnaryOperation::UnaryOperation_Exp;
149 case armnn::UnaryOperation::Neg:
150 return armnnSerializer::UnaryOperation::UnaryOperation_Neg;
James Conroyaba90cd2020-11-06 16:28:18 +0000151 case armnn::UnaryOperation::LogicalNot:
152 return armnnSerializer::UnaryOperation::UnaryOperation_LogicalNot;
Teresa Charlin50de4fa2021-05-31 18:47:33 +0100153 case armnn::UnaryOperation::Log:
154 return armnnSerializer::UnaryOperation::UnaryOperation_Log;
155 case armnn::UnaryOperation::Sin:
156 return armnnSerializer::UnaryOperation::UnaryOperation_Sin;
josh minor4a3c6102020-01-06 16:40:46 -0600157 default:
Mike Kelly3ec30772023-03-08 13:47:17 +0000158 throw armnn::InvalidArgumentException("Elementwise Unary operation unknown");
josh minor4a3c6102020-01-06 16:40:46 -0600159 }
160}
161
Derek Lamberti0028d1b2019-02-20 13:57:42 +0000162armnnSerializer::PoolingAlgorithm GetFlatBufferPoolingAlgorithm(armnn::PoolingAlgorithm poolingAlgorithm)
Saoirse Stewart3166c3e2019-02-18 15:24:53 +0000163{
164 switch (poolingAlgorithm)
165 {
Derek Lamberti0028d1b2019-02-20 13:57:42 +0000166 case armnn::PoolingAlgorithm::Average:
167 return armnnSerializer::PoolingAlgorithm::PoolingAlgorithm_Average;
168 case armnn::PoolingAlgorithm::L2:
169 return armnnSerializer::PoolingAlgorithm::PoolingAlgorithm_L2;
170 case armnn::PoolingAlgorithm::Max:
Saoirse Stewart3166c3e2019-02-18 15:24:53 +0000171 default:
Derek Lamberti0028d1b2019-02-20 13:57:42 +0000172 return armnnSerializer::PoolingAlgorithm::PoolingAlgorithm_Max;
Saoirse Stewart3166c3e2019-02-18 15:24:53 +0000173 }
174}
175
Derek Lamberti0028d1b2019-02-20 13:57:42 +0000176armnnSerializer::OutputShapeRounding GetFlatBufferOutputShapeRounding(armnn::OutputShapeRounding outputShapeRounding)
Saoirse Stewart3166c3e2019-02-18 15:24:53 +0000177{
178 switch (outputShapeRounding)
179 {
Derek Lamberti0028d1b2019-02-20 13:57:42 +0000180 case armnn::OutputShapeRounding::Ceiling:
181 return armnnSerializer::OutputShapeRounding::OutputShapeRounding_Ceiling;
182 case armnn::OutputShapeRounding::Floor:
Saoirse Stewart3166c3e2019-02-18 15:24:53 +0000183 default:
Derek Lamberti0028d1b2019-02-20 13:57:42 +0000184 return armnnSerializer::OutputShapeRounding::OutputShapeRounding_Floor;
Saoirse Stewart3166c3e2019-02-18 15:24:53 +0000185 }
186}
187
Derek Lamberti0028d1b2019-02-20 13:57:42 +0000188armnnSerializer::PaddingMethod GetFlatBufferPaddingMethod(armnn::PaddingMethod paddingMethod)
Saoirse Stewart3166c3e2019-02-18 15:24:53 +0000189{
190 switch (paddingMethod)
191 {
Derek Lamberti0028d1b2019-02-20 13:57:42 +0000192 case armnn::PaddingMethod::IgnoreValue:
193 return armnnSerializer::PaddingMethod::PaddingMethod_IgnoreValue;
194 case armnn::PaddingMethod::Exclude:
Saoirse Stewart3166c3e2019-02-18 15:24:53 +0000195 default:
Derek Lamberti0028d1b2019-02-20 13:57:42 +0000196 return armnnSerializer::PaddingMethod::PaddingMethod_Exclude;
Saoirse Stewart3166c3e2019-02-18 15:24:53 +0000197 }
198}
199
Matthew Sloyan2e5d0b22021-10-21 14:05:31 +0100200armnnSerializer::PaddingMode GetFlatBufferPaddingMode(armnn::PaddingMode paddingMode)
201{
202 switch (paddingMode)
203 {
204 case armnn::PaddingMode::Reflect:
205 return armnnSerializer::PaddingMode::PaddingMode_Reflect;
206 case armnn::PaddingMode::Symmetric:
207 return armnnSerializer::PaddingMode::PaddingMode_Symmetric;
208 default:
209 return armnnSerializer::PaddingMode::PaddingMode_Constant;
210 }
211}
212
Nina Drozd57728782019-02-27 10:53:27 +0000213armnnSerializer::NormalizationAlgorithmChannel GetFlatBufferNormalizationAlgorithmChannel(
214 armnn::NormalizationAlgorithmChannel normalizationAlgorithmChannel)
215{
216 switch (normalizationAlgorithmChannel)
217 {
218 case armnn::NormalizationAlgorithmChannel::Across:
219 return armnnSerializer::NormalizationAlgorithmChannel::NormalizationAlgorithmChannel_Across;
220 case armnn::NormalizationAlgorithmChannel::Within:
221 return armnnSerializer::NormalizationAlgorithmChannel::NormalizationAlgorithmChannel_Within;
222 default:
223 return armnnSerializer::NormalizationAlgorithmChannel::NormalizationAlgorithmChannel_Across;
224 }
225}
226
227armnnSerializer::NormalizationAlgorithmMethod GetFlatBufferNormalizationAlgorithmMethod(
228 armnn::NormalizationAlgorithmMethod normalizationAlgorithmMethod)
229{
230 switch (normalizationAlgorithmMethod)
231 {
232 case armnn::NormalizationAlgorithmMethod::LocalBrightness:
233 return armnnSerializer::NormalizationAlgorithmMethod::NormalizationAlgorithmMethod_LocalBrightness;
234 case armnn::NormalizationAlgorithmMethod::LocalContrast:
235 return armnnSerializer::NormalizationAlgorithmMethod::NormalizationAlgorithmMethod_LocalContrast;
236 default:
237 return armnnSerializer::NormalizationAlgorithmMethod::NormalizationAlgorithmMethod_LocalBrightness;
238 }
239}
240
FinnWilliamsArm6fb339a2019-06-28 15:07:10 +0100241armnnSerializer::ResizeMethod GetFlatBufferResizeMethod(armnn::ResizeMethod method)
242{
243 switch (method)
244 {
245 case armnn::ResizeMethod::NearestNeighbor:
246 return armnnSerializer::ResizeMethod_NearestNeighbor;
247 case armnn::ResizeMethod::Bilinear:
248 return armnnSerializer::ResizeMethod_Bilinear;
249 default:
250 return armnnSerializer::ResizeMethod_NearestNeighbor;
251 }
252}
253
Sadik Armagan0c3ea5b2021-02-03 09:29:30 +0000254armnnSerializer::ReduceOperation GetFlatBufferReduceOperation(armnn::ReduceOperation reduceOperation)
255{
256 switch (reduceOperation)
257 {
258 case armnn::ReduceOperation::Sum:
259 return armnnSerializer::ReduceOperation::ReduceOperation_Sum;
260 case armnn::ReduceOperation::Max:
261 return armnnSerializer::ReduceOperation::ReduceOperation_Max;
262 case armnn::ReduceOperation::Mean:
263 return armnnSerializer::ReduceOperation::ReduceOperation_Mean;
264 case armnn::ReduceOperation::Min:
265 return armnnSerializer::ReduceOperation::ReduceOperation_Min;
Teresa Charlin4e3e8312021-08-05 12:34:37 +0100266 case armnn::ReduceOperation::Prod:
267 return armnnSerializer::ReduceOperation::ReduceOperation_Prod;
Sadik Armagan0c3ea5b2021-02-03 09:29:30 +0000268 default:
269 return armnnSerializer::ReduceOperation::ReduceOperation_Sum;
270 }
271}
272
Aron Virginas-Tare80ebd12019-10-17 16:11:54 +0100273} // namespace armnnSerializer