1 // clang-format off 2 // Generated file (from: roi_align.mod.py). Do not edit 3 void CreateModel_nhwc(Model *model) { 4 OperandType type0(Type::BOOL, {}); 5 OperandType type1(Type::TENSOR_FLOAT32, {1, 4, 4, 1}); 6 OperandType type2(Type::TENSOR_FLOAT32, {4, 4}); 7 OperandType type3(Type::TENSOR_FLOAT32, {4, 2, 2, 1}); 8 OperandType type4(Type::TENSOR_INT32, {4}); 9 OperandType type5(Type::INT32, {}); 10 OperandType type6(Type::FLOAT32, {}); 11 // Phase 1, operands 12 auto in = model->addOperand(&type1); 13 auto roi = model->addOperand(&type2); 14 auto param = model->addOperand(&type4); 15 auto param1 = model->addOperand(&type5); 16 auto param2 = model->addOperand(&type5); 17 auto param3 = model->addOperand(&type6); 18 auto param4 = model->addOperand(&type6); 19 auto param5 = model->addOperand(&type5); 20 auto param6 = model->addOperand(&type5); 21 auto layout = model->addOperand(&type0); 22 auto out = model->addOperand(&type3); 23 // Phase 2, operations 24 static int32_t param_init[] = {0, 0, 0, 0}; 25 model->setOperandValue(param, param_init, sizeof(int32_t) * 4); 26 static int32_t param1_init[] = {2}; 27 model->setOperandValue(param1, param1_init, sizeof(int32_t) * 1); 28 static int32_t param2_init[] = {2}; 29 model->setOperandValue(param2, param2_init, sizeof(int32_t) * 1); 30 static float param3_init[] = {2.0f}; 31 model->setOperandValue(param3, param3_init, sizeof(float) * 1); 32 static float param4_init[] = {2.0f}; 33 model->setOperandValue(param4, param4_init, sizeof(float) * 1); 34 static int32_t param5_init[] = {4}; 35 model->setOperandValue(param5, param5_init, sizeof(int32_t) * 1); 36 static int32_t param6_init[] = {4}; 37 model->setOperandValue(param6, param6_init, sizeof(int32_t) * 1); 38 static bool8 layout_init[] = {false}; 39 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 40 model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in, roi, param, param1, param2, param3, param4, param5, param6, layout}, {out}); 41 // Phase 3, inputs and outputs 42 model->identifyInputsAndOutputs( 43 {in, roi}, 44 {out}); 45 assert(model->isValid()); 46 } 47 48 inline bool is_ignored_nhwc(int i) { 49 static std::set<int> ignore = {}; 50 return ignore.find(i) != ignore.end(); 51 } 52 53 void CreateModel_nhwc_relaxed(Model *model) { 54 OperandType type0(Type::BOOL, {}); 55 OperandType type1(Type::TENSOR_FLOAT32, {1, 4, 4, 1}); 56 OperandType type2(Type::TENSOR_FLOAT32, {4, 4}); 57 OperandType type3(Type::TENSOR_FLOAT32, {4, 2, 2, 1}); 58 OperandType type4(Type::TENSOR_INT32, {4}); 59 OperandType type5(Type::INT32, {}); 60 OperandType type6(Type::FLOAT32, {}); 61 // Phase 1, operands 62 auto in = model->addOperand(&type1); 63 auto roi = model->addOperand(&type2); 64 auto param = model->addOperand(&type4); 65 auto param1 = model->addOperand(&type5); 66 auto param2 = model->addOperand(&type5); 67 auto param3 = model->addOperand(&type6); 68 auto param4 = model->addOperand(&type6); 69 auto param5 = model->addOperand(&type5); 70 auto param6 = model->addOperand(&type5); 71 auto layout = model->addOperand(&type0); 72 auto out = model->addOperand(&type3); 73 // Phase 2, operations 74 static int32_t param_init[] = {0, 0, 0, 0}; 75 model->setOperandValue(param, param_init, sizeof(int32_t) * 4); 76 static int32_t param1_init[] = {2}; 77 model->setOperandValue(param1, param1_init, sizeof(int32_t) * 1); 78 static int32_t param2_init[] = {2}; 79 model->setOperandValue(param2, param2_init, sizeof(int32_t) * 1); 80 static float param3_init[] = {2.0f}; 81 model->setOperandValue(param3, param3_init, sizeof(float) * 1); 82 static float param4_init[] = {2.0f}; 83 model->setOperandValue(param4, param4_init, sizeof(float) * 1); 84 static int32_t param5_init[] = {4}; 85 model->setOperandValue(param5, param5_init, sizeof(int32_t) * 1); 86 static int32_t param6_init[] = {4}; 87 model->setOperandValue(param6, param6_init, sizeof(int32_t) * 1); 88 static bool8 layout_init[] = {false}; 89 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 90 model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in, roi, param, param1, param2, param3, param4, param5, param6, layout}, {out}); 91 // Phase 3, inputs and outputs 92 model->identifyInputsAndOutputs( 93 {in, roi}, 94 {out}); 95 // Phase 4: set relaxed execution 96 model->relaxComputationFloat32toFloat16(true); 97 assert(model->isValid()); 98 } 99 100 inline bool is_ignored_nhwc_relaxed(int i) { 101 static std::set<int> ignore = {}; 102 return ignore.find(i) != ignore.end(); 103 } 104 105 void CreateModel_nhwc_quant8(Model *model) { 106 OperandType type0(Type::BOOL, {}); 107 OperandType type25(Type::TENSOR_QUANT8_ASYMM, {1, 4, 4, 1}, 0.25f, 128); 108 OperandType type26(Type::TENSOR_QUANT8_ASYMM, {4, 2, 2, 1}, 0.0625f, 128); 109 OperandType type27(Type::TENSOR_QUANT16_ASYMM, {4, 4}, 0.125f, 0); 110 OperandType type4(Type::TENSOR_INT32, {4}); 111 OperandType type5(Type::INT32, {}); 112 OperandType type6(Type::FLOAT32, {}); 113 // Phase 1, operands 114 auto in = model->addOperand(&type25); 115 auto roi = model->addOperand(&type27); 116 auto param = model->addOperand(&type4); 117 auto param1 = model->addOperand(&type5); 118 auto param2 = model->addOperand(&type5); 119 auto param3 = model->addOperand(&type6); 120 auto param4 = model->addOperand(&type6); 121 auto param5 = model->addOperand(&type5); 122 auto param6 = model->addOperand(&type5); 123 auto layout = model->addOperand(&type0); 124 auto out = model->addOperand(&type26); 125 // Phase 2, operations 126 static int32_t param_init[] = {0, 0, 0, 0}; 127 model->setOperandValue(param, param_init, sizeof(int32_t) * 4); 128 static int32_t param1_init[] = {2}; 129 model->setOperandValue(param1, param1_init, sizeof(int32_t) * 1); 130 static int32_t param2_init[] = {2}; 131 model->setOperandValue(param2, param2_init, sizeof(int32_t) * 1); 132 static float param3_init[] = {2.0f}; 133 model->setOperandValue(param3, param3_init, sizeof(float) * 1); 134 static float param4_init[] = {2.0f}; 135 model->setOperandValue(param4, param4_init, sizeof(float) * 1); 136 static int32_t param5_init[] = {4}; 137 model->setOperandValue(param5, param5_init, sizeof(int32_t) * 1); 138 static int32_t param6_init[] = {4}; 139 model->setOperandValue(param6, param6_init, sizeof(int32_t) * 1); 140 static bool8 layout_init[] = {false}; 141 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 142 model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in, roi, param, param1, param2, param3, param4, param5, param6, layout}, {out}); 143 // Phase 3, inputs and outputs 144 model->identifyInputsAndOutputs( 145 {in, roi}, 146 {out}); 147 assert(model->isValid()); 148 } 149 150 inline bool is_ignored_nhwc_quant8(int i) { 151 static std::set<int> ignore = {}; 152 return ignore.find(i) != ignore.end(); 153 } 154 155 void CreateModel_nhwc_float16(Model *model) { 156 OperandType type0(Type::BOOL, {}); 157 OperandType type28(Type::TENSOR_FLOAT16, {1, 4, 4, 1}); 158 OperandType type29(Type::TENSOR_FLOAT16, {4, 2, 2, 1}); 159 OperandType type30(Type::FLOAT16, {}); 160 OperandType type31(Type::TENSOR_FLOAT16, {4, 4}); 161 OperandType type4(Type::TENSOR_INT32, {4}); 162 OperandType type5(Type::INT32, {}); 163 // Phase 1, operands 164 auto in = model->addOperand(&type28); 165 auto roi = model->addOperand(&type31); 166 auto param = model->addOperand(&type4); 167 auto param1 = model->addOperand(&type5); 168 auto param2 = model->addOperand(&type5); 169 auto param3 = model->addOperand(&type30); 170 auto param4 = model->addOperand(&type30); 171 auto param5 = model->addOperand(&type5); 172 auto param6 = model->addOperand(&type5); 173 auto layout = model->addOperand(&type0); 174 auto out = model->addOperand(&type29); 175 // Phase 2, operations 176 static int32_t param_init[] = {0, 0, 0, 0}; 177 model->setOperandValue(param, param_init, sizeof(int32_t) * 4); 178 static int32_t param1_init[] = {2}; 179 model->setOperandValue(param1, param1_init, sizeof(int32_t) * 1); 180 static int32_t param2_init[] = {2}; 181 model->setOperandValue(param2, param2_init, sizeof(int32_t) * 1); 182 static _Float16 param3_init[] = {2.0f}; 183 model->setOperandValue(param3, param3_init, sizeof(_Float16) * 1); 184 static _Float16 param4_init[] = {2.0f}; 185 model->setOperandValue(param4, param4_init, sizeof(_Float16) * 1); 186 static int32_t param5_init[] = {4}; 187 model->setOperandValue(param5, param5_init, sizeof(int32_t) * 1); 188 static int32_t param6_init[] = {4}; 189 model->setOperandValue(param6, param6_init, sizeof(int32_t) * 1); 190 static bool8 layout_init[] = {false}; 191 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 192 model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in, roi, param, param1, param2, param3, param4, param5, param6, layout}, {out}); 193 // Phase 3, inputs and outputs 194 model->identifyInputsAndOutputs( 195 {in, roi}, 196 {out}); 197 assert(model->isValid()); 198 } 199 200 inline bool is_ignored_nhwc_float16(int i) { 201 static std::set<int> ignore = {}; 202 return ignore.find(i) != ignore.end(); 203 } 204 205 void CreateModel_nchw(Model *model) { 206 OperandType type0(Type::BOOL, {}); 207 OperandType type2(Type::TENSOR_FLOAT32, {4, 4}); 208 OperandType type32(Type::TENSOR_FLOAT32, {1, 1, 4, 4}); 209 OperandType type33(Type::TENSOR_FLOAT32, {4, 1, 2, 2}); 210 OperandType type4(Type::TENSOR_INT32, {4}); 211 OperandType type5(Type::INT32, {}); 212 OperandType type6(Type::FLOAT32, {}); 213 // Phase 1, operands 214 auto in = model->addOperand(&type32); 215 auto roi = model->addOperand(&type2); 216 auto param = model->addOperand(&type4); 217 auto param1 = model->addOperand(&type5); 218 auto param2 = model->addOperand(&type5); 219 auto param3 = model->addOperand(&type6); 220 auto param4 = model->addOperand(&type6); 221 auto param5 = model->addOperand(&type5); 222 auto param6 = model->addOperand(&type5); 223 auto layout = model->addOperand(&type0); 224 auto out = model->addOperand(&type33); 225 // Phase 2, operations 226 static int32_t param_init[] = {0, 0, 0, 0}; 227 model->setOperandValue(param, param_init, sizeof(int32_t) * 4); 228 static int32_t param1_init[] = {2}; 229 model->setOperandValue(param1, param1_init, sizeof(int32_t) * 1); 230 static int32_t param2_init[] = {2}; 231 model->setOperandValue(param2, param2_init, sizeof(int32_t) * 1); 232 static float param3_init[] = {2.0f}; 233 model->setOperandValue(param3, param3_init, sizeof(float) * 1); 234 static float param4_init[] = {2.0f}; 235 model->setOperandValue(param4, param4_init, sizeof(float) * 1); 236 static int32_t param5_init[] = {4}; 237 model->setOperandValue(param5, param5_init, sizeof(int32_t) * 1); 238 static int32_t param6_init[] = {4}; 239 model->setOperandValue(param6, param6_init, sizeof(int32_t) * 1); 240 static bool8 layout_init[] = {true}; 241 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 242 model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in, roi, param, param1, param2, param3, param4, param5, param6, layout}, {out}); 243 // Phase 3, inputs and outputs 244 model->identifyInputsAndOutputs( 245 {in, roi}, 246 {out}); 247 assert(model->isValid()); 248 } 249 250 inline bool is_ignored_nchw(int i) { 251 static std::set<int> ignore = {}; 252 return ignore.find(i) != ignore.end(); 253 } 254 255 void CreateModel_nchw_relaxed(Model *model) { 256 OperandType type0(Type::BOOL, {}); 257 OperandType type2(Type::TENSOR_FLOAT32, {4, 4}); 258 OperandType type32(Type::TENSOR_FLOAT32, {1, 1, 4, 4}); 259 OperandType type33(Type::TENSOR_FLOAT32, {4, 1, 2, 2}); 260 OperandType type4(Type::TENSOR_INT32, {4}); 261 OperandType type5(Type::INT32, {}); 262 OperandType type6(Type::FLOAT32, {}); 263 // Phase 1, operands 264 auto in = model->addOperand(&type32); 265 auto roi = model->addOperand(&type2); 266 auto param = model->addOperand(&type4); 267 auto param1 = model->addOperand(&type5); 268 auto param2 = model->addOperand(&type5); 269 auto param3 = model->addOperand(&type6); 270 auto param4 = model->addOperand(&type6); 271 auto param5 = model->addOperand(&type5); 272 auto param6 = model->addOperand(&type5); 273 auto layout = model->addOperand(&type0); 274 auto out = model->addOperand(&type33); 275 // Phase 2, operations 276 static int32_t param_init[] = {0, 0, 0, 0}; 277 model->setOperandValue(param, param_init, sizeof(int32_t) * 4); 278 static int32_t param1_init[] = {2}; 279 model->setOperandValue(param1, param1_init, sizeof(int32_t) * 1); 280 static int32_t param2_init[] = {2}; 281 model->setOperandValue(param2, param2_init, sizeof(int32_t) * 1); 282 static float param3_init[] = {2.0f}; 283 model->setOperandValue(param3, param3_init, sizeof(float) * 1); 284 static float param4_init[] = {2.0f}; 285 model->setOperandValue(param4, param4_init, sizeof(float) * 1); 286 static int32_t param5_init[] = {4}; 287 model->setOperandValue(param5, param5_init, sizeof(int32_t) * 1); 288 static int32_t param6_init[] = {4}; 289 model->setOperandValue(param6, param6_init, sizeof(int32_t) * 1); 290 static bool8 layout_init[] = {true}; 291 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 292 model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in, roi, param, param1, param2, param3, param4, param5, param6, layout}, {out}); 293 // Phase 3, inputs and outputs 294 model->identifyInputsAndOutputs( 295 {in, roi}, 296 {out}); 297 // Phase 4: set relaxed execution 298 model->relaxComputationFloat32toFloat16(true); 299 assert(model->isValid()); 300 } 301 302 inline bool is_ignored_nchw_relaxed(int i) { 303 static std::set<int> ignore = {}; 304 return ignore.find(i) != ignore.end(); 305 } 306 307 void CreateModel_nchw_quant8(Model *model) { 308 OperandType type0(Type::BOOL, {}); 309 OperandType type27(Type::TENSOR_QUANT16_ASYMM, {4, 4}, 0.125f, 0); 310 OperandType type34(Type::TENSOR_QUANT8_ASYMM, {1, 1, 4, 4}, 0.25f, 128); 311 OperandType type35(Type::TENSOR_QUANT8_ASYMM, {4, 1, 2, 2}, 0.0625f, 128); 312 OperandType type4(Type::TENSOR_INT32, {4}); 313 OperandType type5(Type::INT32, {}); 314 OperandType type6(Type::FLOAT32, {}); 315 // Phase 1, operands 316 auto in = model->addOperand(&type34); 317 auto roi = model->addOperand(&type27); 318 auto param = model->addOperand(&type4); 319 auto param1 = model->addOperand(&type5); 320 auto param2 = model->addOperand(&type5); 321 auto param3 = model->addOperand(&type6); 322 auto param4 = model->addOperand(&type6); 323 auto param5 = model->addOperand(&type5); 324 auto param6 = model->addOperand(&type5); 325 auto layout = model->addOperand(&type0); 326 auto out = model->addOperand(&type35); 327 // Phase 2, operations 328 static int32_t param_init[] = {0, 0, 0, 0}; 329 model->setOperandValue(param, param_init, sizeof(int32_t) * 4); 330 static int32_t param1_init[] = {2}; 331 model->setOperandValue(param1, param1_init, sizeof(int32_t) * 1); 332 static int32_t param2_init[] = {2}; 333 model->setOperandValue(param2, param2_init, sizeof(int32_t) * 1); 334 static float param3_init[] = {2.0f}; 335 model->setOperandValue(param3, param3_init, sizeof(float) * 1); 336 static float param4_init[] = {2.0f}; 337 model->setOperandValue(param4, param4_init, sizeof(float) * 1); 338 static int32_t param5_init[] = {4}; 339 model->setOperandValue(param5, param5_init, sizeof(int32_t) * 1); 340 static int32_t param6_init[] = {4}; 341 model->setOperandValue(param6, param6_init, sizeof(int32_t) * 1); 342 static bool8 layout_init[] = {true}; 343 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 344 model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in, roi, param, param1, param2, param3, param4, param5, param6, layout}, {out}); 345 // Phase 3, inputs and outputs 346 model->identifyInputsAndOutputs( 347 {in, roi}, 348 {out}); 349 assert(model->isValid()); 350 } 351 352 inline bool is_ignored_nchw_quant8(int i) { 353 static std::set<int> ignore = {}; 354 return ignore.find(i) != ignore.end(); 355 } 356 357 void CreateModel_nchw_float16(Model *model) { 358 OperandType type0(Type::BOOL, {}); 359 OperandType type30(Type::FLOAT16, {}); 360 OperandType type31(Type::TENSOR_FLOAT16, {4, 4}); 361 OperandType type36(Type::TENSOR_FLOAT16, {1, 1, 4, 4}); 362 OperandType type37(Type::TENSOR_FLOAT16, {4, 1, 2, 2}); 363 OperandType type4(Type::TENSOR_INT32, {4}); 364 OperandType type5(Type::INT32, {}); 365 // Phase 1, operands 366 auto in = model->addOperand(&type36); 367 auto roi = model->addOperand(&type31); 368 auto param = model->addOperand(&type4); 369 auto param1 = model->addOperand(&type5); 370 auto param2 = model->addOperand(&type5); 371 auto param3 = model->addOperand(&type30); 372 auto param4 = model->addOperand(&type30); 373 auto param5 = model->addOperand(&type5); 374 auto param6 = model->addOperand(&type5); 375 auto layout = model->addOperand(&type0); 376 auto out = model->addOperand(&type37); 377 // Phase 2, operations 378 static int32_t param_init[] = {0, 0, 0, 0}; 379 model->setOperandValue(param, param_init, sizeof(int32_t) * 4); 380 static int32_t param1_init[] = {2}; 381 model->setOperandValue(param1, param1_init, sizeof(int32_t) * 1); 382 static int32_t param2_init[] = {2}; 383 model->setOperandValue(param2, param2_init, sizeof(int32_t) * 1); 384 static _Float16 param3_init[] = {2.0f}; 385 model->setOperandValue(param3, param3_init, sizeof(_Float16) * 1); 386 static _Float16 param4_init[] = {2.0f}; 387 model->setOperandValue(param4, param4_init, sizeof(_Float16) * 1); 388 static int32_t param5_init[] = {4}; 389 model->setOperandValue(param5, param5_init, sizeof(int32_t) * 1); 390 static int32_t param6_init[] = {4}; 391 model->setOperandValue(param6, param6_init, sizeof(int32_t) * 1); 392 static bool8 layout_init[] = {true}; 393 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 394 model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in, roi, param, param1, param2, param3, param4, param5, param6, layout}, {out}); 395 // Phase 3, inputs and outputs 396 model->identifyInputsAndOutputs( 397 {in, roi}, 398 {out}); 399 assert(model->isValid()); 400 } 401 402 inline bool is_ignored_nchw_float16(int i) { 403 static std::set<int> ignore = {}; 404 return ignore.find(i) != ignore.end(); 405 } 406 407 void CreateModel_dynamic_output_shape_nhwc(Model *model) { 408 OperandType type0(Type::BOOL, {}); 409 OperandType type1(Type::TENSOR_FLOAT32, {1, 4, 4, 1}); 410 OperandType type2(Type::TENSOR_FLOAT32, {4, 4}); 411 OperandType type38(Type::TENSOR_FLOAT32, {0, 0, 0, 0}); 412 OperandType type4(Type::TENSOR_INT32, {4}); 413 OperandType type5(Type::INT32, {}); 414 OperandType type6(Type::FLOAT32, {}); 415 // Phase 1, operands 416 auto in = model->addOperand(&type1); 417 auto roi = model->addOperand(&type2); 418 auto param = model->addOperand(&type4); 419 auto param1 = model->addOperand(&type5); 420 auto param2 = model->addOperand(&type5); 421 auto param3 = model->addOperand(&type6); 422 auto param4 = model->addOperand(&type6); 423 auto param5 = model->addOperand(&type5); 424 auto param6 = model->addOperand(&type5); 425 auto layout = model->addOperand(&type0); 426 auto out = model->addOperand(&type38); 427 // Phase 2, operations 428 static int32_t param_init[] = {0, 0, 0, 0}; 429 model->setOperandValue(param, param_init, sizeof(int32_t) * 4); 430 static int32_t param1_init[] = {2}; 431 model->setOperandValue(param1, param1_init, sizeof(int32_t) * 1); 432 static int32_t param2_init[] = {2}; 433 model->setOperandValue(param2, param2_init, sizeof(int32_t) * 1); 434 static float param3_init[] = {2.0f}; 435 model->setOperandValue(param3, param3_init, sizeof(float) * 1); 436 static float param4_init[] = {2.0f}; 437 model->setOperandValue(param4, param4_init, sizeof(float) * 1); 438 static int32_t param5_init[] = {4}; 439 model->setOperandValue(param5, param5_init, sizeof(int32_t) * 1); 440 static int32_t param6_init[] = {4}; 441 model->setOperandValue(param6, param6_init, sizeof(int32_t) * 1); 442 static bool8 layout_init[] = {false}; 443 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 444 model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in, roi, param, param1, param2, param3, param4, param5, param6, layout}, {out}); 445 // Phase 3, inputs and outputs 446 model->identifyInputsAndOutputs( 447 {in, roi}, 448 {out}); 449 assert(model->isValid()); 450 } 451 452 inline bool is_ignored_dynamic_output_shape_nhwc(int i) { 453 static std::set<int> ignore = {}; 454 return ignore.find(i) != ignore.end(); 455 } 456 457 void CreateModel_dynamic_output_shape_nhwc_relaxed(Model *model) { 458 OperandType type0(Type::BOOL, {}); 459 OperandType type1(Type::TENSOR_FLOAT32, {1, 4, 4, 1}); 460 OperandType type2(Type::TENSOR_FLOAT32, {4, 4}); 461 OperandType type38(Type::TENSOR_FLOAT32, {0, 0, 0, 0}); 462 OperandType type4(Type::TENSOR_INT32, {4}); 463 OperandType type5(Type::INT32, {}); 464 OperandType type6(Type::FLOAT32, {}); 465 // Phase 1, operands 466 auto in = model->addOperand(&type1); 467 auto roi = model->addOperand(&type2); 468 auto param = model->addOperand(&type4); 469 auto param1 = model->addOperand(&type5); 470 auto param2 = model->addOperand(&type5); 471 auto param3 = model->addOperand(&type6); 472 auto param4 = model->addOperand(&type6); 473 auto param5 = model->addOperand(&type5); 474 auto param6 = model->addOperand(&type5); 475 auto layout = model->addOperand(&type0); 476 auto out = model->addOperand(&type38); 477 // Phase 2, operations 478 static int32_t param_init[] = {0, 0, 0, 0}; 479 model->setOperandValue(param, param_init, sizeof(int32_t) * 4); 480 static int32_t param1_init[] = {2}; 481 model->setOperandValue(param1, param1_init, sizeof(int32_t) * 1); 482 static int32_t param2_init[] = {2}; 483 model->setOperandValue(param2, param2_init, sizeof(int32_t) * 1); 484 static float param3_init[] = {2.0f}; 485 model->setOperandValue(param3, param3_init, sizeof(float) * 1); 486 static float param4_init[] = {2.0f}; 487 model->setOperandValue(param4, param4_init, sizeof(float) * 1); 488 static int32_t param5_init[] = {4}; 489 model->setOperandValue(param5, param5_init, sizeof(int32_t) * 1); 490 static int32_t param6_init[] = {4}; 491 model->setOperandValue(param6, param6_init, sizeof(int32_t) * 1); 492 static bool8 layout_init[] = {false}; 493 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 494 model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in, roi, param, param1, param2, param3, param4, param5, param6, layout}, {out}); 495 // Phase 3, inputs and outputs 496 model->identifyInputsAndOutputs( 497 {in, roi}, 498 {out}); 499 // Phase 4: set relaxed execution 500 model->relaxComputationFloat32toFloat16(true); 501 assert(model->isValid()); 502 } 503 504 inline bool is_ignored_dynamic_output_shape_nhwc_relaxed(int i) { 505 static std::set<int> ignore = {}; 506 return ignore.find(i) != ignore.end(); 507 } 508 509 void CreateModel_dynamic_output_shape_nhwc_quant8(Model *model) { 510 OperandType type0(Type::BOOL, {}); 511 OperandType type25(Type::TENSOR_QUANT8_ASYMM, {1, 4, 4, 1}, 0.25f, 128); 512 OperandType type27(Type::TENSOR_QUANT16_ASYMM, {4, 4}, 0.125f, 0); 513 OperandType type39(Type::TENSOR_QUANT8_ASYMM, {0, 0, 0, 0}, 0.0625f, 128); 514 OperandType type4(Type::TENSOR_INT32, {4}); 515 OperandType type5(Type::INT32, {}); 516 OperandType type6(Type::FLOAT32, {}); 517 // Phase 1, operands 518 auto in = model->addOperand(&type25); 519 auto roi = model->addOperand(&type27); 520 auto param = model->addOperand(&type4); 521 auto param1 = model->addOperand(&type5); 522 auto param2 = model->addOperand(&type5); 523 auto param3 = model->addOperand(&type6); 524 auto param4 = model->addOperand(&type6); 525 auto param5 = model->addOperand(&type5); 526 auto param6 = model->addOperand(&type5); 527 auto layout = model->addOperand(&type0); 528 auto out = model->addOperand(&type39); 529 // Phase 2, operations 530 static int32_t param_init[] = {0, 0, 0, 0}; 531 model->setOperandValue(param, param_init, sizeof(int32_t) * 4); 532 static int32_t param1_init[] = {2}; 533 model->setOperandValue(param1, param1_init, sizeof(int32_t) * 1); 534 static int32_t param2_init[] = {2}; 535 model->setOperandValue(param2, param2_init, sizeof(int32_t) * 1); 536 static float param3_init[] = {2.0f}; 537 model->setOperandValue(param3, param3_init, sizeof(float) * 1); 538 static float param4_init[] = {2.0f}; 539 model->setOperandValue(param4, param4_init, sizeof(float) * 1); 540 static int32_t param5_init[] = {4}; 541 model->setOperandValue(param5, param5_init, sizeof(int32_t) * 1); 542 static int32_t param6_init[] = {4}; 543 model->setOperandValue(param6, param6_init, sizeof(int32_t) * 1); 544 static bool8 layout_init[] = {false}; 545 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 546 model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in, roi, param, param1, param2, param3, param4, param5, param6, layout}, {out}); 547 // Phase 3, inputs and outputs 548 model->identifyInputsAndOutputs( 549 {in, roi}, 550 {out}); 551 assert(model->isValid()); 552 } 553 554 inline bool is_ignored_dynamic_output_shape_nhwc_quant8(int i) { 555 static std::set<int> ignore = {}; 556 return ignore.find(i) != ignore.end(); 557 } 558 559 void CreateModel_dynamic_output_shape_nhwc_float16(Model *model) { 560 OperandType type0(Type::BOOL, {}); 561 OperandType type28(Type::TENSOR_FLOAT16, {1, 4, 4, 1}); 562 OperandType type30(Type::FLOAT16, {}); 563 OperandType type31(Type::TENSOR_FLOAT16, {4, 4}); 564 OperandType type4(Type::TENSOR_INT32, {4}); 565 OperandType type40(Type::TENSOR_FLOAT16, {0, 0, 0, 0}); 566 OperandType type5(Type::INT32, {}); 567 // Phase 1, operands 568 auto in = model->addOperand(&type28); 569 auto roi = model->addOperand(&type31); 570 auto param = model->addOperand(&type4); 571 auto param1 = model->addOperand(&type5); 572 auto param2 = model->addOperand(&type5); 573 auto param3 = model->addOperand(&type30); 574 auto param4 = model->addOperand(&type30); 575 auto param5 = model->addOperand(&type5); 576 auto param6 = model->addOperand(&type5); 577 auto layout = model->addOperand(&type0); 578 auto out = model->addOperand(&type40); 579 // Phase 2, operations 580 static int32_t param_init[] = {0, 0, 0, 0}; 581 model->setOperandValue(param, param_init, sizeof(int32_t) * 4); 582 static int32_t param1_init[] = {2}; 583 model->setOperandValue(param1, param1_init, sizeof(int32_t) * 1); 584 static int32_t param2_init[] = {2}; 585 model->setOperandValue(param2, param2_init, sizeof(int32_t) * 1); 586 static _Float16 param3_init[] = {2.0f}; 587 model->setOperandValue(param3, param3_init, sizeof(_Float16) * 1); 588 static _Float16 param4_init[] = {2.0f}; 589 model->setOperandValue(param4, param4_init, sizeof(_Float16) * 1); 590 static int32_t param5_init[] = {4}; 591 model->setOperandValue(param5, param5_init, sizeof(int32_t) * 1); 592 static int32_t param6_init[] = {4}; 593 model->setOperandValue(param6, param6_init, sizeof(int32_t) * 1); 594 static bool8 layout_init[] = {false}; 595 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 596 model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in, roi, param, param1, param2, param3, param4, param5, param6, layout}, {out}); 597 // Phase 3, inputs and outputs 598 model->identifyInputsAndOutputs( 599 {in, roi}, 600 {out}); 601 assert(model->isValid()); 602 } 603 604 inline bool is_ignored_dynamic_output_shape_nhwc_float16(int i) { 605 static std::set<int> ignore = {}; 606 return ignore.find(i) != ignore.end(); 607 } 608 609 void CreateModel_dynamic_output_shape_nchw(Model *model) { 610 OperandType type0(Type::BOOL, {}); 611 OperandType type2(Type::TENSOR_FLOAT32, {4, 4}); 612 OperandType type32(Type::TENSOR_FLOAT32, {1, 1, 4, 4}); 613 OperandType type38(Type::TENSOR_FLOAT32, {0, 0, 0, 0}); 614 OperandType type4(Type::TENSOR_INT32, {4}); 615 OperandType type5(Type::INT32, {}); 616 OperandType type6(Type::FLOAT32, {}); 617 // Phase 1, operands 618 auto in = model->addOperand(&type32); 619 auto roi = model->addOperand(&type2); 620 auto param = model->addOperand(&type4); 621 auto param1 = model->addOperand(&type5); 622 auto param2 = model->addOperand(&type5); 623 auto param3 = model->addOperand(&type6); 624 auto param4 = model->addOperand(&type6); 625 auto param5 = model->addOperand(&type5); 626 auto param6 = model->addOperand(&type5); 627 auto layout = model->addOperand(&type0); 628 auto out = model->addOperand(&type38); 629 // Phase 2, operations 630 static int32_t param_init[] = {0, 0, 0, 0}; 631 model->setOperandValue(param, param_init, sizeof(int32_t) * 4); 632 static int32_t param1_init[] = {2}; 633 model->setOperandValue(param1, param1_init, sizeof(int32_t) * 1); 634 static int32_t param2_init[] = {2}; 635 model->setOperandValue(param2, param2_init, sizeof(int32_t) * 1); 636 static float param3_init[] = {2.0f}; 637 model->setOperandValue(param3, param3_init, sizeof(float) * 1); 638 static float param4_init[] = {2.0f}; 639 model->setOperandValue(param4, param4_init, sizeof(float) * 1); 640 static int32_t param5_init[] = {4}; 641 model->setOperandValue(param5, param5_init, sizeof(int32_t) * 1); 642 static int32_t param6_init[] = {4}; 643 model->setOperandValue(param6, param6_init, sizeof(int32_t) * 1); 644 static bool8 layout_init[] = {true}; 645 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 646 model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in, roi, param, param1, param2, param3, param4, param5, param6, layout}, {out}); 647 // Phase 3, inputs and outputs 648 model->identifyInputsAndOutputs( 649 {in, roi}, 650 {out}); 651 assert(model->isValid()); 652 } 653 654 inline bool is_ignored_dynamic_output_shape_nchw(int i) { 655 static std::set<int> ignore = {}; 656 return ignore.find(i) != ignore.end(); 657 } 658 659 void CreateModel_dynamic_output_shape_nchw_relaxed(Model *model) { 660 OperandType type0(Type::BOOL, {}); 661 OperandType type2(Type::TENSOR_FLOAT32, {4, 4}); 662 OperandType type32(Type::TENSOR_FLOAT32, {1, 1, 4, 4}); 663 OperandType type38(Type::TENSOR_FLOAT32, {0, 0, 0, 0}); 664 OperandType type4(Type::TENSOR_INT32, {4}); 665 OperandType type5(Type::INT32, {}); 666 OperandType type6(Type::FLOAT32, {}); 667 // Phase 1, operands 668 auto in = model->addOperand(&type32); 669 auto roi = model->addOperand(&type2); 670 auto param = model->addOperand(&type4); 671 auto param1 = model->addOperand(&type5); 672 auto param2 = model->addOperand(&type5); 673 auto param3 = model->addOperand(&type6); 674 auto param4 = model->addOperand(&type6); 675 auto param5 = model->addOperand(&type5); 676 auto param6 = model->addOperand(&type5); 677 auto layout = model->addOperand(&type0); 678 auto out = model->addOperand(&type38); 679 // Phase 2, operations 680 static int32_t param_init[] = {0, 0, 0, 0}; 681 model->setOperandValue(param, param_init, sizeof(int32_t) * 4); 682 static int32_t param1_init[] = {2}; 683 model->setOperandValue(param1, param1_init, sizeof(int32_t) * 1); 684 static int32_t param2_init[] = {2}; 685 model->setOperandValue(param2, param2_init, sizeof(int32_t) * 1); 686 static float param3_init[] = {2.0f}; 687 model->setOperandValue(param3, param3_init, sizeof(float) * 1); 688 static float param4_init[] = {2.0f}; 689 model->setOperandValue(param4, param4_init, sizeof(float) * 1); 690 static int32_t param5_init[] = {4}; 691 model->setOperandValue(param5, param5_init, sizeof(int32_t) * 1); 692 static int32_t param6_init[] = {4}; 693 model->setOperandValue(param6, param6_init, sizeof(int32_t) * 1); 694 static bool8 layout_init[] = {true}; 695 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 696 model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in, roi, param, param1, param2, param3, param4, param5, param6, layout}, {out}); 697 // Phase 3, inputs and outputs 698 model->identifyInputsAndOutputs( 699 {in, roi}, 700 {out}); 701 // Phase 4: set relaxed execution 702 model->relaxComputationFloat32toFloat16(true); 703 assert(model->isValid()); 704 } 705 706 inline bool is_ignored_dynamic_output_shape_nchw_relaxed(int i) { 707 static std::set<int> ignore = {}; 708 return ignore.find(i) != ignore.end(); 709 } 710 711 void CreateModel_dynamic_output_shape_nchw_quant8(Model *model) { 712 OperandType type0(Type::BOOL, {}); 713 OperandType type27(Type::TENSOR_QUANT16_ASYMM, {4, 4}, 0.125f, 0); 714 OperandType type34(Type::TENSOR_QUANT8_ASYMM, {1, 1, 4, 4}, 0.25f, 128); 715 OperandType type39(Type::TENSOR_QUANT8_ASYMM, {0, 0, 0, 0}, 0.0625f, 128); 716 OperandType type4(Type::TENSOR_INT32, {4}); 717 OperandType type5(Type::INT32, {}); 718 OperandType type6(Type::FLOAT32, {}); 719 // Phase 1, operands 720 auto in = model->addOperand(&type34); 721 auto roi = model->addOperand(&type27); 722 auto param = model->addOperand(&type4); 723 auto param1 = model->addOperand(&type5); 724 auto param2 = model->addOperand(&type5); 725 auto param3 = model->addOperand(&type6); 726 auto param4 = model->addOperand(&type6); 727 auto param5 = model->addOperand(&type5); 728 auto param6 = model->addOperand(&type5); 729 auto layout = model->addOperand(&type0); 730 auto out = model->addOperand(&type39); 731 // Phase 2, operations 732 static int32_t param_init[] = {0, 0, 0, 0}; 733 model->setOperandValue(param, param_init, sizeof(int32_t) * 4); 734 static int32_t param1_init[] = {2}; 735 model->setOperandValue(param1, param1_init, sizeof(int32_t) * 1); 736 static int32_t param2_init[] = {2}; 737 model->setOperandValue(param2, param2_init, sizeof(int32_t) * 1); 738 static float param3_init[] = {2.0f}; 739 model->setOperandValue(param3, param3_init, sizeof(float) * 1); 740 static float param4_init[] = {2.0f}; 741 model->setOperandValue(param4, param4_init, sizeof(float) * 1); 742 static int32_t param5_init[] = {4}; 743 model->setOperandValue(param5, param5_init, sizeof(int32_t) * 1); 744 static int32_t param6_init[] = {4}; 745 model->setOperandValue(param6, param6_init, sizeof(int32_t) * 1); 746 static bool8 layout_init[] = {true}; 747 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 748 model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in, roi, param, param1, param2, param3, param4, param5, param6, layout}, {out}); 749 // Phase 3, inputs and outputs 750 model->identifyInputsAndOutputs( 751 {in, roi}, 752 {out}); 753 assert(model->isValid()); 754 } 755 756 inline bool is_ignored_dynamic_output_shape_nchw_quant8(int i) { 757 static std::set<int> ignore = {}; 758 return ignore.find(i) != ignore.end(); 759 } 760 761 void CreateModel_dynamic_output_shape_nchw_float16(Model *model) { 762 OperandType type0(Type::BOOL, {}); 763 OperandType type30(Type::FLOAT16, {}); 764 OperandType type31(Type::TENSOR_FLOAT16, {4, 4}); 765 OperandType type36(Type::TENSOR_FLOAT16, {1, 1, 4, 4}); 766 OperandType type4(Type::TENSOR_INT32, {4}); 767 OperandType type40(Type::TENSOR_FLOAT16, {0, 0, 0, 0}); 768 OperandType type5(Type::INT32, {}); 769 // Phase 1, operands 770 auto in = model->addOperand(&type36); 771 auto roi = model->addOperand(&type31); 772 auto param = model->addOperand(&type4); 773 auto param1 = model->addOperand(&type5); 774 auto param2 = model->addOperand(&type5); 775 auto param3 = model->addOperand(&type30); 776 auto param4 = model->addOperand(&type30); 777 auto param5 = model->addOperand(&type5); 778 auto param6 = model->addOperand(&type5); 779 auto layout = model->addOperand(&type0); 780 auto out = model->addOperand(&type40); 781 // Phase 2, operations 782 static int32_t param_init[] = {0, 0, 0, 0}; 783 model->setOperandValue(param, param_init, sizeof(int32_t) * 4); 784 static int32_t param1_init[] = {2}; 785 model->setOperandValue(param1, param1_init, sizeof(int32_t) * 1); 786 static int32_t param2_init[] = {2}; 787 model->setOperandValue(param2, param2_init, sizeof(int32_t) * 1); 788 static _Float16 param3_init[] = {2.0f}; 789 model->setOperandValue(param3, param3_init, sizeof(_Float16) * 1); 790 static _Float16 param4_init[] = {2.0f}; 791 model->setOperandValue(param4, param4_init, sizeof(_Float16) * 1); 792 static int32_t param5_init[] = {4}; 793 model->setOperandValue(param5, param5_init, sizeof(int32_t) * 1); 794 static int32_t param6_init[] = {4}; 795 model->setOperandValue(param6, param6_init, sizeof(int32_t) * 1); 796 static bool8 layout_init[] = {true}; 797 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 798 model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in, roi, param, param1, param2, param3, param4, param5, param6, layout}, {out}); 799 // Phase 3, inputs and outputs 800 model->identifyInputsAndOutputs( 801 {in, roi}, 802 {out}); 803 assert(model->isValid()); 804 } 805 806 inline bool is_ignored_dynamic_output_shape_nchw_float16(int i) { 807 static std::set<int> ignore = {}; 808 return ignore.find(i) != ignore.end(); 809 } 810 811 void CreateModel_nhwc_2(Model *model) { 812 OperandType type0(Type::BOOL, {}); 813 OperandType type2(Type::TENSOR_FLOAT32, {4, 4}); 814 OperandType type4(Type::TENSOR_INT32, {4}); 815 OperandType type5(Type::INT32, {}); 816 OperandType type6(Type::FLOAT32, {}); 817 OperandType type7(Type::TENSOR_FLOAT32, {4, 4, 8, 2}); 818 OperandType type8(Type::TENSOR_FLOAT32, {4, 2, 3, 2}); 819 // Phase 1, operands 820 auto in1 = model->addOperand(&type7); 821 auto roi1 = model->addOperand(&type2); 822 auto param7 = model->addOperand(&type4); 823 auto param8 = model->addOperand(&type5); 824 auto param9 = model->addOperand(&type5); 825 auto param10 = model->addOperand(&type6); 826 auto param11 = model->addOperand(&type6); 827 auto param12 = model->addOperand(&type5); 828 auto param13 = model->addOperand(&type5); 829 auto layout = model->addOperand(&type0); 830 auto out1 = model->addOperand(&type8); 831 // Phase 2, operations 832 static int32_t param7_init[] = {0, 0, 3, 3}; 833 model->setOperandValue(param7, param7_init, sizeof(int32_t) * 4); 834 static int32_t param8_init[] = {2}; 835 model->setOperandValue(param8, param8_init, sizeof(int32_t) * 1); 836 static int32_t param9_init[] = {3}; 837 model->setOperandValue(param9, param9_init, sizeof(int32_t) * 1); 838 static float param10_init[] = {4.0f}; 839 model->setOperandValue(param10, param10_init, sizeof(float) * 1); 840 static float param11_init[] = {4.0f}; 841 model->setOperandValue(param11, param11_init, sizeof(float) * 1); 842 static int32_t param12_init[] = {4}; 843 model->setOperandValue(param12, param12_init, sizeof(int32_t) * 1); 844 static int32_t param13_init[] = {4}; 845 model->setOperandValue(param13, param13_init, sizeof(int32_t) * 1); 846 static bool8 layout_init[] = {false}; 847 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 848 model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in1, roi1, param7, param8, param9, param10, param11, param12, param13, layout}, {out1}); 849 // Phase 3, inputs and outputs 850 model->identifyInputsAndOutputs( 851 {in1, roi1}, 852 {out1}); 853 assert(model->isValid()); 854 } 855 856 inline bool is_ignored_nhwc_2(int i) { 857 static std::set<int> ignore = {}; 858 return ignore.find(i) != ignore.end(); 859 } 860 861 void CreateModel_nhwc_relaxed_2(Model *model) { 862 OperandType type0(Type::BOOL, {}); 863 OperandType type2(Type::TENSOR_FLOAT32, {4, 4}); 864 OperandType type4(Type::TENSOR_INT32, {4}); 865 OperandType type5(Type::INT32, {}); 866 OperandType type6(Type::FLOAT32, {}); 867 OperandType type7(Type::TENSOR_FLOAT32, {4, 4, 8, 2}); 868 OperandType type8(Type::TENSOR_FLOAT32, {4, 2, 3, 2}); 869 // Phase 1, operands 870 auto in1 = model->addOperand(&type7); 871 auto roi1 = model->addOperand(&type2); 872 auto param7 = model->addOperand(&type4); 873 auto param8 = model->addOperand(&type5); 874 auto param9 = model->addOperand(&type5); 875 auto param10 = model->addOperand(&type6); 876 auto param11 = model->addOperand(&type6); 877 auto param12 = model->addOperand(&type5); 878 auto param13 = model->addOperand(&type5); 879 auto layout = model->addOperand(&type0); 880 auto out1 = model->addOperand(&type8); 881 // Phase 2, operations 882 static int32_t param7_init[] = {0, 0, 3, 3}; 883 model->setOperandValue(param7, param7_init, sizeof(int32_t) * 4); 884 static int32_t param8_init[] = {2}; 885 model->setOperandValue(param8, param8_init, sizeof(int32_t) * 1); 886 static int32_t param9_init[] = {3}; 887 model->setOperandValue(param9, param9_init, sizeof(int32_t) * 1); 888 static float param10_init[] = {4.0f}; 889 model->setOperandValue(param10, param10_init, sizeof(float) * 1); 890 static float param11_init[] = {4.0f}; 891 model->setOperandValue(param11, param11_init, sizeof(float) * 1); 892 static int32_t param12_init[] = {4}; 893 model->setOperandValue(param12, param12_init, sizeof(int32_t) * 1); 894 static int32_t param13_init[] = {4}; 895 model->setOperandValue(param13, param13_init, sizeof(int32_t) * 1); 896 static bool8 layout_init[] = {false}; 897 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 898 model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in1, roi1, param7, param8, param9, param10, param11, param12, param13, layout}, {out1}); 899 // Phase 3, inputs and outputs 900 model->identifyInputsAndOutputs( 901 {in1, roi1}, 902 {out1}); 903 // Phase 4: set relaxed execution 904 model->relaxComputationFloat32toFloat16(true); 905 assert(model->isValid()); 906 } 907 908 inline bool is_ignored_nhwc_relaxed_2(int i) { 909 static std::set<int> ignore = {}; 910 return ignore.find(i) != ignore.end(); 911 } 912 913 void CreateModel_nhwc_quant8_2(Model *model) { 914 OperandType type0(Type::BOOL, {}); 915 OperandType type27(Type::TENSOR_QUANT16_ASYMM, {4, 4}, 0.125f, 0); 916 OperandType type4(Type::TENSOR_INT32, {4}); 917 OperandType type41(Type::TENSOR_QUANT8_ASYMM, {4, 4, 8, 2}, 0.04f, 0); 918 OperandType type42(Type::TENSOR_QUANT8_ASYMM, {4, 2, 3, 2}, 0.03125f, 10); 919 OperandType type5(Type::INT32, {}); 920 OperandType type6(Type::FLOAT32, {}); 921 // Phase 1, operands 922 auto in1 = model->addOperand(&type41); 923 auto roi1 = model->addOperand(&type27); 924 auto param7 = model->addOperand(&type4); 925 auto param8 = model->addOperand(&type5); 926 auto param9 = model->addOperand(&type5); 927 auto param10 = model->addOperand(&type6); 928 auto param11 = model->addOperand(&type6); 929 auto param12 = model->addOperand(&type5); 930 auto param13 = model->addOperand(&type5); 931 auto layout = model->addOperand(&type0); 932 auto out1 = model->addOperand(&type42); 933 // Phase 2, operations 934 static int32_t param7_init[] = {0, 0, 3, 3}; 935 model->setOperandValue(param7, param7_init, sizeof(int32_t) * 4); 936 static int32_t param8_init[] = {2}; 937 model->setOperandValue(param8, param8_init, sizeof(int32_t) * 1); 938 static int32_t param9_init[] = {3}; 939 model->setOperandValue(param9, param9_init, sizeof(int32_t) * 1); 940 static float param10_init[] = {4.0f}; 941 model->setOperandValue(param10, param10_init, sizeof(float) * 1); 942 static float param11_init[] = {4.0f}; 943 model->setOperandValue(param11, param11_init, sizeof(float) * 1); 944 static int32_t param12_init[] = {4}; 945 model->setOperandValue(param12, param12_init, sizeof(int32_t) * 1); 946 static int32_t param13_init[] = {4}; 947 model->setOperandValue(param13, param13_init, sizeof(int32_t) * 1); 948 static bool8 layout_init[] = {false}; 949 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 950 model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in1, roi1, param7, param8, param9, param10, param11, param12, param13, layout}, {out1}); 951 // Phase 3, inputs and outputs 952 model->identifyInputsAndOutputs( 953 {in1, roi1}, 954 {out1}); 955 assert(model->isValid()); 956 } 957 958 inline bool is_ignored_nhwc_quant8_2(int i) { 959 static std::set<int> ignore = {}; 960 return ignore.find(i) != ignore.end(); 961 } 962 963 void CreateModel_nhwc_float16_2(Model *model) { 964 OperandType type0(Type::BOOL, {}); 965 OperandType type30(Type::FLOAT16, {}); 966 OperandType type31(Type::TENSOR_FLOAT16, {4, 4}); 967 OperandType type4(Type::TENSOR_INT32, {4}); 968 OperandType type43(Type::TENSOR_FLOAT16, {4, 4, 8, 2}); 969 OperandType type44(Type::TENSOR_FLOAT16, {4, 2, 3, 2}); 970 OperandType type5(Type::INT32, {}); 971 // Phase 1, operands 972 auto in1 = model->addOperand(&type43); 973 auto roi1 = model->addOperand(&type31); 974 auto param7 = model->addOperand(&type4); 975 auto param8 = model->addOperand(&type5); 976 auto param9 = model->addOperand(&type5); 977 auto param10 = model->addOperand(&type30); 978 auto param11 = model->addOperand(&type30); 979 auto param12 = model->addOperand(&type5); 980 auto param13 = model->addOperand(&type5); 981 auto layout = model->addOperand(&type0); 982 auto out1 = model->addOperand(&type44); 983 // Phase 2, operations 984 static int32_t param7_init[] = {0, 0, 3, 3}; 985 model->setOperandValue(param7, param7_init, sizeof(int32_t) * 4); 986 static int32_t param8_init[] = {2}; 987 model->setOperandValue(param8, param8_init, sizeof(int32_t) * 1); 988 static int32_t param9_init[] = {3}; 989 model->setOperandValue(param9, param9_init, sizeof(int32_t) * 1); 990 static _Float16 param10_init[] = {4.0f}; 991 model->setOperandValue(param10, param10_init, sizeof(_Float16) * 1); 992 static _Float16 param11_init[] = {4.0f}; 993 model->setOperandValue(param11, param11_init, sizeof(_Float16) * 1); 994 static int32_t param12_init[] = {4}; 995 model->setOperandValue(param12, param12_init, sizeof(int32_t) * 1); 996 static int32_t param13_init[] = {4}; 997 model->setOperandValue(param13, param13_init, sizeof(int32_t) * 1); 998 static bool8 layout_init[] = {false}; 999 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 1000 model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in1, roi1, param7, param8, param9, param10, param11, param12, param13, layout}, {out1}); 1001 // Phase 3, inputs and outputs 1002 model->identifyInputsAndOutputs( 1003 {in1, roi1}, 1004 {out1}); 1005 assert(model->isValid()); 1006 } 1007 1008 inline bool is_ignored_nhwc_float16_2(int i) { 1009 static std::set<int> ignore = {}; 1010 return ignore.find(i) != ignore.end(); 1011 } 1012 1013 void CreateModel_nchw_2(Model *model) { 1014 OperandType type0(Type::BOOL, {}); 1015 OperandType type2(Type::TENSOR_FLOAT32, {4, 4}); 1016 OperandType type4(Type::TENSOR_INT32, {4}); 1017 OperandType type45(Type::TENSOR_FLOAT32, {4, 2, 4, 8}); 1018 OperandType type46(Type::TENSOR_FLOAT32, {4, 2, 2, 3}); 1019 OperandType type5(Type::INT32, {}); 1020 OperandType type6(Type::FLOAT32, {}); 1021 // Phase 1, operands 1022 auto in1 = model->addOperand(&type45); 1023 auto roi1 = model->addOperand(&type2); 1024 auto param7 = model->addOperand(&type4); 1025 auto param8 = model->addOperand(&type5); 1026 auto param9 = model->addOperand(&type5); 1027 auto param10 = model->addOperand(&type6); 1028 auto param11 = model->addOperand(&type6); 1029 auto param12 = model->addOperand(&type5); 1030 auto param13 = model->addOperand(&type5); 1031 auto layout = model->addOperand(&type0); 1032 auto out1 = model->addOperand(&type46); 1033 // Phase 2, operations 1034 static int32_t param7_init[] = {0, 0, 3, 3}; 1035 model->setOperandValue(param7, param7_init, sizeof(int32_t) * 4); 1036 static int32_t param8_init[] = {2}; 1037 model->setOperandValue(param8, param8_init, sizeof(int32_t) * 1); 1038 static int32_t param9_init[] = {3}; 1039 model->setOperandValue(param9, param9_init, sizeof(int32_t) * 1); 1040 static float param10_init[] = {4.0f}; 1041 model->setOperandValue(param10, param10_init, sizeof(float) * 1); 1042 static float param11_init[] = {4.0f}; 1043 model->setOperandValue(param11, param11_init, sizeof(float) * 1); 1044 static int32_t param12_init[] = {4}; 1045 model->setOperandValue(param12, param12_init, sizeof(int32_t) * 1); 1046 static int32_t param13_init[] = {4}; 1047 model->setOperandValue(param13, param13_init, sizeof(int32_t) * 1); 1048 static bool8 layout_init[] = {true}; 1049 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 1050 model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in1, roi1, param7, param8, param9, param10, param11, param12, param13, layout}, {out1}); 1051 // Phase 3, inputs and outputs 1052 model->identifyInputsAndOutputs( 1053 {in1, roi1}, 1054 {out1}); 1055 assert(model->isValid()); 1056 } 1057 1058 inline bool is_ignored_nchw_2(int i) { 1059 static std::set<int> ignore = {}; 1060 return ignore.find(i) != ignore.end(); 1061 } 1062 1063 void CreateModel_nchw_relaxed_2(Model *model) { 1064 OperandType type0(Type::BOOL, {}); 1065 OperandType type2(Type::TENSOR_FLOAT32, {4, 4}); 1066 OperandType type4(Type::TENSOR_INT32, {4}); 1067 OperandType type45(Type::TENSOR_FLOAT32, {4, 2, 4, 8}); 1068 OperandType type46(Type::TENSOR_FLOAT32, {4, 2, 2, 3}); 1069 OperandType type5(Type::INT32, {}); 1070 OperandType type6(Type::FLOAT32, {}); 1071 // Phase 1, operands 1072 auto in1 = model->addOperand(&type45); 1073 auto roi1 = model->addOperand(&type2); 1074 auto param7 = model->addOperand(&type4); 1075 auto param8 = model->addOperand(&type5); 1076 auto param9 = model->addOperand(&type5); 1077 auto param10 = model->addOperand(&type6); 1078 auto param11 = model->addOperand(&type6); 1079 auto param12 = model->addOperand(&type5); 1080 auto param13 = model->addOperand(&type5); 1081 auto layout = model->addOperand(&type0); 1082 auto out1 = model->addOperand(&type46); 1083 // Phase 2, operations 1084 static int32_t param7_init[] = {0, 0, 3, 3}; 1085 model->setOperandValue(param7, param7_init, sizeof(int32_t) * 4); 1086 static int32_t param8_init[] = {2}; 1087 model->setOperandValue(param8, param8_init, sizeof(int32_t) * 1); 1088 static int32_t param9_init[] = {3}; 1089 model->setOperandValue(param9, param9_init, sizeof(int32_t) * 1); 1090 static float param10_init[] = {4.0f}; 1091 model->setOperandValue(param10, param10_init, sizeof(float) * 1); 1092 static float param11_init[] = {4.0f}; 1093 model->setOperandValue(param11, param11_init, sizeof(float) * 1); 1094 static int32_t param12_init[] = {4}; 1095 model->setOperandValue(param12, param12_init, sizeof(int32_t) * 1); 1096 static int32_t param13_init[] = {4}; 1097 model->setOperandValue(param13, param13_init, sizeof(int32_t) * 1); 1098 static bool8 layout_init[] = {true}; 1099 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 1100 model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in1, roi1, param7, param8, param9, param10, param11, param12, param13, layout}, {out1}); 1101 // Phase 3, inputs and outputs 1102 model->identifyInputsAndOutputs( 1103 {in1, roi1}, 1104 {out1}); 1105 // Phase 4: set relaxed execution 1106 model->relaxComputationFloat32toFloat16(true); 1107 assert(model->isValid()); 1108 } 1109 1110 inline bool is_ignored_nchw_relaxed_2(int i) { 1111 static std::set<int> ignore = {}; 1112 return ignore.find(i) != ignore.end(); 1113 } 1114 1115 void CreateModel_nchw_quant8_2(Model *model) { 1116 OperandType type0(Type::BOOL, {}); 1117 OperandType type27(Type::TENSOR_QUANT16_ASYMM, {4, 4}, 0.125f, 0); 1118 OperandType type4(Type::TENSOR_INT32, {4}); 1119 OperandType type47(Type::TENSOR_QUANT8_ASYMM, {4, 2, 4, 8}, 0.04f, 0); 1120 OperandType type48(Type::TENSOR_QUANT8_ASYMM, {4, 2, 2, 3}, 0.03125f, 10); 1121 OperandType type5(Type::INT32, {}); 1122 OperandType type6(Type::FLOAT32, {}); 1123 // Phase 1, operands 1124 auto in1 = model->addOperand(&type47); 1125 auto roi1 = model->addOperand(&type27); 1126 auto param7 = model->addOperand(&type4); 1127 auto param8 = model->addOperand(&type5); 1128 auto param9 = model->addOperand(&type5); 1129 auto param10 = model->addOperand(&type6); 1130 auto param11 = model->addOperand(&type6); 1131 auto param12 = model->addOperand(&type5); 1132 auto param13 = model->addOperand(&type5); 1133 auto layout = model->addOperand(&type0); 1134 auto out1 = model->addOperand(&type48); 1135 // Phase 2, operations 1136 static int32_t param7_init[] = {0, 0, 3, 3}; 1137 model->setOperandValue(param7, param7_init, sizeof(int32_t) * 4); 1138 static int32_t param8_init[] = {2}; 1139 model->setOperandValue(param8, param8_init, sizeof(int32_t) * 1); 1140 static int32_t param9_init[] = {3}; 1141 model->setOperandValue(param9, param9_init, sizeof(int32_t) * 1); 1142 static float param10_init[] = {4.0f}; 1143 model->setOperandValue(param10, param10_init, sizeof(float) * 1); 1144 static float param11_init[] = {4.0f}; 1145 model->setOperandValue(param11, param11_init, sizeof(float) * 1); 1146 static int32_t param12_init[] = {4}; 1147 model->setOperandValue(param12, param12_init, sizeof(int32_t) * 1); 1148 static int32_t param13_init[] = {4}; 1149 model->setOperandValue(param13, param13_init, sizeof(int32_t) * 1); 1150 static bool8 layout_init[] = {true}; 1151 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 1152 model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in1, roi1, param7, param8, param9, param10, param11, param12, param13, layout}, {out1}); 1153 // Phase 3, inputs and outputs 1154 model->identifyInputsAndOutputs( 1155 {in1, roi1}, 1156 {out1}); 1157 assert(model->isValid()); 1158 } 1159 1160 inline bool is_ignored_nchw_quant8_2(int i) { 1161 static std::set<int> ignore = {}; 1162 return ignore.find(i) != ignore.end(); 1163 } 1164 1165 void CreateModel_nchw_float16_2(Model *model) { 1166 OperandType type0(Type::BOOL, {}); 1167 OperandType type30(Type::FLOAT16, {}); 1168 OperandType type31(Type::TENSOR_FLOAT16, {4, 4}); 1169 OperandType type4(Type::TENSOR_INT32, {4}); 1170 OperandType type49(Type::TENSOR_FLOAT16, {4, 2, 4, 8}); 1171 OperandType type5(Type::INT32, {}); 1172 OperandType type50(Type::TENSOR_FLOAT16, {4, 2, 2, 3}); 1173 // Phase 1, operands 1174 auto in1 = model->addOperand(&type49); 1175 auto roi1 = model->addOperand(&type31); 1176 auto param7 = model->addOperand(&type4); 1177 auto param8 = model->addOperand(&type5); 1178 auto param9 = model->addOperand(&type5); 1179 auto param10 = model->addOperand(&type30); 1180 auto param11 = model->addOperand(&type30); 1181 auto param12 = model->addOperand(&type5); 1182 auto param13 = model->addOperand(&type5); 1183 auto layout = model->addOperand(&type0); 1184 auto out1 = model->addOperand(&type50); 1185 // Phase 2, operations 1186 static int32_t param7_init[] = {0, 0, 3, 3}; 1187 model->setOperandValue(param7, param7_init, sizeof(int32_t) * 4); 1188 static int32_t param8_init[] = {2}; 1189 model->setOperandValue(param8, param8_init, sizeof(int32_t) * 1); 1190 static int32_t param9_init[] = {3}; 1191 model->setOperandValue(param9, param9_init, sizeof(int32_t) * 1); 1192 static _Float16 param10_init[] = {4.0f}; 1193 model->setOperandValue(param10, param10_init, sizeof(_Float16) * 1); 1194 static _Float16 param11_init[] = {4.0f}; 1195 model->setOperandValue(param11, param11_init, sizeof(_Float16) * 1); 1196 static int32_t param12_init[] = {4}; 1197 model->setOperandValue(param12, param12_init, sizeof(int32_t) * 1); 1198 static int32_t param13_init[] = {4}; 1199 model->setOperandValue(param13, param13_init, sizeof(int32_t) * 1); 1200 static bool8 layout_init[] = {true}; 1201 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 1202 model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in1, roi1, param7, param8, param9, param10, param11, param12, param13, layout}, {out1}); 1203 // Phase 3, inputs and outputs 1204 model->identifyInputsAndOutputs( 1205 {in1, roi1}, 1206 {out1}); 1207 assert(model->isValid()); 1208 } 1209 1210 inline bool is_ignored_nchw_float16_2(int i) { 1211 static std::set<int> ignore = {}; 1212 return ignore.find(i) != ignore.end(); 1213 } 1214 1215 void CreateModel_dynamic_output_shape_nhwc_2(Model *model) { 1216 OperandType type0(Type::BOOL, {}); 1217 OperandType type2(Type::TENSOR_FLOAT32, {4, 4}); 1218 OperandType type38(Type::TENSOR_FLOAT32, {0, 0, 0, 0}); 1219 OperandType type4(Type::TENSOR_INT32, {4}); 1220 OperandType type5(Type::INT32, {}); 1221 OperandType type6(Type::FLOAT32, {}); 1222 OperandType type7(Type::TENSOR_FLOAT32, {4, 4, 8, 2}); 1223 // Phase 1, operands 1224 auto in1 = model->addOperand(&type7); 1225 auto roi1 = model->addOperand(&type2); 1226 auto param7 = model->addOperand(&type4); 1227 auto param8 = model->addOperand(&type5); 1228 auto param9 = model->addOperand(&type5); 1229 auto param10 = model->addOperand(&type6); 1230 auto param11 = model->addOperand(&type6); 1231 auto param12 = model->addOperand(&type5); 1232 auto param13 = model->addOperand(&type5); 1233 auto layout = model->addOperand(&type0); 1234 auto out1 = model->addOperand(&type38); 1235 // Phase 2, operations 1236 static int32_t param7_init[] = {0, 0, 3, 3}; 1237 model->setOperandValue(param7, param7_init, sizeof(int32_t) * 4); 1238 static int32_t param8_init[] = {2}; 1239 model->setOperandValue(param8, param8_init, sizeof(int32_t) * 1); 1240 static int32_t param9_init[] = {3}; 1241 model->setOperandValue(param9, param9_init, sizeof(int32_t) * 1); 1242 static float param10_init[] = {4.0f}; 1243 model->setOperandValue(param10, param10_init, sizeof(float) * 1); 1244 static float param11_init[] = {4.0f}; 1245 model->setOperandValue(param11, param11_init, sizeof(float) * 1); 1246 static int32_t param12_init[] = {4}; 1247 model->setOperandValue(param12, param12_init, sizeof(int32_t) * 1); 1248 static int32_t param13_init[] = {4}; 1249 model->setOperandValue(param13, param13_init, sizeof(int32_t) * 1); 1250 static bool8 layout_init[] = {false}; 1251 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 1252 model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in1, roi1, param7, param8, param9, param10, param11, param12, param13, layout}, {out1}); 1253 // Phase 3, inputs and outputs 1254 model->identifyInputsAndOutputs( 1255 {in1, roi1}, 1256 {out1}); 1257 assert(model->isValid()); 1258 } 1259 1260 inline bool is_ignored_dynamic_output_shape_nhwc_2(int i) { 1261 static std::set<int> ignore = {}; 1262 return ignore.find(i) != ignore.end(); 1263 } 1264 1265 void CreateModel_dynamic_output_shape_nhwc_relaxed_2(Model *model) { 1266 OperandType type0(Type::BOOL, {}); 1267 OperandType type2(Type::TENSOR_FLOAT32, {4, 4}); 1268 OperandType type38(Type::TENSOR_FLOAT32, {0, 0, 0, 0}); 1269 OperandType type4(Type::TENSOR_INT32, {4}); 1270 OperandType type5(Type::INT32, {}); 1271 OperandType type6(Type::FLOAT32, {}); 1272 OperandType type7(Type::TENSOR_FLOAT32, {4, 4, 8, 2}); 1273 // Phase 1, operands 1274 auto in1 = model->addOperand(&type7); 1275 auto roi1 = model->addOperand(&type2); 1276 auto param7 = model->addOperand(&type4); 1277 auto param8 = model->addOperand(&type5); 1278 auto param9 = model->addOperand(&type5); 1279 auto param10 = model->addOperand(&type6); 1280 auto param11 = model->addOperand(&type6); 1281 auto param12 = model->addOperand(&type5); 1282 auto param13 = model->addOperand(&type5); 1283 auto layout = model->addOperand(&type0); 1284 auto out1 = model->addOperand(&type38); 1285 // Phase 2, operations 1286 static int32_t param7_init[] = {0, 0, 3, 3}; 1287 model->setOperandValue(param7, param7_init, sizeof(int32_t) * 4); 1288 static int32_t param8_init[] = {2}; 1289 model->setOperandValue(param8, param8_init, sizeof(int32_t) * 1); 1290 static int32_t param9_init[] = {3}; 1291 model->setOperandValue(param9, param9_init, sizeof(int32_t) * 1); 1292 static float param10_init[] = {4.0f}; 1293 model->setOperandValue(param10, param10_init, sizeof(float) * 1); 1294 static float param11_init[] = {4.0f}; 1295 model->setOperandValue(param11, param11_init, sizeof(float) * 1); 1296 static int32_t param12_init[] = {4}; 1297 model->setOperandValue(param12, param12_init, sizeof(int32_t) * 1); 1298 static int32_t param13_init[] = {4}; 1299 model->setOperandValue(param13, param13_init, sizeof(int32_t) * 1); 1300 static bool8 layout_init[] = {false}; 1301 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 1302 model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in1, roi1, param7, param8, param9, param10, param11, param12, param13, layout}, {out1}); 1303 // Phase 3, inputs and outputs 1304 model->identifyInputsAndOutputs( 1305 {in1, roi1}, 1306 {out1}); 1307 // Phase 4: set relaxed execution 1308 model->relaxComputationFloat32toFloat16(true); 1309 assert(model->isValid()); 1310 } 1311 1312 inline bool is_ignored_dynamic_output_shape_nhwc_relaxed_2(int i) { 1313 static std::set<int> ignore = {}; 1314 return ignore.find(i) != ignore.end(); 1315 } 1316 1317 void CreateModel_dynamic_output_shape_nhwc_quant8_2(Model *model) { 1318 OperandType type0(Type::BOOL, {}); 1319 OperandType type27(Type::TENSOR_QUANT16_ASYMM, {4, 4}, 0.125f, 0); 1320 OperandType type4(Type::TENSOR_INT32, {4}); 1321 OperandType type41(Type::TENSOR_QUANT8_ASYMM, {4, 4, 8, 2}, 0.04f, 0); 1322 OperandType type5(Type::INT32, {}); 1323 OperandType type51(Type::TENSOR_QUANT8_ASYMM, {0, 0, 0, 0}, 0.03125f, 10); 1324 OperandType type6(Type::FLOAT32, {}); 1325 // Phase 1, operands 1326 auto in1 = model->addOperand(&type41); 1327 auto roi1 = model->addOperand(&type27); 1328 auto param7 = model->addOperand(&type4); 1329 auto param8 = model->addOperand(&type5); 1330 auto param9 = model->addOperand(&type5); 1331 auto param10 = model->addOperand(&type6); 1332 auto param11 = model->addOperand(&type6); 1333 auto param12 = model->addOperand(&type5); 1334 auto param13 = model->addOperand(&type5); 1335 auto layout = model->addOperand(&type0); 1336 auto out1 = model->addOperand(&type51); 1337 // Phase 2, operations 1338 static int32_t param7_init[] = {0, 0, 3, 3}; 1339 model->setOperandValue(param7, param7_init, sizeof(int32_t) * 4); 1340 static int32_t param8_init[] = {2}; 1341 model->setOperandValue(param8, param8_init, sizeof(int32_t) * 1); 1342 static int32_t param9_init[] = {3}; 1343 model->setOperandValue(param9, param9_init, sizeof(int32_t) * 1); 1344 static float param10_init[] = {4.0f}; 1345 model->setOperandValue(param10, param10_init, sizeof(float) * 1); 1346 static float param11_init[] = {4.0f}; 1347 model->setOperandValue(param11, param11_init, sizeof(float) * 1); 1348 static int32_t param12_init[] = {4}; 1349 model->setOperandValue(param12, param12_init, sizeof(int32_t) * 1); 1350 static int32_t param13_init[] = {4}; 1351 model->setOperandValue(param13, param13_init, sizeof(int32_t) * 1); 1352 static bool8 layout_init[] = {false}; 1353 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 1354 model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in1, roi1, param7, param8, param9, param10, param11, param12, param13, layout}, {out1}); 1355 // Phase 3, inputs and outputs 1356 model->identifyInputsAndOutputs( 1357 {in1, roi1}, 1358 {out1}); 1359 assert(model->isValid()); 1360 } 1361 1362 inline bool is_ignored_dynamic_output_shape_nhwc_quant8_2(int i) { 1363 static std::set<int> ignore = {}; 1364 return ignore.find(i) != ignore.end(); 1365 } 1366 1367 void CreateModel_dynamic_output_shape_nhwc_float16_2(Model *model) { 1368 OperandType type0(Type::BOOL, {}); 1369 OperandType type30(Type::FLOAT16, {}); 1370 OperandType type31(Type::TENSOR_FLOAT16, {4, 4}); 1371 OperandType type4(Type::TENSOR_INT32, {4}); 1372 OperandType type40(Type::TENSOR_FLOAT16, {0, 0, 0, 0}); 1373 OperandType type43(Type::TENSOR_FLOAT16, {4, 4, 8, 2}); 1374 OperandType type5(Type::INT32, {}); 1375 // Phase 1, operands 1376 auto in1 = model->addOperand(&type43); 1377 auto roi1 = model->addOperand(&type31); 1378 auto param7 = model->addOperand(&type4); 1379 auto param8 = model->addOperand(&type5); 1380 auto param9 = model->addOperand(&type5); 1381 auto param10 = model->addOperand(&type30); 1382 auto param11 = model->addOperand(&type30); 1383 auto param12 = model->addOperand(&type5); 1384 auto param13 = model->addOperand(&type5); 1385 auto layout = model->addOperand(&type0); 1386 auto out1 = model->addOperand(&type40); 1387 // Phase 2, operations 1388 static int32_t param7_init[] = {0, 0, 3, 3}; 1389 model->setOperandValue(param7, param7_init, sizeof(int32_t) * 4); 1390 static int32_t param8_init[] = {2}; 1391 model->setOperandValue(param8, param8_init, sizeof(int32_t) * 1); 1392 static int32_t param9_init[] = {3}; 1393 model->setOperandValue(param9, param9_init, sizeof(int32_t) * 1); 1394 static _Float16 param10_init[] = {4.0f}; 1395 model->setOperandValue(param10, param10_init, sizeof(_Float16) * 1); 1396 static _Float16 param11_init[] = {4.0f}; 1397 model->setOperandValue(param11, param11_init, sizeof(_Float16) * 1); 1398 static int32_t param12_init[] = {4}; 1399 model->setOperandValue(param12, param12_init, sizeof(int32_t) * 1); 1400 static int32_t param13_init[] = {4}; 1401 model->setOperandValue(param13, param13_init, sizeof(int32_t) * 1); 1402 static bool8 layout_init[] = {false}; 1403 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 1404 model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in1, roi1, param7, param8, param9, param10, param11, param12, param13, layout}, {out1}); 1405 // Phase 3, inputs and outputs 1406 model->identifyInputsAndOutputs( 1407 {in1, roi1}, 1408 {out1}); 1409 assert(model->isValid()); 1410 } 1411 1412 inline bool is_ignored_dynamic_output_shape_nhwc_float16_2(int i) { 1413 static std::set<int> ignore = {}; 1414 return ignore.find(i) != ignore.end(); 1415 } 1416 1417 void CreateModel_dynamic_output_shape_nchw_2(Model *model) { 1418 OperandType type0(Type::BOOL, {}); 1419 OperandType type2(Type::TENSOR_FLOAT32, {4, 4}); 1420 OperandType type38(Type::TENSOR_FLOAT32, {0, 0, 0, 0}); 1421 OperandType type4(Type::TENSOR_INT32, {4}); 1422 OperandType type45(Type::TENSOR_FLOAT32, {4, 2, 4, 8}); 1423 OperandType type5(Type::INT32, {}); 1424 OperandType type6(Type::FLOAT32, {}); 1425 // Phase 1, operands 1426 auto in1 = model->addOperand(&type45); 1427 auto roi1 = model->addOperand(&type2); 1428 auto param7 = model->addOperand(&type4); 1429 auto param8 = model->addOperand(&type5); 1430 auto param9 = model->addOperand(&type5); 1431 auto param10 = model->addOperand(&type6); 1432 auto param11 = model->addOperand(&type6); 1433 auto param12 = model->addOperand(&type5); 1434 auto param13 = model->addOperand(&type5); 1435 auto layout = model->addOperand(&type0); 1436 auto out1 = model->addOperand(&type38); 1437 // Phase 2, operations 1438 static int32_t param7_init[] = {0, 0, 3, 3}; 1439 model->setOperandValue(param7, param7_init, sizeof(int32_t) * 4); 1440 static int32_t param8_init[] = {2}; 1441 model->setOperandValue(param8, param8_init, sizeof(int32_t) * 1); 1442 static int32_t param9_init[] = {3}; 1443 model->setOperandValue(param9, param9_init, sizeof(int32_t) * 1); 1444 static float param10_init[] = {4.0f}; 1445 model->setOperandValue(param10, param10_init, sizeof(float) * 1); 1446 static float param11_init[] = {4.0f}; 1447 model->setOperandValue(param11, param11_init, sizeof(float) * 1); 1448 static int32_t param12_init[] = {4}; 1449 model->setOperandValue(param12, param12_init, sizeof(int32_t) * 1); 1450 static int32_t param13_init[] = {4}; 1451 model->setOperandValue(param13, param13_init, sizeof(int32_t) * 1); 1452 static bool8 layout_init[] = {true}; 1453 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 1454 model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in1, roi1, param7, param8, param9, param10, param11, param12, param13, layout}, {out1}); 1455 // Phase 3, inputs and outputs 1456 model->identifyInputsAndOutputs( 1457 {in1, roi1}, 1458 {out1}); 1459 assert(model->isValid()); 1460 } 1461 1462 inline bool is_ignored_dynamic_output_shape_nchw_2(int i) { 1463 static std::set<int> ignore = {}; 1464 return ignore.find(i) != ignore.end(); 1465 } 1466 1467 void CreateModel_dynamic_output_shape_nchw_relaxed_2(Model *model) { 1468 OperandType type0(Type::BOOL, {}); 1469 OperandType type2(Type::TENSOR_FLOAT32, {4, 4}); 1470 OperandType type38(Type::TENSOR_FLOAT32, {0, 0, 0, 0}); 1471 OperandType type4(Type::TENSOR_INT32, {4}); 1472 OperandType type45(Type::TENSOR_FLOAT32, {4, 2, 4, 8}); 1473 OperandType type5(Type::INT32, {}); 1474 OperandType type6(Type::FLOAT32, {}); 1475 // Phase 1, operands 1476 auto in1 = model->addOperand(&type45); 1477 auto roi1 = model->addOperand(&type2); 1478 auto param7 = model->addOperand(&type4); 1479 auto param8 = model->addOperand(&type5); 1480 auto param9 = model->addOperand(&type5); 1481 auto param10 = model->addOperand(&type6); 1482 auto param11 = model->addOperand(&type6); 1483 auto param12 = model->addOperand(&type5); 1484 auto param13 = model->addOperand(&type5); 1485 auto layout = model->addOperand(&type0); 1486 auto out1 = model->addOperand(&type38); 1487 // Phase 2, operations 1488 static int32_t param7_init[] = {0, 0, 3, 3}; 1489 model->setOperandValue(param7, param7_init, sizeof(int32_t) * 4); 1490 static int32_t param8_init[] = {2}; 1491 model->setOperandValue(param8, param8_init, sizeof(int32_t) * 1); 1492 static int32_t param9_init[] = {3}; 1493 model->setOperandValue(param9, param9_init, sizeof(int32_t) * 1); 1494 static float param10_init[] = {4.0f}; 1495 model->setOperandValue(param10, param10_init, sizeof(float) * 1); 1496 static float param11_init[] = {4.0f}; 1497 model->setOperandValue(param11, param11_init, sizeof(float) * 1); 1498 static int32_t param12_init[] = {4}; 1499 model->setOperandValue(param12, param12_init, sizeof(int32_t) * 1); 1500 static int32_t param13_init[] = {4}; 1501 model->setOperandValue(param13, param13_init, sizeof(int32_t) * 1); 1502 static bool8 layout_init[] = {true}; 1503 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 1504 model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in1, roi1, param7, param8, param9, param10, param11, param12, param13, layout}, {out1}); 1505 // Phase 3, inputs and outputs 1506 model->identifyInputsAndOutputs( 1507 {in1, roi1}, 1508 {out1}); 1509 // Phase 4: set relaxed execution 1510 model->relaxComputationFloat32toFloat16(true); 1511 assert(model->isValid()); 1512 } 1513 1514 inline bool is_ignored_dynamic_output_shape_nchw_relaxed_2(int i) { 1515 static std::set<int> ignore = {}; 1516 return ignore.find(i) != ignore.end(); 1517 } 1518 1519 void CreateModel_dynamic_output_shape_nchw_quant8_2(Model *model) { 1520 OperandType type0(Type::BOOL, {}); 1521 OperandType type27(Type::TENSOR_QUANT16_ASYMM, {4, 4}, 0.125f, 0); 1522 OperandType type4(Type::TENSOR_INT32, {4}); 1523 OperandType type47(Type::TENSOR_QUANT8_ASYMM, {4, 2, 4, 8}, 0.04f, 0); 1524 OperandType type5(Type::INT32, {}); 1525 OperandType type51(Type::TENSOR_QUANT8_ASYMM, {0, 0, 0, 0}, 0.03125f, 10); 1526 OperandType type6(Type::FLOAT32, {}); 1527 // Phase 1, operands 1528 auto in1 = model->addOperand(&type47); 1529 auto roi1 = model->addOperand(&type27); 1530 auto param7 = model->addOperand(&type4); 1531 auto param8 = model->addOperand(&type5); 1532 auto param9 = model->addOperand(&type5); 1533 auto param10 = model->addOperand(&type6); 1534 auto param11 = model->addOperand(&type6); 1535 auto param12 = model->addOperand(&type5); 1536 auto param13 = model->addOperand(&type5); 1537 auto layout = model->addOperand(&type0); 1538 auto out1 = model->addOperand(&type51); 1539 // Phase 2, operations 1540 static int32_t param7_init[] = {0, 0, 3, 3}; 1541 model->setOperandValue(param7, param7_init, sizeof(int32_t) * 4); 1542 static int32_t param8_init[] = {2}; 1543 model->setOperandValue(param8, param8_init, sizeof(int32_t) * 1); 1544 static int32_t param9_init[] = {3}; 1545 model->setOperandValue(param9, param9_init, sizeof(int32_t) * 1); 1546 static float param10_init[] = {4.0f}; 1547 model->setOperandValue(param10, param10_init, sizeof(float) * 1); 1548 static float param11_init[] = {4.0f}; 1549 model->setOperandValue(param11, param11_init, sizeof(float) * 1); 1550 static int32_t param12_init[] = {4}; 1551 model->setOperandValue(param12, param12_init, sizeof(int32_t) * 1); 1552 static int32_t param13_init[] = {4}; 1553 model->setOperandValue(param13, param13_init, sizeof(int32_t) * 1); 1554 static bool8 layout_init[] = {true}; 1555 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 1556 model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in1, roi1, param7, param8, param9, param10, param11, param12, param13, layout}, {out1}); 1557 // Phase 3, inputs and outputs 1558 model->identifyInputsAndOutputs( 1559 {in1, roi1}, 1560 {out1}); 1561 assert(model->isValid()); 1562 } 1563 1564 inline bool is_ignored_dynamic_output_shape_nchw_quant8_2(int i) { 1565 static std::set<int> ignore = {}; 1566 return ignore.find(i) != ignore.end(); 1567 } 1568 1569 void CreateModel_dynamic_output_shape_nchw_float16_2(Model *model) { 1570 OperandType type0(Type::BOOL, {}); 1571 OperandType type30(Type::FLOAT16, {}); 1572 OperandType type31(Type::TENSOR_FLOAT16, {4, 4}); 1573 OperandType type4(Type::TENSOR_INT32, {4}); 1574 OperandType type40(Type::TENSOR_FLOAT16, {0, 0, 0, 0}); 1575 OperandType type49(Type::TENSOR_FLOAT16, {4, 2, 4, 8}); 1576 OperandType type5(Type::INT32, {}); 1577 // Phase 1, operands 1578 auto in1 = model->addOperand(&type49); 1579 auto roi1 = model->addOperand(&type31); 1580 auto param7 = model->addOperand(&type4); 1581 auto param8 = model->addOperand(&type5); 1582 auto param9 = model->addOperand(&type5); 1583 auto param10 = model->addOperand(&type30); 1584 auto param11 = model->addOperand(&type30); 1585 auto param12 = model->addOperand(&type5); 1586 auto param13 = model->addOperand(&type5); 1587 auto layout = model->addOperand(&type0); 1588 auto out1 = model->addOperand(&type40); 1589 // Phase 2, operations 1590 static int32_t param7_init[] = {0, 0, 3, 3}; 1591 model->setOperandValue(param7, param7_init, sizeof(int32_t) * 4); 1592 static int32_t param8_init[] = {2}; 1593 model->setOperandValue(param8, param8_init, sizeof(int32_t) * 1); 1594 static int32_t param9_init[] = {3}; 1595 model->setOperandValue(param9, param9_init, sizeof(int32_t) * 1); 1596 static _Float16 param10_init[] = {4.0f}; 1597 model->setOperandValue(param10, param10_init, sizeof(_Float16) * 1); 1598 static _Float16 param11_init[] = {4.0f}; 1599 model->setOperandValue(param11, param11_init, sizeof(_Float16) * 1); 1600 static int32_t param12_init[] = {4}; 1601 model->setOperandValue(param12, param12_init, sizeof(int32_t) * 1); 1602 static int32_t param13_init[] = {4}; 1603 model->setOperandValue(param13, param13_init, sizeof(int32_t) * 1); 1604 static bool8 layout_init[] = {true}; 1605 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 1606 model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in1, roi1, param7, param8, param9, param10, param11, param12, param13, layout}, {out1}); 1607 // Phase 3, inputs and outputs 1608 model->identifyInputsAndOutputs( 1609 {in1, roi1}, 1610 {out1}); 1611 assert(model->isValid()); 1612 } 1613 1614 inline bool is_ignored_dynamic_output_shape_nchw_float16_2(int i) { 1615 static std::set<int> ignore = {}; 1616 return ignore.find(i) != ignore.end(); 1617 } 1618 1619 void CreateModel_nhwc_3(Model *model) { 1620 OperandType type0(Type::BOOL, {}); 1621 OperandType type2(Type::TENSOR_FLOAT32, {4, 4}); 1622 OperandType type4(Type::TENSOR_INT32, {4}); 1623 OperandType type5(Type::INT32, {}); 1624 OperandType type6(Type::FLOAT32, {}); 1625 OperandType type8(Type::TENSOR_FLOAT32, {4, 2, 3, 2}); 1626 OperandType type9(Type::TENSOR_FLOAT32, {2, 4, 8, 2}); 1627 // Phase 1, operands 1628 auto in2 = model->addOperand(&type9); 1629 auto roi2 = model->addOperand(&type2); 1630 auto param14 = model->addOperand(&type4); 1631 auto param15 = model->addOperand(&type5); 1632 auto param16 = model->addOperand(&type5); 1633 auto param17 = model->addOperand(&type6); 1634 auto param18 = model->addOperand(&type6); 1635 auto param19 = model->addOperand(&type5); 1636 auto param20 = model->addOperand(&type5); 1637 auto layout = model->addOperand(&type0); 1638 auto out2 = model->addOperand(&type8); 1639 // Phase 2, operations 1640 static int32_t param14_init[] = {0, 0, 1, 1}; 1641 model->setOperandValue(param14, param14_init, sizeof(int32_t) * 4); 1642 static int32_t param15_init[] = {2}; 1643 model->setOperandValue(param15, param15_init, sizeof(int32_t) * 1); 1644 static int32_t param16_init[] = {3}; 1645 model->setOperandValue(param16, param16_init, sizeof(int32_t) * 1); 1646 static float param17_init[] = {4.0f}; 1647 model->setOperandValue(param17, param17_init, sizeof(float) * 1); 1648 static float param18_init[] = {4.0f}; 1649 model->setOperandValue(param18, param18_init, sizeof(float) * 1); 1650 static int32_t param19_init[] = {0}; 1651 model->setOperandValue(param19, param19_init, sizeof(int32_t) * 1); 1652 static int32_t param20_init[] = {0}; 1653 model->setOperandValue(param20, param20_init, sizeof(int32_t) * 1); 1654 static bool8 layout_init[] = {false}; 1655 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 1656 model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in2, roi2, param14, param15, param16, param17, param18, param19, param20, layout}, {out2}); 1657 // Phase 3, inputs and outputs 1658 model->identifyInputsAndOutputs( 1659 {in2, roi2}, 1660 {out2}); 1661 assert(model->isValid()); 1662 } 1663 1664 inline bool is_ignored_nhwc_3(int i) { 1665 static std::set<int> ignore = {}; 1666 return ignore.find(i) != ignore.end(); 1667 } 1668 1669 void CreateModel_nhwc_relaxed_3(Model *model) { 1670 OperandType type0(Type::BOOL, {}); 1671 OperandType type2(Type::TENSOR_FLOAT32, {4, 4}); 1672 OperandType type4(Type::TENSOR_INT32, {4}); 1673 OperandType type5(Type::INT32, {}); 1674 OperandType type6(Type::FLOAT32, {}); 1675 OperandType type8(Type::TENSOR_FLOAT32, {4, 2, 3, 2}); 1676 OperandType type9(Type::TENSOR_FLOAT32, {2, 4, 8, 2}); 1677 // Phase 1, operands 1678 auto in2 = model->addOperand(&type9); 1679 auto roi2 = model->addOperand(&type2); 1680 auto param14 = model->addOperand(&type4); 1681 auto param15 = model->addOperand(&type5); 1682 auto param16 = model->addOperand(&type5); 1683 auto param17 = model->addOperand(&type6); 1684 auto param18 = model->addOperand(&type6); 1685 auto param19 = model->addOperand(&type5); 1686 auto param20 = model->addOperand(&type5); 1687 auto layout = model->addOperand(&type0); 1688 auto out2 = model->addOperand(&type8); 1689 // Phase 2, operations 1690 static int32_t param14_init[] = {0, 0, 1, 1}; 1691 model->setOperandValue(param14, param14_init, sizeof(int32_t) * 4); 1692 static int32_t param15_init[] = {2}; 1693 model->setOperandValue(param15, param15_init, sizeof(int32_t) * 1); 1694 static int32_t param16_init[] = {3}; 1695 model->setOperandValue(param16, param16_init, sizeof(int32_t) * 1); 1696 static float param17_init[] = {4.0f}; 1697 model->setOperandValue(param17, param17_init, sizeof(float) * 1); 1698 static float param18_init[] = {4.0f}; 1699 model->setOperandValue(param18, param18_init, sizeof(float) * 1); 1700 static int32_t param19_init[] = {0}; 1701 model->setOperandValue(param19, param19_init, sizeof(int32_t) * 1); 1702 static int32_t param20_init[] = {0}; 1703 model->setOperandValue(param20, param20_init, sizeof(int32_t) * 1); 1704 static bool8 layout_init[] = {false}; 1705 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 1706 model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in2, roi2, param14, param15, param16, param17, param18, param19, param20, layout}, {out2}); 1707 // Phase 3, inputs and outputs 1708 model->identifyInputsAndOutputs( 1709 {in2, roi2}, 1710 {out2}); 1711 // Phase 4: set relaxed execution 1712 model->relaxComputationFloat32toFloat16(true); 1713 assert(model->isValid()); 1714 } 1715 1716 inline bool is_ignored_nhwc_relaxed_3(int i) { 1717 static std::set<int> ignore = {}; 1718 return ignore.find(i) != ignore.end(); 1719 } 1720 1721 void CreateModel_nhwc_quant8_3(Model *model) { 1722 OperandType type0(Type::BOOL, {}); 1723 OperandType type27(Type::TENSOR_QUANT16_ASYMM, {4, 4}, 0.125f, 0); 1724 OperandType type4(Type::TENSOR_INT32, {4}); 1725 OperandType type42(Type::TENSOR_QUANT8_ASYMM, {4, 2, 3, 2}, 0.03125f, 10); 1726 OperandType type5(Type::INT32, {}); 1727 OperandType type52(Type::TENSOR_QUANT8_ASYMM, {2, 4, 8, 2}, 0.04f, 0); 1728 OperandType type6(Type::FLOAT32, {}); 1729 // Phase 1, operands 1730 auto in2 = model->addOperand(&type52); 1731 auto roi2 = model->addOperand(&type27); 1732 auto param14 = model->addOperand(&type4); 1733 auto param15 = model->addOperand(&type5); 1734 auto param16 = model->addOperand(&type5); 1735 auto param17 = model->addOperand(&type6); 1736 auto param18 = model->addOperand(&type6); 1737 auto param19 = model->addOperand(&type5); 1738 auto param20 = model->addOperand(&type5); 1739 auto layout = model->addOperand(&type0); 1740 auto out2 = model->addOperand(&type42); 1741 // Phase 2, operations 1742 static int32_t param14_init[] = {0, 0, 1, 1}; 1743 model->setOperandValue(param14, param14_init, sizeof(int32_t) * 4); 1744 static int32_t param15_init[] = {2}; 1745 model->setOperandValue(param15, param15_init, sizeof(int32_t) * 1); 1746 static int32_t param16_init[] = {3}; 1747 model->setOperandValue(param16, param16_init, sizeof(int32_t) * 1); 1748 static float param17_init[] = {4.0f}; 1749 model->setOperandValue(param17, param17_init, sizeof(float) * 1); 1750 static float param18_init[] = {4.0f}; 1751 model->setOperandValue(param18, param18_init, sizeof(float) * 1); 1752 static int32_t param19_init[] = {0}; 1753 model->setOperandValue(param19, param19_init, sizeof(int32_t) * 1); 1754 static int32_t param20_init[] = {0}; 1755 model->setOperandValue(param20, param20_init, sizeof(int32_t) * 1); 1756 static bool8 layout_init[] = {false}; 1757 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 1758 model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in2, roi2, param14, param15, param16, param17, param18, param19, param20, layout}, {out2}); 1759 // Phase 3, inputs and outputs 1760 model->identifyInputsAndOutputs( 1761 {in2, roi2}, 1762 {out2}); 1763 assert(model->isValid()); 1764 } 1765 1766 inline bool is_ignored_nhwc_quant8_3(int i) { 1767 static std::set<int> ignore = {}; 1768 return ignore.find(i) != ignore.end(); 1769 } 1770 1771 void CreateModel_nhwc_float16_3(Model *model) { 1772 OperandType type0(Type::BOOL, {}); 1773 OperandType type30(Type::FLOAT16, {}); 1774 OperandType type31(Type::TENSOR_FLOAT16, {4, 4}); 1775 OperandType type4(Type::TENSOR_INT32, {4}); 1776 OperandType type44(Type::TENSOR_FLOAT16, {4, 2, 3, 2}); 1777 OperandType type5(Type::INT32, {}); 1778 OperandType type53(Type::TENSOR_FLOAT16, {2, 4, 8, 2}); 1779 // Phase 1, operands 1780 auto in2 = model->addOperand(&type53); 1781 auto roi2 = model->addOperand(&type31); 1782 auto param14 = model->addOperand(&type4); 1783 auto param15 = model->addOperand(&type5); 1784 auto param16 = model->addOperand(&type5); 1785 auto param17 = model->addOperand(&type30); 1786 auto param18 = model->addOperand(&type30); 1787 auto param19 = model->addOperand(&type5); 1788 auto param20 = model->addOperand(&type5); 1789 auto layout = model->addOperand(&type0); 1790 auto out2 = model->addOperand(&type44); 1791 // Phase 2, operations 1792 static int32_t param14_init[] = {0, 0, 1, 1}; 1793 model->setOperandValue(param14, param14_init, sizeof(int32_t) * 4); 1794 static int32_t param15_init[] = {2}; 1795 model->setOperandValue(param15, param15_init, sizeof(int32_t) * 1); 1796 static int32_t param16_init[] = {3}; 1797 model->setOperandValue(param16, param16_init, sizeof(int32_t) * 1); 1798 static _Float16 param17_init[] = {4.0f}; 1799 model->setOperandValue(param17, param17_init, sizeof(_Float16) * 1); 1800 static _Float16 param18_init[] = {4.0f}; 1801 model->setOperandValue(param18, param18_init, sizeof(_Float16) * 1); 1802 static int32_t param19_init[] = {0}; 1803 model->setOperandValue(param19, param19_init, sizeof(int32_t) * 1); 1804 static int32_t param20_init[] = {0}; 1805 model->setOperandValue(param20, param20_init, sizeof(int32_t) * 1); 1806 static bool8 layout_init[] = {false}; 1807 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 1808 model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in2, roi2, param14, param15, param16, param17, param18, param19, param20, layout}, {out2}); 1809 // Phase 3, inputs and outputs 1810 model->identifyInputsAndOutputs( 1811 {in2, roi2}, 1812 {out2}); 1813 assert(model->isValid()); 1814 } 1815 1816 inline bool is_ignored_nhwc_float16_3(int i) { 1817 static std::set<int> ignore = {}; 1818 return ignore.find(i) != ignore.end(); 1819 } 1820 1821 void CreateModel_nchw_3(Model *model) { 1822 OperandType type0(Type::BOOL, {}); 1823 OperandType type2(Type::TENSOR_FLOAT32, {4, 4}); 1824 OperandType type4(Type::TENSOR_INT32, {4}); 1825 OperandType type46(Type::TENSOR_FLOAT32, {4, 2, 2, 3}); 1826 OperandType type5(Type::INT32, {}); 1827 OperandType type54(Type::TENSOR_FLOAT32, {2, 2, 4, 8}); 1828 OperandType type6(Type::FLOAT32, {}); 1829 // Phase 1, operands 1830 auto in2 = model->addOperand(&type54); 1831 auto roi2 = model->addOperand(&type2); 1832 auto param14 = model->addOperand(&type4); 1833 auto param15 = model->addOperand(&type5); 1834 auto param16 = model->addOperand(&type5); 1835 auto param17 = model->addOperand(&type6); 1836 auto param18 = model->addOperand(&type6); 1837 auto param19 = model->addOperand(&type5); 1838 auto param20 = model->addOperand(&type5); 1839 auto layout = model->addOperand(&type0); 1840 auto out2 = model->addOperand(&type46); 1841 // Phase 2, operations 1842 static int32_t param14_init[] = {0, 0, 1, 1}; 1843 model->setOperandValue(param14, param14_init, sizeof(int32_t) * 4); 1844 static int32_t param15_init[] = {2}; 1845 model->setOperandValue(param15, param15_init, sizeof(int32_t) * 1); 1846 static int32_t param16_init[] = {3}; 1847 model->setOperandValue(param16, param16_init, sizeof(int32_t) * 1); 1848 static float param17_init[] = {4.0f}; 1849 model->setOperandValue(param17, param17_init, sizeof(float) * 1); 1850 static float param18_init[] = {4.0f}; 1851 model->setOperandValue(param18, param18_init, sizeof(float) * 1); 1852 static int32_t param19_init[] = {0}; 1853 model->setOperandValue(param19, param19_init, sizeof(int32_t) * 1); 1854 static int32_t param20_init[] = {0}; 1855 model->setOperandValue(param20, param20_init, sizeof(int32_t) * 1); 1856 static bool8 layout_init[] = {true}; 1857 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 1858 model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in2, roi2, param14, param15, param16, param17, param18, param19, param20, layout}, {out2}); 1859 // Phase 3, inputs and outputs 1860 model->identifyInputsAndOutputs( 1861 {in2, roi2}, 1862 {out2}); 1863 assert(model->isValid()); 1864 } 1865 1866 inline bool is_ignored_nchw_3(int i) { 1867 static std::set<int> ignore = {}; 1868 return ignore.find(i) != ignore.end(); 1869 } 1870 1871 void CreateModel_nchw_relaxed_3(Model *model) { 1872 OperandType type0(Type::BOOL, {}); 1873 OperandType type2(Type::TENSOR_FLOAT32, {4, 4}); 1874 OperandType type4(Type::TENSOR_INT32, {4}); 1875 OperandType type46(Type::TENSOR_FLOAT32, {4, 2, 2, 3}); 1876 OperandType type5(Type::INT32, {}); 1877 OperandType type54(Type::TENSOR_FLOAT32, {2, 2, 4, 8}); 1878 OperandType type6(Type::FLOAT32, {}); 1879 // Phase 1, operands 1880 auto in2 = model->addOperand(&type54); 1881 auto roi2 = model->addOperand(&type2); 1882 auto param14 = model->addOperand(&type4); 1883 auto param15 = model->addOperand(&type5); 1884 auto param16 = model->addOperand(&type5); 1885 auto param17 = model->addOperand(&type6); 1886 auto param18 = model->addOperand(&type6); 1887 auto param19 = model->addOperand(&type5); 1888 auto param20 = model->addOperand(&type5); 1889 auto layout = model->addOperand(&type0); 1890 auto out2 = model->addOperand(&type46); 1891 // Phase 2, operations 1892 static int32_t param14_init[] = {0, 0, 1, 1}; 1893 model->setOperandValue(param14, param14_init, sizeof(int32_t) * 4); 1894 static int32_t param15_init[] = {2}; 1895 model->setOperandValue(param15, param15_init, sizeof(int32_t) * 1); 1896 static int32_t param16_init[] = {3}; 1897 model->setOperandValue(param16, param16_init, sizeof(int32_t) * 1); 1898 static float param17_init[] = {4.0f}; 1899 model->setOperandValue(param17, param17_init, sizeof(float) * 1); 1900 static float param18_init[] = {4.0f}; 1901 model->setOperandValue(param18, param18_init, sizeof(float) * 1); 1902 static int32_t param19_init[] = {0}; 1903 model->setOperandValue(param19, param19_init, sizeof(int32_t) * 1); 1904 static int32_t param20_init[] = {0}; 1905 model->setOperandValue(param20, param20_init, sizeof(int32_t) * 1); 1906 static bool8 layout_init[] = {true}; 1907 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 1908 model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in2, roi2, param14, param15, param16, param17, param18, param19, param20, layout}, {out2}); 1909 // Phase 3, inputs and outputs 1910 model->identifyInputsAndOutputs( 1911 {in2, roi2}, 1912 {out2}); 1913 // Phase 4: set relaxed execution 1914 model->relaxComputationFloat32toFloat16(true); 1915 assert(model->isValid()); 1916 } 1917 1918 inline bool is_ignored_nchw_relaxed_3(int i) { 1919 static std::set<int> ignore = {}; 1920 return ignore.find(i) != ignore.end(); 1921 } 1922 1923 void CreateModel_nchw_quant8_3(Model *model) { 1924 OperandType type0(Type::BOOL, {}); 1925 OperandType type27(Type::TENSOR_QUANT16_ASYMM, {4, 4}, 0.125f, 0); 1926 OperandType type4(Type::TENSOR_INT32, {4}); 1927 OperandType type48(Type::TENSOR_QUANT8_ASYMM, {4, 2, 2, 3}, 0.03125f, 10); 1928 OperandType type5(Type::INT32, {}); 1929 OperandType type55(Type::TENSOR_QUANT8_ASYMM, {2, 2, 4, 8}, 0.04f, 0); 1930 OperandType type6(Type::FLOAT32, {}); 1931 // Phase 1, operands 1932 auto in2 = model->addOperand(&type55); 1933 auto roi2 = model->addOperand(&type27); 1934 auto param14 = model->addOperand(&type4); 1935 auto param15 = model->addOperand(&type5); 1936 auto param16 = model->addOperand(&type5); 1937 auto param17 = model->addOperand(&type6); 1938 auto param18 = model->addOperand(&type6); 1939 auto param19 = model->addOperand(&type5); 1940 auto param20 = model->addOperand(&type5); 1941 auto layout = model->addOperand(&type0); 1942 auto out2 = model->addOperand(&type48); 1943 // Phase 2, operations 1944 static int32_t param14_init[] = {0, 0, 1, 1}; 1945 model->setOperandValue(param14, param14_init, sizeof(int32_t) * 4); 1946 static int32_t param15_init[] = {2}; 1947 model->setOperandValue(param15, param15_init, sizeof(int32_t) * 1); 1948 static int32_t param16_init[] = {3}; 1949 model->setOperandValue(param16, param16_init, sizeof(int32_t) * 1); 1950 static float param17_init[] = {4.0f}; 1951 model->setOperandValue(param17, param17_init, sizeof(float) * 1); 1952 static float param18_init[] = {4.0f}; 1953 model->setOperandValue(param18, param18_init, sizeof(float) * 1); 1954 static int32_t param19_init[] = {0}; 1955 model->setOperandValue(param19, param19_init, sizeof(int32_t) * 1); 1956 static int32_t param20_init[] = {0}; 1957 model->setOperandValue(param20, param20_init, sizeof(int32_t) * 1); 1958 static bool8 layout_init[] = {true}; 1959 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 1960 model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in2, roi2, param14, param15, param16, param17, param18, param19, param20, layout}, {out2}); 1961 // Phase 3, inputs and outputs 1962 model->identifyInputsAndOutputs( 1963 {in2, roi2}, 1964 {out2}); 1965 assert(model->isValid()); 1966 } 1967 1968 inline bool is_ignored_nchw_quant8_3(int i) { 1969 static std::set<int> ignore = {}; 1970 return ignore.find(i) != ignore.end(); 1971 } 1972 1973 void CreateModel_nchw_float16_3(Model *model) { 1974 OperandType type0(Type::BOOL, {}); 1975 OperandType type30(Type::FLOAT16, {}); 1976 OperandType type31(Type::TENSOR_FLOAT16, {4, 4}); 1977 OperandType type4(Type::TENSOR_INT32, {4}); 1978 OperandType type5(Type::INT32, {}); 1979 OperandType type50(Type::TENSOR_FLOAT16, {4, 2, 2, 3}); 1980 OperandType type56(Type::TENSOR_FLOAT16, {2, 2, 4, 8}); 1981 // Phase 1, operands 1982 auto in2 = model->addOperand(&type56); 1983 auto roi2 = model->addOperand(&type31); 1984 auto param14 = model->addOperand(&type4); 1985 auto param15 = model->addOperand(&type5); 1986 auto param16 = model->addOperand(&type5); 1987 auto param17 = model->addOperand(&type30); 1988 auto param18 = model->addOperand(&type30); 1989 auto param19 = model->addOperand(&type5); 1990 auto param20 = model->addOperand(&type5); 1991 auto layout = model->addOperand(&type0); 1992 auto out2 = model->addOperand(&type50); 1993 // Phase 2, operations 1994 static int32_t param14_init[] = {0, 0, 1, 1}; 1995 model->setOperandValue(param14, param14_init, sizeof(int32_t) * 4); 1996 static int32_t param15_init[] = {2}; 1997 model->setOperandValue(param15, param15_init, sizeof(int32_t) * 1); 1998 static int32_t param16_init[] = {3}; 1999 model->setOperandValue(param16, param16_init, sizeof(int32_t) * 1); 2000 static _Float16 param17_init[] = {4.0f}; 2001 model->setOperandValue(param17, param17_init, sizeof(_Float16) * 1); 2002 static _Float16 param18_init[] = {4.0f}; 2003 model->setOperandValue(param18, param18_init, sizeof(_Float16) * 1); 2004 static int32_t param19_init[] = {0}; 2005 model->setOperandValue(param19, param19_init, sizeof(int32_t) * 1); 2006 static int32_t param20_init[] = {0}; 2007 model->setOperandValue(param20, param20_init, sizeof(int32_t) * 1); 2008 static bool8 layout_init[] = {true}; 2009 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 2010 model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in2, roi2, param14, param15, param16, param17, param18, param19, param20, layout}, {out2}); 2011 // Phase 3, inputs and outputs 2012 model->identifyInputsAndOutputs( 2013 {in2, roi2}, 2014 {out2}); 2015 assert(model->isValid()); 2016 } 2017 2018 inline bool is_ignored_nchw_float16_3(int i) { 2019 static std::set<int> ignore = {}; 2020 return ignore.find(i) != ignore.end(); 2021 } 2022 2023 void CreateModel_dynamic_output_shape_nhwc_3(Model *model) { 2024 OperandType type0(Type::BOOL, {}); 2025 OperandType type2(Type::TENSOR_FLOAT32, {4, 4}); 2026 OperandType type38(Type::TENSOR_FLOAT32, {0, 0, 0, 0}); 2027 OperandType type4(Type::TENSOR_INT32, {4}); 2028 OperandType type5(Type::INT32, {}); 2029 OperandType type6(Type::FLOAT32, {}); 2030 OperandType type9(Type::TENSOR_FLOAT32, {2, 4, 8, 2}); 2031 // Phase 1, operands 2032 auto in2 = model->addOperand(&type9); 2033 auto roi2 = model->addOperand(&type2); 2034 auto param14 = model->addOperand(&type4); 2035 auto param15 = model->addOperand(&type5); 2036 auto param16 = model->addOperand(&type5); 2037 auto param17 = model->addOperand(&type6); 2038 auto param18 = model->addOperand(&type6); 2039 auto param19 = model->addOperand(&type5); 2040 auto param20 = model->addOperand(&type5); 2041 auto layout = model->addOperand(&type0); 2042 auto out2 = model->addOperand(&type38); 2043 // Phase 2, operations 2044 static int32_t param14_init[] = {0, 0, 1, 1}; 2045 model->setOperandValue(param14, param14_init, sizeof(int32_t) * 4); 2046 static int32_t param15_init[] = {2}; 2047 model->setOperandValue(param15, param15_init, sizeof(int32_t) * 1); 2048 static int32_t param16_init[] = {3}; 2049 model->setOperandValue(param16, param16_init, sizeof(int32_t) * 1); 2050 static float param17_init[] = {4.0f}; 2051 model->setOperandValue(param17, param17_init, sizeof(float) * 1); 2052 static float param18_init[] = {4.0f}; 2053 model->setOperandValue(param18, param18_init, sizeof(float) * 1); 2054 static int32_t param19_init[] = {0}; 2055 model->setOperandValue(param19, param19_init, sizeof(int32_t) * 1); 2056 static int32_t param20_init[] = {0}; 2057 model->setOperandValue(param20, param20_init, sizeof(int32_t) * 1); 2058 static bool8 layout_init[] = {false}; 2059 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 2060 model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in2, roi2, param14, param15, param16, param17, param18, param19, param20, layout}, {out2}); 2061 // Phase 3, inputs and outputs 2062 model->identifyInputsAndOutputs( 2063 {in2, roi2}, 2064 {out2}); 2065 assert(model->isValid()); 2066 } 2067 2068 inline bool is_ignored_dynamic_output_shape_nhwc_3(int i) { 2069 static std::set<int> ignore = {}; 2070 return ignore.find(i) != ignore.end(); 2071 } 2072 2073 void CreateModel_dynamic_output_shape_nhwc_relaxed_3(Model *model) { 2074 OperandType type0(Type::BOOL, {}); 2075 OperandType type2(Type::TENSOR_FLOAT32, {4, 4}); 2076 OperandType type38(Type::TENSOR_FLOAT32, {0, 0, 0, 0}); 2077 OperandType type4(Type::TENSOR_INT32, {4}); 2078 OperandType type5(Type::INT32, {}); 2079 OperandType type6(Type::FLOAT32, {}); 2080 OperandType type9(Type::TENSOR_FLOAT32, {2, 4, 8, 2}); 2081 // Phase 1, operands 2082 auto in2 = model->addOperand(&type9); 2083 auto roi2 = model->addOperand(&type2); 2084 auto param14 = model->addOperand(&type4); 2085 auto param15 = model->addOperand(&type5); 2086 auto param16 = model->addOperand(&type5); 2087 auto param17 = model->addOperand(&type6); 2088 auto param18 = model->addOperand(&type6); 2089 auto param19 = model->addOperand(&type5); 2090 auto param20 = model->addOperand(&type5); 2091 auto layout = model->addOperand(&type0); 2092 auto out2 = model->addOperand(&type38); 2093 // Phase 2, operations 2094 static int32_t param14_init[] = {0, 0, 1, 1}; 2095 model->setOperandValue(param14, param14_init, sizeof(int32_t) * 4); 2096 static int32_t param15_init[] = {2}; 2097 model->setOperandValue(param15, param15_init, sizeof(int32_t) * 1); 2098 static int32_t param16_init[] = {3}; 2099 model->setOperandValue(param16, param16_init, sizeof(int32_t) * 1); 2100 static float param17_init[] = {4.0f}; 2101 model->setOperandValue(param17, param17_init, sizeof(float) * 1); 2102 static float param18_init[] = {4.0f}; 2103 model->setOperandValue(param18, param18_init, sizeof(float) * 1); 2104 static int32_t param19_init[] = {0}; 2105 model->setOperandValue(param19, param19_init, sizeof(int32_t) * 1); 2106 static int32_t param20_init[] = {0}; 2107 model->setOperandValue(param20, param20_init, sizeof(int32_t) * 1); 2108 static bool8 layout_init[] = {false}; 2109 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 2110 model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in2, roi2, param14, param15, param16, param17, param18, param19, param20, layout}, {out2}); 2111 // Phase 3, inputs and outputs 2112 model->identifyInputsAndOutputs( 2113 {in2, roi2}, 2114 {out2}); 2115 // Phase 4: set relaxed execution 2116 model->relaxComputationFloat32toFloat16(true); 2117 assert(model->isValid()); 2118 } 2119 2120 inline bool is_ignored_dynamic_output_shape_nhwc_relaxed_3(int i) { 2121 static std::set<int> ignore = {}; 2122 return ignore.find(i) != ignore.end(); 2123 } 2124 2125 void CreateModel_dynamic_output_shape_nhwc_quant8_3(Model *model) { 2126 OperandType type0(Type::BOOL, {}); 2127 OperandType type27(Type::TENSOR_QUANT16_ASYMM, {4, 4}, 0.125f, 0); 2128 OperandType type4(Type::TENSOR_INT32, {4}); 2129 OperandType type5(Type::INT32, {}); 2130 OperandType type51(Type::TENSOR_QUANT8_ASYMM, {0, 0, 0, 0}, 0.03125f, 10); 2131 OperandType type52(Type::TENSOR_QUANT8_ASYMM, {2, 4, 8, 2}, 0.04f, 0); 2132 OperandType type6(Type::FLOAT32, {}); 2133 // Phase 1, operands 2134 auto in2 = model->addOperand(&type52); 2135 auto roi2 = model->addOperand(&type27); 2136 auto param14 = model->addOperand(&type4); 2137 auto param15 = model->addOperand(&type5); 2138 auto param16 = model->addOperand(&type5); 2139 auto param17 = model->addOperand(&type6); 2140 auto param18 = model->addOperand(&type6); 2141 auto param19 = model->addOperand(&type5); 2142 auto param20 = model->addOperand(&type5); 2143 auto layout = model->addOperand(&type0); 2144 auto out2 = model->addOperand(&type51); 2145 // Phase 2, operations 2146 static int32_t param14_init[] = {0, 0, 1, 1}; 2147 model->setOperandValue(param14, param14_init, sizeof(int32_t) * 4); 2148 static int32_t param15_init[] = {2}; 2149 model->setOperandValue(param15, param15_init, sizeof(int32_t) * 1); 2150 static int32_t param16_init[] = {3}; 2151 model->setOperandValue(param16, param16_init, sizeof(int32_t) * 1); 2152 static float param17_init[] = {4.0f}; 2153 model->setOperandValue(param17, param17_init, sizeof(float) * 1); 2154 static float param18_init[] = {4.0f}; 2155 model->setOperandValue(param18, param18_init, sizeof(float) * 1); 2156 static int32_t param19_init[] = {0}; 2157 model->setOperandValue(param19, param19_init, sizeof(int32_t) * 1); 2158 static int32_t param20_init[] = {0}; 2159 model->setOperandValue(param20, param20_init, sizeof(int32_t) * 1); 2160 static bool8 layout_init[] = {false}; 2161 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 2162 model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in2, roi2, param14, param15, param16, param17, param18, param19, param20, layout}, {out2}); 2163 // Phase 3, inputs and outputs 2164 model->identifyInputsAndOutputs( 2165 {in2, roi2}, 2166 {out2}); 2167 assert(model->isValid()); 2168 } 2169 2170 inline bool is_ignored_dynamic_output_shape_nhwc_quant8_3(int i) { 2171 static std::set<int> ignore = {}; 2172 return ignore.find(i) != ignore.end(); 2173 } 2174 2175 void CreateModel_dynamic_output_shape_nhwc_float16_3(Model *model) { 2176 OperandType type0(Type::BOOL, {}); 2177 OperandType type30(Type::FLOAT16, {}); 2178 OperandType type31(Type::TENSOR_FLOAT16, {4, 4}); 2179 OperandType type4(Type::TENSOR_INT32, {4}); 2180 OperandType type40(Type::TENSOR_FLOAT16, {0, 0, 0, 0}); 2181 OperandType type5(Type::INT32, {}); 2182 OperandType type53(Type::TENSOR_FLOAT16, {2, 4, 8, 2}); 2183 // Phase 1, operands 2184 auto in2 = model->addOperand(&type53); 2185 auto roi2 = model->addOperand(&type31); 2186 auto param14 = model->addOperand(&type4); 2187 auto param15 = model->addOperand(&type5); 2188 auto param16 = model->addOperand(&type5); 2189 auto param17 = model->addOperand(&type30); 2190 auto param18 = model->addOperand(&type30); 2191 auto param19 = model->addOperand(&type5); 2192 auto param20 = model->addOperand(&type5); 2193 auto layout = model->addOperand(&type0); 2194 auto out2 = model->addOperand(&type40); 2195 // Phase 2, operations 2196 static int32_t param14_init[] = {0, 0, 1, 1}; 2197 model->setOperandValue(param14, param14_init, sizeof(int32_t) * 4); 2198 static int32_t param15_init[] = {2}; 2199 model->setOperandValue(param15, param15_init, sizeof(int32_t) * 1); 2200 static int32_t param16_init[] = {3}; 2201 model->setOperandValue(param16, param16_init, sizeof(int32_t) * 1); 2202 static _Float16 param17_init[] = {4.0f}; 2203 model->setOperandValue(param17, param17_init, sizeof(_Float16) * 1); 2204 static _Float16 param18_init[] = {4.0f}; 2205 model->setOperandValue(param18, param18_init, sizeof(_Float16) * 1); 2206 static int32_t param19_init[] = {0}; 2207 model->setOperandValue(param19, param19_init, sizeof(int32_t) * 1); 2208 static int32_t param20_init[] = {0}; 2209 model->setOperandValue(param20, param20_init, sizeof(int32_t) * 1); 2210 static bool8 layout_init[] = {false}; 2211 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 2212 model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in2, roi2, param14, param15, param16, param17, param18, param19, param20, layout}, {out2}); 2213 // Phase 3, inputs and outputs 2214 model->identifyInputsAndOutputs( 2215 {in2, roi2}, 2216 {out2}); 2217 assert(model->isValid()); 2218 } 2219 2220 inline bool is_ignored_dynamic_output_shape_nhwc_float16_3(int i) { 2221 static std::set<int> ignore = {}; 2222 return ignore.find(i) != ignore.end(); 2223 } 2224 2225 void CreateModel_dynamic_output_shape_nchw_3(Model *model) { 2226 OperandType type0(Type::BOOL, {}); 2227 OperandType type2(Type::TENSOR_FLOAT32, {4, 4}); 2228 OperandType type38(Type::TENSOR_FLOAT32, {0, 0, 0, 0}); 2229 OperandType type4(Type::TENSOR_INT32, {4}); 2230 OperandType type5(Type::INT32, {}); 2231 OperandType type54(Type::TENSOR_FLOAT32, {2, 2, 4, 8}); 2232 OperandType type6(Type::FLOAT32, {}); 2233 // Phase 1, operands 2234 auto in2 = model->addOperand(&type54); 2235 auto roi2 = model->addOperand(&type2); 2236 auto param14 = model->addOperand(&type4); 2237 auto param15 = model->addOperand(&type5); 2238 auto param16 = model->addOperand(&type5); 2239 auto param17 = model->addOperand(&type6); 2240 auto param18 = model->addOperand(&type6); 2241 auto param19 = model->addOperand(&type5); 2242 auto param20 = model->addOperand(&type5); 2243 auto layout = model->addOperand(&type0); 2244 auto out2 = model->addOperand(&type38); 2245 // Phase 2, operations 2246 static int32_t param14_init[] = {0, 0, 1, 1}; 2247 model->setOperandValue(param14, param14_init, sizeof(int32_t) * 4); 2248 static int32_t param15_init[] = {2}; 2249 model->setOperandValue(param15, param15_init, sizeof(int32_t) * 1); 2250 static int32_t param16_init[] = {3}; 2251 model->setOperandValue(param16, param16_init, sizeof(int32_t) * 1); 2252 static float param17_init[] = {4.0f}; 2253 model->setOperandValue(param17, param17_init, sizeof(float) * 1); 2254 static float param18_init[] = {4.0f}; 2255 model->setOperandValue(param18, param18_init, sizeof(float) * 1); 2256 static int32_t param19_init[] = {0}; 2257 model->setOperandValue(param19, param19_init, sizeof(int32_t) * 1); 2258 static int32_t param20_init[] = {0}; 2259 model->setOperandValue(param20, param20_init, sizeof(int32_t) * 1); 2260 static bool8 layout_init[] = {true}; 2261 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 2262 model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in2, roi2, param14, param15, param16, param17, param18, param19, param20, layout}, {out2}); 2263 // Phase 3, inputs and outputs 2264 model->identifyInputsAndOutputs( 2265 {in2, roi2}, 2266 {out2}); 2267 assert(model->isValid()); 2268 } 2269 2270 inline bool is_ignored_dynamic_output_shape_nchw_3(int i) { 2271 static std::set<int> ignore = {}; 2272 return ignore.find(i) != ignore.end(); 2273 } 2274 2275 void CreateModel_dynamic_output_shape_nchw_relaxed_3(Model *model) { 2276 OperandType type0(Type::BOOL, {}); 2277 OperandType type2(Type::TENSOR_FLOAT32, {4, 4}); 2278 OperandType type38(Type::TENSOR_FLOAT32, {0, 0, 0, 0}); 2279 OperandType type4(Type::TENSOR_INT32, {4}); 2280 OperandType type5(Type::INT32, {}); 2281 OperandType type54(Type::TENSOR_FLOAT32, {2, 2, 4, 8}); 2282 OperandType type6(Type::FLOAT32, {}); 2283 // Phase 1, operands 2284 auto in2 = model->addOperand(&type54); 2285 auto roi2 = model->addOperand(&type2); 2286 auto param14 = model->addOperand(&type4); 2287 auto param15 = model->addOperand(&type5); 2288 auto param16 = model->addOperand(&type5); 2289 auto param17 = model->addOperand(&type6); 2290 auto param18 = model->addOperand(&type6); 2291 auto param19 = model->addOperand(&type5); 2292 auto param20 = model->addOperand(&type5); 2293 auto layout = model->addOperand(&type0); 2294 auto out2 = model->addOperand(&type38); 2295 // Phase 2, operations 2296 static int32_t param14_init[] = {0, 0, 1, 1}; 2297 model->setOperandValue(param14, param14_init, sizeof(int32_t) * 4); 2298 static int32_t param15_init[] = {2}; 2299 model->setOperandValue(param15, param15_init, sizeof(int32_t) * 1); 2300 static int32_t param16_init[] = {3}; 2301 model->setOperandValue(param16, param16_init, sizeof(int32_t) * 1); 2302 static float param17_init[] = {4.0f}; 2303 model->setOperandValue(param17, param17_init, sizeof(float) * 1); 2304 static float param18_init[] = {4.0f}; 2305 model->setOperandValue(param18, param18_init, sizeof(float) * 1); 2306 static int32_t param19_init[] = {0}; 2307 model->setOperandValue(param19, param19_init, sizeof(int32_t) * 1); 2308 static int32_t param20_init[] = {0}; 2309 model->setOperandValue(param20, param20_init, sizeof(int32_t) * 1); 2310 static bool8 layout_init[] = {true}; 2311 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 2312 model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in2, roi2, param14, param15, param16, param17, param18, param19, param20, layout}, {out2}); 2313 // Phase 3, inputs and outputs 2314 model->identifyInputsAndOutputs( 2315 {in2, roi2}, 2316 {out2}); 2317 // Phase 4: set relaxed execution 2318 model->relaxComputationFloat32toFloat16(true); 2319 assert(model->isValid()); 2320 } 2321 2322 inline bool is_ignored_dynamic_output_shape_nchw_relaxed_3(int i) { 2323 static std::set<int> ignore = {}; 2324 return ignore.find(i) != ignore.end(); 2325 } 2326 2327 void CreateModel_dynamic_output_shape_nchw_quant8_3(Model *model) { 2328 OperandType type0(Type::BOOL, {}); 2329 OperandType type27(Type::TENSOR_QUANT16_ASYMM, {4, 4}, 0.125f, 0); 2330 OperandType type4(Type::TENSOR_INT32, {4}); 2331 OperandType type5(Type::INT32, {}); 2332 OperandType type51(Type::TENSOR_QUANT8_ASYMM, {0, 0, 0, 0}, 0.03125f, 10); 2333 OperandType type55(Type::TENSOR_QUANT8_ASYMM, {2, 2, 4, 8}, 0.04f, 0); 2334 OperandType type6(Type::FLOAT32, {}); 2335 // Phase 1, operands 2336 auto in2 = model->addOperand(&type55); 2337 auto roi2 = model->addOperand(&type27); 2338 auto param14 = model->addOperand(&type4); 2339 auto param15 = model->addOperand(&type5); 2340 auto param16 = model->addOperand(&type5); 2341 auto param17 = model->addOperand(&type6); 2342 auto param18 = model->addOperand(&type6); 2343 auto param19 = model->addOperand(&type5); 2344 auto param20 = model->addOperand(&type5); 2345 auto layout = model->addOperand(&type0); 2346 auto out2 = model->addOperand(&type51); 2347 // Phase 2, operations 2348 static int32_t param14_init[] = {0, 0, 1, 1}; 2349 model->setOperandValue(param14, param14_init, sizeof(int32_t) * 4); 2350 static int32_t param15_init[] = {2}; 2351 model->setOperandValue(param15, param15_init, sizeof(int32_t) * 1); 2352 static int32_t param16_init[] = {3}; 2353 model->setOperandValue(param16, param16_init, sizeof(int32_t) * 1); 2354 static float param17_init[] = {4.0f}; 2355 model->setOperandValue(param17, param17_init, sizeof(float) * 1); 2356 static float param18_init[] = {4.0f}; 2357 model->setOperandValue(param18, param18_init, sizeof(float) * 1); 2358 static int32_t param19_init[] = {0}; 2359 model->setOperandValue(param19, param19_init, sizeof(int32_t) * 1); 2360 static int32_t param20_init[] = {0}; 2361 model->setOperandValue(param20, param20_init, sizeof(int32_t) * 1); 2362 static bool8 layout_init[] = {true}; 2363 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 2364 model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in2, roi2, param14, param15, param16, param17, param18, param19, param20, layout}, {out2}); 2365 // Phase 3, inputs and outputs 2366 model->identifyInputsAndOutputs( 2367 {in2, roi2}, 2368 {out2}); 2369 assert(model->isValid()); 2370 } 2371 2372 inline bool is_ignored_dynamic_output_shape_nchw_quant8_3(int i) { 2373 static std::set<int> ignore = {}; 2374 return ignore.find(i) != ignore.end(); 2375 } 2376 2377 void CreateModel_dynamic_output_shape_nchw_float16_3(Model *model) { 2378 OperandType type0(Type::BOOL, {}); 2379 OperandType type30(Type::FLOAT16, {}); 2380 OperandType type31(Type::TENSOR_FLOAT16, {4, 4}); 2381 OperandType type4(Type::TENSOR_INT32, {4}); 2382 OperandType type40(Type::TENSOR_FLOAT16, {0, 0, 0, 0}); 2383 OperandType type5(Type::INT32, {}); 2384 OperandType type56(Type::TENSOR_FLOAT16, {2, 2, 4, 8}); 2385 // Phase 1, operands 2386 auto in2 = model->addOperand(&type56); 2387 auto roi2 = model->addOperand(&type31); 2388 auto param14 = model->addOperand(&type4); 2389 auto param15 = model->addOperand(&type5); 2390 auto param16 = model->addOperand(&type5); 2391 auto param17 = model->addOperand(&type30); 2392 auto param18 = model->addOperand(&type30); 2393 auto param19 = model->addOperand(&type5); 2394 auto param20 = model->addOperand(&type5); 2395 auto layout = model->addOperand(&type0); 2396 auto out2 = model->addOperand(&type40); 2397 // Phase 2, operations 2398 static int32_t param14_init[] = {0, 0, 1, 1}; 2399 model->setOperandValue(param14, param14_init, sizeof(int32_t) * 4); 2400 static int32_t param15_init[] = {2}; 2401 model->setOperandValue(param15, param15_init, sizeof(int32_t) * 1); 2402 static int32_t param16_init[] = {3}; 2403 model->setOperandValue(param16, param16_init, sizeof(int32_t) * 1); 2404 static _Float16 param17_init[] = {4.0f}; 2405 model->setOperandValue(param17, param17_init, sizeof(_Float16) * 1); 2406 static _Float16 param18_init[] = {4.0f}; 2407 model->setOperandValue(param18, param18_init, sizeof(_Float16) * 1); 2408 static int32_t param19_init[] = {0}; 2409 model->setOperandValue(param19, param19_init, sizeof(int32_t) * 1); 2410 static int32_t param20_init[] = {0}; 2411 model->setOperandValue(param20, param20_init, sizeof(int32_t) * 1); 2412 static bool8 layout_init[] = {true}; 2413 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 2414 model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in2, roi2, param14, param15, param16, param17, param18, param19, param20, layout}, {out2}); 2415 // Phase 3, inputs and outputs 2416 model->identifyInputsAndOutputs( 2417 {in2, roi2}, 2418 {out2}); 2419 assert(model->isValid()); 2420 } 2421 2422 inline bool is_ignored_dynamic_output_shape_nchw_float16_3(int i) { 2423 static std::set<int> ignore = {}; 2424 return ignore.find(i) != ignore.end(); 2425 } 2426 2427 void CreateModel_nhwc_4(Model *model) { 2428 OperandType type0(Type::BOOL, {}); 2429 OperandType type10(Type::TENSOR_FLOAT32, {4, 4, 4, 1}); 2430 OperandType type11(Type::TENSOR_FLOAT32, {5, 4}); 2431 OperandType type12(Type::TENSOR_FLOAT32, {5, 2, 2, 1}); 2432 OperandType type13(Type::TENSOR_INT32, {5}); 2433 OperandType type5(Type::INT32, {}); 2434 OperandType type6(Type::FLOAT32, {}); 2435 // Phase 1, operands 2436 auto in3 = model->addOperand(&type10); 2437 auto roi3 = model->addOperand(&type11); 2438 auto param21 = model->addOperand(&type13); 2439 auto param22 = model->addOperand(&type5); 2440 auto param23 = model->addOperand(&type5); 2441 auto param24 = model->addOperand(&type6); 2442 auto param25 = model->addOperand(&type6); 2443 auto param26 = model->addOperand(&type5); 2444 auto param27 = model->addOperand(&type5); 2445 auto layout = model->addOperand(&type0); 2446 auto out3 = model->addOperand(&type12); 2447 // Phase 2, operations 2448 static int32_t param21_init[] = {2, 2, 2, 2, 2}; 2449 model->setOperandValue(param21, param21_init, sizeof(int32_t) * 5); 2450 static int32_t param22_init[] = {2}; 2451 model->setOperandValue(param22, param22_init, sizeof(int32_t) * 1); 2452 static int32_t param23_init[] = {2}; 2453 model->setOperandValue(param23, param23_init, sizeof(int32_t) * 1); 2454 static float param24_init[] = {2.0f}; 2455 model->setOperandValue(param24, param24_init, sizeof(float) * 1); 2456 static float param25_init[] = {1.0f}; 2457 model->setOperandValue(param25, param25_init, sizeof(float) * 1); 2458 static int32_t param26_init[] = {0}; 2459 model->setOperandValue(param26, param26_init, sizeof(int32_t) * 1); 2460 static int32_t param27_init[] = {4}; 2461 model->setOperandValue(param27, param27_init, sizeof(int32_t) * 1); 2462 static bool8 layout_init[] = {false}; 2463 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 2464 model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in3, roi3, param21, param22, param23, param24, param25, param26, param27, layout}, {out3}); 2465 // Phase 3, inputs and outputs 2466 model->identifyInputsAndOutputs( 2467 {in3, roi3}, 2468 {out3}); 2469 assert(model->isValid()); 2470 } 2471 2472 inline bool is_ignored_nhwc_4(int i) { 2473 static std::set<int> ignore = {}; 2474 return ignore.find(i) != ignore.end(); 2475 } 2476 2477 void CreateModel_nhwc_relaxed_4(Model *model) { 2478 OperandType type0(Type::BOOL, {}); 2479 OperandType type10(Type::TENSOR_FLOAT32, {4, 4, 4, 1}); 2480 OperandType type11(Type::TENSOR_FLOAT32, {5, 4}); 2481 OperandType type12(Type::TENSOR_FLOAT32, {5, 2, 2, 1}); 2482 OperandType type13(Type::TENSOR_INT32, {5}); 2483 OperandType type5(Type::INT32, {}); 2484 OperandType type6(Type::FLOAT32, {}); 2485 // Phase 1, operands 2486 auto in3 = model->addOperand(&type10); 2487 auto roi3 = model->addOperand(&type11); 2488 auto param21 = model->addOperand(&type13); 2489 auto param22 = model->addOperand(&type5); 2490 auto param23 = model->addOperand(&type5); 2491 auto param24 = model->addOperand(&type6); 2492 auto param25 = model->addOperand(&type6); 2493 auto param26 = model->addOperand(&type5); 2494 auto param27 = model->addOperand(&type5); 2495 auto layout = model->addOperand(&type0); 2496 auto out3 = model->addOperand(&type12); 2497 // Phase 2, operations 2498 static int32_t param21_init[] = {2, 2, 2, 2, 2}; 2499 model->setOperandValue(param21, param21_init, sizeof(int32_t) * 5); 2500 static int32_t param22_init[] = {2}; 2501 model->setOperandValue(param22, param22_init, sizeof(int32_t) * 1); 2502 static int32_t param23_init[] = {2}; 2503 model->setOperandValue(param23, param23_init, sizeof(int32_t) * 1); 2504 static float param24_init[] = {2.0f}; 2505 model->setOperandValue(param24, param24_init, sizeof(float) * 1); 2506 static float param25_init[] = {1.0f}; 2507 model->setOperandValue(param25, param25_init, sizeof(float) * 1); 2508 static int32_t param26_init[] = {0}; 2509 model->setOperandValue(param26, param26_init, sizeof(int32_t) * 1); 2510 static int32_t param27_init[] = {4}; 2511 model->setOperandValue(param27, param27_init, sizeof(int32_t) * 1); 2512 static bool8 layout_init[] = {false}; 2513 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 2514 model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in3, roi3, param21, param22, param23, param24, param25, param26, param27, layout}, {out3}); 2515 // Phase 3, inputs and outputs 2516 model->identifyInputsAndOutputs( 2517 {in3, roi3}, 2518 {out3}); 2519 // Phase 4: set relaxed execution 2520 model->relaxComputationFloat32toFloat16(true); 2521 assert(model->isValid()); 2522 } 2523 2524 inline bool is_ignored_nhwc_relaxed_4(int i) { 2525 static std::set<int> ignore = {}; 2526 return ignore.find(i) != ignore.end(); 2527 } 2528 2529 void CreateModel_nhwc_quant8_4(Model *model) { 2530 OperandType type0(Type::BOOL, {}); 2531 OperandType type13(Type::TENSOR_INT32, {5}); 2532 OperandType type5(Type::INT32, {}); 2533 OperandType type57(Type::TENSOR_QUANT8_ASYMM, {4, 4, 4, 1}, 0.25f, 128); 2534 OperandType type58(Type::TENSOR_QUANT8_ASYMM, {5, 2, 2, 1}, 0.0625f, 128); 2535 OperandType type59(Type::TENSOR_QUANT16_ASYMM, {5, 4}, 0.125f, 0); 2536 OperandType type6(Type::FLOAT32, {}); 2537 // Phase 1, operands 2538 auto in3 = model->addOperand(&type57); 2539 auto roi3 = model->addOperand(&type59); 2540 auto param21 = model->addOperand(&type13); 2541 auto param22 = model->addOperand(&type5); 2542 auto param23 = model->addOperand(&type5); 2543 auto param24 = model->addOperand(&type6); 2544 auto param25 = model->addOperand(&type6); 2545 auto param26 = model->addOperand(&type5); 2546 auto param27 = model->addOperand(&type5); 2547 auto layout = model->addOperand(&type0); 2548 auto out3 = model->addOperand(&type58); 2549 // Phase 2, operations 2550 static int32_t param21_init[] = {2, 2, 2, 2, 2}; 2551 model->setOperandValue(param21, param21_init, sizeof(int32_t) * 5); 2552 static int32_t param22_init[] = {2}; 2553 model->setOperandValue(param22, param22_init, sizeof(int32_t) * 1); 2554 static int32_t param23_init[] = {2}; 2555 model->setOperandValue(param23, param23_init, sizeof(int32_t) * 1); 2556 static float param24_init[] = {2.0f}; 2557 model->setOperandValue(param24, param24_init, sizeof(float) * 1); 2558 static float param25_init[] = {1.0f}; 2559 model->setOperandValue(param25, param25_init, sizeof(float) * 1); 2560 static int32_t param26_init[] = {0}; 2561 model->setOperandValue(param26, param26_init, sizeof(int32_t) * 1); 2562 static int32_t param27_init[] = {4}; 2563 model->setOperandValue(param27, param27_init, sizeof(int32_t) * 1); 2564 static bool8 layout_init[] = {false}; 2565 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 2566 model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in3, roi3, param21, param22, param23, param24, param25, param26, param27, layout}, {out3}); 2567 // Phase 3, inputs and outputs 2568 model->identifyInputsAndOutputs( 2569 {in3, roi3}, 2570 {out3}); 2571 assert(model->isValid()); 2572 } 2573 2574 inline bool is_ignored_nhwc_quant8_4(int i) { 2575 static std::set<int> ignore = {}; 2576 return ignore.find(i) != ignore.end(); 2577 } 2578 2579 void CreateModel_nhwc_float16_4(Model *model) { 2580 OperandType type0(Type::BOOL, {}); 2581 OperandType type13(Type::TENSOR_INT32, {5}); 2582 OperandType type30(Type::FLOAT16, {}); 2583 OperandType type5(Type::INT32, {}); 2584 OperandType type60(Type::TENSOR_FLOAT16, {4, 4, 4, 1}); 2585 OperandType type61(Type::TENSOR_FLOAT16, {5, 2, 2, 1}); 2586 OperandType type62(Type::TENSOR_FLOAT16, {5, 4}); 2587 // Phase 1, operands 2588 auto in3 = model->addOperand(&type60); 2589 auto roi3 = model->addOperand(&type62); 2590 auto param21 = model->addOperand(&type13); 2591 auto param22 = model->addOperand(&type5); 2592 auto param23 = model->addOperand(&type5); 2593 auto param24 = model->addOperand(&type30); 2594 auto param25 = model->addOperand(&type30); 2595 auto param26 = model->addOperand(&type5); 2596 auto param27 = model->addOperand(&type5); 2597 auto layout = model->addOperand(&type0); 2598 auto out3 = model->addOperand(&type61); 2599 // Phase 2, operations 2600 static int32_t param21_init[] = {2, 2, 2, 2, 2}; 2601 model->setOperandValue(param21, param21_init, sizeof(int32_t) * 5); 2602 static int32_t param22_init[] = {2}; 2603 model->setOperandValue(param22, param22_init, sizeof(int32_t) * 1); 2604 static int32_t param23_init[] = {2}; 2605 model->setOperandValue(param23, param23_init, sizeof(int32_t) * 1); 2606 static _Float16 param24_init[] = {2.0f}; 2607 model->setOperandValue(param24, param24_init, sizeof(_Float16) * 1); 2608 static _Float16 param25_init[] = {1.0f}; 2609 model->setOperandValue(param25, param25_init, sizeof(_Float16) * 1); 2610 static int32_t param26_init[] = {0}; 2611 model->setOperandValue(param26, param26_init, sizeof(int32_t) * 1); 2612 static int32_t param27_init[] = {4}; 2613 model->setOperandValue(param27, param27_init, sizeof(int32_t) * 1); 2614 static bool8 layout_init[] = {false}; 2615 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 2616 model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in3, roi3, param21, param22, param23, param24, param25, param26, param27, layout}, {out3}); 2617 // Phase 3, inputs and outputs 2618 model->identifyInputsAndOutputs( 2619 {in3, roi3}, 2620 {out3}); 2621 assert(model->isValid()); 2622 } 2623 2624 inline bool is_ignored_nhwc_float16_4(int i) { 2625 static std::set<int> ignore = {}; 2626 return ignore.find(i) != ignore.end(); 2627 } 2628 2629 void CreateModel_nchw_4(Model *model) { 2630 OperandType type0(Type::BOOL, {}); 2631 OperandType type11(Type::TENSOR_FLOAT32, {5, 4}); 2632 OperandType type13(Type::TENSOR_INT32, {5}); 2633 OperandType type5(Type::INT32, {}); 2634 OperandType type6(Type::FLOAT32, {}); 2635 OperandType type63(Type::TENSOR_FLOAT32, {4, 1, 4, 4}); 2636 OperandType type64(Type::TENSOR_FLOAT32, {5, 1, 2, 2}); 2637 // Phase 1, operands 2638 auto in3 = model->addOperand(&type63); 2639 auto roi3 = model->addOperand(&type11); 2640 auto param21 = model->addOperand(&type13); 2641 auto param22 = model->addOperand(&type5); 2642 auto param23 = model->addOperand(&type5); 2643 auto param24 = model->addOperand(&type6); 2644 auto param25 = model->addOperand(&type6); 2645 auto param26 = model->addOperand(&type5); 2646 auto param27 = model->addOperand(&type5); 2647 auto layout = model->addOperand(&type0); 2648 auto out3 = model->addOperand(&type64); 2649 // Phase 2, operations 2650 static int32_t param21_init[] = {2, 2, 2, 2, 2}; 2651 model->setOperandValue(param21, param21_init, sizeof(int32_t) * 5); 2652 static int32_t param22_init[] = {2}; 2653 model->setOperandValue(param22, param22_init, sizeof(int32_t) * 1); 2654 static int32_t param23_init[] = {2}; 2655 model->setOperandValue(param23, param23_init, sizeof(int32_t) * 1); 2656 static float param24_init[] = {2.0f}; 2657 model->setOperandValue(param24, param24_init, sizeof(float) * 1); 2658 static float param25_init[] = {1.0f}; 2659 model->setOperandValue(param25, param25_init, sizeof(float) * 1); 2660 static int32_t param26_init[] = {0}; 2661 model->setOperandValue(param26, param26_init, sizeof(int32_t) * 1); 2662 static int32_t param27_init[] = {4}; 2663 model->setOperandValue(param27, param27_init, sizeof(int32_t) * 1); 2664 static bool8 layout_init[] = {true}; 2665 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 2666 model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in3, roi3, param21, param22, param23, param24, param25, param26, param27, layout}, {out3}); 2667 // Phase 3, inputs and outputs 2668 model->identifyInputsAndOutputs( 2669 {in3, roi3}, 2670 {out3}); 2671 assert(model->isValid()); 2672 } 2673 2674 inline bool is_ignored_nchw_4(int i) { 2675 static std::set<int> ignore = {}; 2676 return ignore.find(i) != ignore.end(); 2677 } 2678 2679 void CreateModel_nchw_relaxed_4(Model *model) { 2680 OperandType type0(Type::BOOL, {}); 2681 OperandType type11(Type::TENSOR_FLOAT32, {5, 4}); 2682 OperandType type13(Type::TENSOR_INT32, {5}); 2683 OperandType type5(Type::INT32, {}); 2684 OperandType type6(Type::FLOAT32, {}); 2685 OperandType type63(Type::TENSOR_FLOAT32, {4, 1, 4, 4}); 2686 OperandType type64(Type::TENSOR_FLOAT32, {5, 1, 2, 2}); 2687 // Phase 1, operands 2688 auto in3 = model->addOperand(&type63); 2689 auto roi3 = model->addOperand(&type11); 2690 auto param21 = model->addOperand(&type13); 2691 auto param22 = model->addOperand(&type5); 2692 auto param23 = model->addOperand(&type5); 2693 auto param24 = model->addOperand(&type6); 2694 auto param25 = model->addOperand(&type6); 2695 auto param26 = model->addOperand(&type5); 2696 auto param27 = model->addOperand(&type5); 2697 auto layout = model->addOperand(&type0); 2698 auto out3 = model->addOperand(&type64); 2699 // Phase 2, operations 2700 static int32_t param21_init[] = {2, 2, 2, 2, 2}; 2701 model->setOperandValue(param21, param21_init, sizeof(int32_t) * 5); 2702 static int32_t param22_init[] = {2}; 2703 model->setOperandValue(param22, param22_init, sizeof(int32_t) * 1); 2704 static int32_t param23_init[] = {2}; 2705 model->setOperandValue(param23, param23_init, sizeof(int32_t) * 1); 2706 static float param24_init[] = {2.0f}; 2707 model->setOperandValue(param24, param24_init, sizeof(float) * 1); 2708 static float param25_init[] = {1.0f}; 2709 model->setOperandValue(param25, param25_init, sizeof(float) * 1); 2710 static int32_t param26_init[] = {0}; 2711 model->setOperandValue(param26, param26_init, sizeof(int32_t) * 1); 2712 static int32_t param27_init[] = {4}; 2713 model->setOperandValue(param27, param27_init, sizeof(int32_t) * 1); 2714 static bool8 layout_init[] = {true}; 2715 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 2716 model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in3, roi3, param21, param22, param23, param24, param25, param26, param27, layout}, {out3}); 2717 // Phase 3, inputs and outputs 2718 model->identifyInputsAndOutputs( 2719 {in3, roi3}, 2720 {out3}); 2721 // Phase 4: set relaxed execution 2722 model->relaxComputationFloat32toFloat16(true); 2723 assert(model->isValid()); 2724 } 2725 2726 inline bool is_ignored_nchw_relaxed_4(int i) { 2727 static std::set<int> ignore = {}; 2728 return ignore.find(i) != ignore.end(); 2729 } 2730 2731 void CreateModel_nchw_quant8_4(Model *model) { 2732 OperandType type0(Type::BOOL, {}); 2733 OperandType type13(Type::TENSOR_INT32, {5}); 2734 OperandType type5(Type::INT32, {}); 2735 OperandType type59(Type::TENSOR_QUANT16_ASYMM, {5, 4}, 0.125f, 0); 2736 OperandType type6(Type::FLOAT32, {}); 2737 OperandType type65(Type::TENSOR_QUANT8_ASYMM, {4, 1, 4, 4}, 0.25f, 128); 2738 OperandType type66(Type::TENSOR_QUANT8_ASYMM, {5, 1, 2, 2}, 0.0625f, 128); 2739 // Phase 1, operands 2740 auto in3 = model->addOperand(&type65); 2741 auto roi3 = model->addOperand(&type59); 2742 auto param21 = model->addOperand(&type13); 2743 auto param22 = model->addOperand(&type5); 2744 auto param23 = model->addOperand(&type5); 2745 auto param24 = model->addOperand(&type6); 2746 auto param25 = model->addOperand(&type6); 2747 auto param26 = model->addOperand(&type5); 2748 auto param27 = model->addOperand(&type5); 2749 auto layout = model->addOperand(&type0); 2750 auto out3 = model->addOperand(&type66); 2751 // Phase 2, operations 2752 static int32_t param21_init[] = {2, 2, 2, 2, 2}; 2753 model->setOperandValue(param21, param21_init, sizeof(int32_t) * 5); 2754 static int32_t param22_init[] = {2}; 2755 model->setOperandValue(param22, param22_init, sizeof(int32_t) * 1); 2756 static int32_t param23_init[] = {2}; 2757 model->setOperandValue(param23, param23_init, sizeof(int32_t) * 1); 2758 static float param24_init[] = {2.0f}; 2759 model->setOperandValue(param24, param24_init, sizeof(float) * 1); 2760 static float param25_init[] = {1.0f}; 2761 model->setOperandValue(param25, param25_init, sizeof(float) * 1); 2762 static int32_t param26_init[] = {0}; 2763 model->setOperandValue(param26, param26_init, sizeof(int32_t) * 1); 2764 static int32_t param27_init[] = {4}; 2765 model->setOperandValue(param27, param27_init, sizeof(int32_t) * 1); 2766 static bool8 layout_init[] = {true}; 2767 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 2768 model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in3, roi3, param21, param22, param23, param24, param25, param26, param27, layout}, {out3}); 2769 // Phase 3, inputs and outputs 2770 model->identifyInputsAndOutputs( 2771 {in3, roi3}, 2772 {out3}); 2773 assert(model->isValid()); 2774 } 2775 2776 inline bool is_ignored_nchw_quant8_4(int i) { 2777 static std::set<int> ignore = {}; 2778 return ignore.find(i) != ignore.end(); 2779 } 2780 2781 void CreateModel_nchw_float16_4(Model *model) { 2782 OperandType type0(Type::BOOL, {}); 2783 OperandType type13(Type::TENSOR_INT32, {5}); 2784 OperandType type30(Type::FLOAT16, {}); 2785 OperandType type5(Type::INT32, {}); 2786 OperandType type62(Type::TENSOR_FLOAT16, {5, 4}); 2787 OperandType type67(Type::TENSOR_FLOAT16, {4, 1, 4, 4}); 2788 OperandType type68(Type::TENSOR_FLOAT16, {5, 1, 2, 2}); 2789 // Phase 1, operands 2790 auto in3 = model->addOperand(&type67); 2791 auto roi3 = model->addOperand(&type62); 2792 auto param21 = model->addOperand(&type13); 2793 auto param22 = model->addOperand(&type5); 2794 auto param23 = model->addOperand(&type5); 2795 auto param24 = model->addOperand(&type30); 2796 auto param25 = model->addOperand(&type30); 2797 auto param26 = model->addOperand(&type5); 2798 auto param27 = model->addOperand(&type5); 2799 auto layout = model->addOperand(&type0); 2800 auto out3 = model->addOperand(&type68); 2801 // Phase 2, operations 2802 static int32_t param21_init[] = {2, 2, 2, 2, 2}; 2803 model->setOperandValue(param21, param21_init, sizeof(int32_t) * 5); 2804 static int32_t param22_init[] = {2}; 2805 model->setOperandValue(param22, param22_init, sizeof(int32_t) * 1); 2806 static int32_t param23_init[] = {2}; 2807 model->setOperandValue(param23, param23_init, sizeof(int32_t) * 1); 2808 static _Float16 param24_init[] = {2.0f}; 2809 model->setOperandValue(param24, param24_init, sizeof(_Float16) * 1); 2810 static _Float16 param25_init[] = {1.0f}; 2811 model->setOperandValue(param25, param25_init, sizeof(_Float16) * 1); 2812 static int32_t param26_init[] = {0}; 2813 model->setOperandValue(param26, param26_init, sizeof(int32_t) * 1); 2814 static int32_t param27_init[] = {4}; 2815 model->setOperandValue(param27, param27_init, sizeof(int32_t) * 1); 2816 static bool8 layout_init[] = {true}; 2817 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 2818 model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in3, roi3, param21, param22, param23, param24, param25, param26, param27, layout}, {out3}); 2819 // Phase 3, inputs and outputs 2820 model->identifyInputsAndOutputs( 2821 {in3, roi3}, 2822 {out3}); 2823 assert(model->isValid()); 2824 } 2825 2826 inline bool is_ignored_nchw_float16_4(int i) { 2827 static std::set<int> ignore = {}; 2828 return ignore.find(i) != ignore.end(); 2829 } 2830 2831 void CreateModel_dynamic_output_shape_nhwc_4(Model *model) { 2832 OperandType type0(Type::BOOL, {}); 2833 OperandType type10(Type::TENSOR_FLOAT32, {4, 4, 4, 1}); 2834 OperandType type11(Type::TENSOR_FLOAT32, {5, 4}); 2835 OperandType type13(Type::TENSOR_INT32, {5}); 2836 OperandType type38(Type::TENSOR_FLOAT32, {0, 0, 0, 0}); 2837 OperandType type5(Type::INT32, {}); 2838 OperandType type6(Type::FLOAT32, {}); 2839 // Phase 1, operands 2840 auto in3 = model->addOperand(&type10); 2841 auto roi3 = model->addOperand(&type11); 2842 auto param21 = model->addOperand(&type13); 2843 auto param22 = model->addOperand(&type5); 2844 auto param23 = model->addOperand(&type5); 2845 auto param24 = model->addOperand(&type6); 2846 auto param25 = model->addOperand(&type6); 2847 auto param26 = model->addOperand(&type5); 2848 auto param27 = model->addOperand(&type5); 2849 auto layout = model->addOperand(&type0); 2850 auto out3 = model->addOperand(&type38); 2851 // Phase 2, operations 2852 static int32_t param21_init[] = {2, 2, 2, 2, 2}; 2853 model->setOperandValue(param21, param21_init, sizeof(int32_t) * 5); 2854 static int32_t param22_init[] = {2}; 2855 model->setOperandValue(param22, param22_init, sizeof(int32_t) * 1); 2856 static int32_t param23_init[] = {2}; 2857 model->setOperandValue(param23, param23_init, sizeof(int32_t) * 1); 2858 static float param24_init[] = {2.0f}; 2859 model->setOperandValue(param24, param24_init, sizeof(float) * 1); 2860 static float param25_init[] = {1.0f}; 2861 model->setOperandValue(param25, param25_init, sizeof(float) * 1); 2862 static int32_t param26_init[] = {0}; 2863 model->setOperandValue(param26, param26_init, sizeof(int32_t) * 1); 2864 static int32_t param27_init[] = {4}; 2865 model->setOperandValue(param27, param27_init, sizeof(int32_t) * 1); 2866 static bool8 layout_init[] = {false}; 2867 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 2868 model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in3, roi3, param21, param22, param23, param24, param25, param26, param27, layout}, {out3}); 2869 // Phase 3, inputs and outputs 2870 model->identifyInputsAndOutputs( 2871 {in3, roi3}, 2872 {out3}); 2873 assert(model->isValid()); 2874 } 2875 2876 inline bool is_ignored_dynamic_output_shape_nhwc_4(int i) { 2877 static std::set<int> ignore = {}; 2878 return ignore.find(i) != ignore.end(); 2879 } 2880 2881 void CreateModel_dynamic_output_shape_nhwc_relaxed_4(Model *model) { 2882 OperandType type0(Type::BOOL, {}); 2883 OperandType type10(Type::TENSOR_FLOAT32, {4, 4, 4, 1}); 2884 OperandType type11(Type::TENSOR_FLOAT32, {5, 4}); 2885 OperandType type13(Type::TENSOR_INT32, {5}); 2886 OperandType type38(Type::TENSOR_FLOAT32, {0, 0, 0, 0}); 2887 OperandType type5(Type::INT32, {}); 2888 OperandType type6(Type::FLOAT32, {}); 2889 // Phase 1, operands 2890 auto in3 = model->addOperand(&type10); 2891 auto roi3 = model->addOperand(&type11); 2892 auto param21 = model->addOperand(&type13); 2893 auto param22 = model->addOperand(&type5); 2894 auto param23 = model->addOperand(&type5); 2895 auto param24 = model->addOperand(&type6); 2896 auto param25 = model->addOperand(&type6); 2897 auto param26 = model->addOperand(&type5); 2898 auto param27 = model->addOperand(&type5); 2899 auto layout = model->addOperand(&type0); 2900 auto out3 = model->addOperand(&type38); 2901 // Phase 2, operations 2902 static int32_t param21_init[] = {2, 2, 2, 2, 2}; 2903 model->setOperandValue(param21, param21_init, sizeof(int32_t) * 5); 2904 static int32_t param22_init[] = {2}; 2905 model->setOperandValue(param22, param22_init, sizeof(int32_t) * 1); 2906 static int32_t param23_init[] = {2}; 2907 model->setOperandValue(param23, param23_init, sizeof(int32_t) * 1); 2908 static float param24_init[] = {2.0f}; 2909 model->setOperandValue(param24, param24_init, sizeof(float) * 1); 2910 static float param25_init[] = {1.0f}; 2911 model->setOperandValue(param25, param25_init, sizeof(float) * 1); 2912 static int32_t param26_init[] = {0}; 2913 model->setOperandValue(param26, param26_init, sizeof(int32_t) * 1); 2914 static int32_t param27_init[] = {4}; 2915 model->setOperandValue(param27, param27_init, sizeof(int32_t) * 1); 2916 static bool8 layout_init[] = {false}; 2917 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 2918 model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in3, roi3, param21, param22, param23, param24, param25, param26, param27, layout}, {out3}); 2919 // Phase 3, inputs and outputs 2920 model->identifyInputsAndOutputs( 2921 {in3, roi3}, 2922 {out3}); 2923 // Phase 4: set relaxed execution 2924 model->relaxComputationFloat32toFloat16(true); 2925 assert(model->isValid()); 2926 } 2927 2928 inline bool is_ignored_dynamic_output_shape_nhwc_relaxed_4(int i) { 2929 static std::set<int> ignore = {}; 2930 return ignore.find(i) != ignore.end(); 2931 } 2932 2933 void CreateModel_dynamic_output_shape_nhwc_quant8_4(Model *model) { 2934 OperandType type0(Type::BOOL, {}); 2935 OperandType type13(Type::TENSOR_INT32, {5}); 2936 OperandType type39(Type::TENSOR_QUANT8_ASYMM, {0, 0, 0, 0}, 0.0625f, 128); 2937 OperandType type5(Type::INT32, {}); 2938 OperandType type57(Type::TENSOR_QUANT8_ASYMM, {4, 4, 4, 1}, 0.25f, 128); 2939 OperandType type59(Type::TENSOR_QUANT16_ASYMM, {5, 4}, 0.125f, 0); 2940 OperandType type6(Type::FLOAT32, {}); 2941 // Phase 1, operands 2942 auto in3 = model->addOperand(&type57); 2943 auto roi3 = model->addOperand(&type59); 2944 auto param21 = model->addOperand(&type13); 2945 auto param22 = model->addOperand(&type5); 2946 auto param23 = model->addOperand(&type5); 2947 auto param24 = model->addOperand(&type6); 2948 auto param25 = model->addOperand(&type6); 2949 auto param26 = model->addOperand(&type5); 2950 auto param27 = model->addOperand(&type5); 2951 auto layout = model->addOperand(&type0); 2952 auto out3 = model->addOperand(&type39); 2953 // Phase 2, operations 2954 static int32_t param21_init[] = {2, 2, 2, 2, 2}; 2955 model->setOperandValue(param21, param21_init, sizeof(int32_t) * 5); 2956 static int32_t param22_init[] = {2}; 2957 model->setOperandValue(param22, param22_init, sizeof(int32_t) * 1); 2958 static int32_t param23_init[] = {2}; 2959 model->setOperandValue(param23, param23_init, sizeof(int32_t) * 1); 2960 static float param24_init[] = {2.0f}; 2961 model->setOperandValue(param24, param24_init, sizeof(float) * 1); 2962 static float param25_init[] = {1.0f}; 2963 model->setOperandValue(param25, param25_init, sizeof(float) * 1); 2964 static int32_t param26_init[] = {0}; 2965 model->setOperandValue(param26, param26_init, sizeof(int32_t) * 1); 2966 static int32_t param27_init[] = {4}; 2967 model->setOperandValue(param27, param27_init, sizeof(int32_t) * 1); 2968 static bool8 layout_init[] = {false}; 2969 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 2970 model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in3, roi3, param21, param22, param23, param24, param25, param26, param27, layout}, {out3}); 2971 // Phase 3, inputs and outputs 2972 model->identifyInputsAndOutputs( 2973 {in3, roi3}, 2974 {out3}); 2975 assert(model->isValid()); 2976 } 2977 2978 inline bool is_ignored_dynamic_output_shape_nhwc_quant8_4(int i) { 2979 static std::set<int> ignore = {}; 2980 return ignore.find(i) != ignore.end(); 2981 } 2982 2983 void CreateModel_dynamic_output_shape_nhwc_float16_4(Model *model) { 2984 OperandType type0(Type::BOOL, {}); 2985 OperandType type13(Type::TENSOR_INT32, {5}); 2986 OperandType type30(Type::FLOAT16, {}); 2987 OperandType type40(Type::TENSOR_FLOAT16, {0, 0, 0, 0}); 2988 OperandType type5(Type::INT32, {}); 2989 OperandType type60(Type::TENSOR_FLOAT16, {4, 4, 4, 1}); 2990 OperandType type62(Type::TENSOR_FLOAT16, {5, 4}); 2991 // Phase 1, operands 2992 auto in3 = model->addOperand(&type60); 2993 auto roi3 = model->addOperand(&type62); 2994 auto param21 = model->addOperand(&type13); 2995 auto param22 = model->addOperand(&type5); 2996 auto param23 = model->addOperand(&type5); 2997 auto param24 = model->addOperand(&type30); 2998 auto param25 = model->addOperand(&type30); 2999 auto param26 = model->addOperand(&type5); 3000 auto param27 = model->addOperand(&type5); 3001 auto layout = model->addOperand(&type0); 3002 auto out3 = model->addOperand(&type40); 3003 // Phase 2, operations 3004 static int32_t param21_init[] = {2, 2, 2, 2, 2}; 3005 model->setOperandValue(param21, param21_init, sizeof(int32_t) * 5); 3006 static int32_t param22_init[] = {2}; 3007 model->setOperandValue(param22, param22_init, sizeof(int32_t) * 1); 3008 static int32_t param23_init[] = {2}; 3009 model->setOperandValue(param23, param23_init, sizeof(int32_t) * 1); 3010 static _Float16 param24_init[] = {2.0f}; 3011 model->setOperandValue(param24, param24_init, sizeof(_Float16) * 1); 3012 static _Float16 param25_init[] = {1.0f}; 3013 model->setOperandValue(param25, param25_init, sizeof(_Float16) * 1); 3014 static int32_t param26_init[] = {0}; 3015 model->setOperandValue(param26, param26_init, sizeof(int32_t) * 1); 3016 static int32_t param27_init[] = {4}; 3017 model->setOperandValue(param27, param27_init, sizeof(int32_t) * 1); 3018 static bool8 layout_init[] = {false}; 3019 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 3020 model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in3, roi3, param21, param22, param23, param24, param25, param26, param27, layout}, {out3}); 3021 // Phase 3, inputs and outputs 3022 model->identifyInputsAndOutputs( 3023 {in3, roi3}, 3024 {out3}); 3025 assert(model->isValid()); 3026 } 3027 3028 inline bool is_ignored_dynamic_output_shape_nhwc_float16_4(int i) { 3029 static std::set<int> ignore = {}; 3030 return ignore.find(i) != ignore.end(); 3031 } 3032 3033 void CreateModel_dynamic_output_shape_nchw_4(Model *model) { 3034 OperandType type0(Type::BOOL, {}); 3035 OperandType type11(Type::TENSOR_FLOAT32, {5, 4}); 3036 OperandType type13(Type::TENSOR_INT32, {5}); 3037 OperandType type38(Type::TENSOR_FLOAT32, {0, 0, 0, 0}); 3038 OperandType type5(Type::INT32, {}); 3039 OperandType type6(Type::FLOAT32, {}); 3040 OperandType type63(Type::TENSOR_FLOAT32, {4, 1, 4, 4}); 3041 // Phase 1, operands 3042 auto in3 = model->addOperand(&type63); 3043 auto roi3 = model->addOperand(&type11); 3044 auto param21 = model->addOperand(&type13); 3045 auto param22 = model->addOperand(&type5); 3046 auto param23 = model->addOperand(&type5); 3047 auto param24 = model->addOperand(&type6); 3048 auto param25 = model->addOperand(&type6); 3049 auto param26 = model->addOperand(&type5); 3050 auto param27 = model->addOperand(&type5); 3051 auto layout = model->addOperand(&type0); 3052 auto out3 = model->addOperand(&type38); 3053 // Phase 2, operations 3054 static int32_t param21_init[] = {2, 2, 2, 2, 2}; 3055 model->setOperandValue(param21, param21_init, sizeof(int32_t) * 5); 3056 static int32_t param22_init[] = {2}; 3057 model->setOperandValue(param22, param22_init, sizeof(int32_t) * 1); 3058 static int32_t param23_init[] = {2}; 3059 model->setOperandValue(param23, param23_init, sizeof(int32_t) * 1); 3060 static float param24_init[] = {2.0f}; 3061 model->setOperandValue(param24, param24_init, sizeof(float) * 1); 3062 static float param25_init[] = {1.0f}; 3063 model->setOperandValue(param25, param25_init, sizeof(float) * 1); 3064 static int32_t param26_init[] = {0}; 3065 model->setOperandValue(param26, param26_init, sizeof(int32_t) * 1); 3066 static int32_t param27_init[] = {4}; 3067 model->setOperandValue(param27, param27_init, sizeof(int32_t) * 1); 3068 static bool8 layout_init[] = {true}; 3069 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 3070 model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in3, roi3, param21, param22, param23, param24, param25, param26, param27, layout}, {out3}); 3071 // Phase 3, inputs and outputs 3072 model->identifyInputsAndOutputs( 3073 {in3, roi3}, 3074 {out3}); 3075 assert(model->isValid()); 3076 } 3077 3078 inline bool is_ignored_dynamic_output_shape_nchw_4(int i) { 3079 static std::set<int> ignore = {}; 3080 return ignore.find(i) != ignore.end(); 3081 } 3082 3083 void CreateModel_dynamic_output_shape_nchw_relaxed_4(Model *model) { 3084 OperandType type0(Type::BOOL, {}); 3085 OperandType type11(Type::TENSOR_FLOAT32, {5, 4}); 3086 OperandType type13(Type::TENSOR_INT32, {5}); 3087 OperandType type38(Type::TENSOR_FLOAT32, {0, 0, 0, 0}); 3088 OperandType type5(Type::INT32, {}); 3089 OperandType type6(Type::FLOAT32, {}); 3090 OperandType type63(Type::TENSOR_FLOAT32, {4, 1, 4, 4}); 3091 // Phase 1, operands 3092 auto in3 = model->addOperand(&type63); 3093 auto roi3 = model->addOperand(&type11); 3094 auto param21 = model->addOperand(&type13); 3095 auto param22 = model->addOperand(&type5); 3096 auto param23 = model->addOperand(&type5); 3097 auto param24 = model->addOperand(&type6); 3098 auto param25 = model->addOperand(&type6); 3099 auto param26 = model->addOperand(&type5); 3100 auto param27 = model->addOperand(&type5); 3101 auto layout = model->addOperand(&type0); 3102 auto out3 = model->addOperand(&type38); 3103 // Phase 2, operations 3104 static int32_t param21_init[] = {2, 2, 2, 2, 2}; 3105 model->setOperandValue(param21, param21_init, sizeof(int32_t) * 5); 3106 static int32_t param22_init[] = {2}; 3107 model->setOperandValue(param22, param22_init, sizeof(int32_t) * 1); 3108 static int32_t param23_init[] = {2}; 3109 model->setOperandValue(param23, param23_init, sizeof(int32_t) * 1); 3110 static float param24_init[] = {2.0f}; 3111 model->setOperandValue(param24, param24_init, sizeof(float) * 1); 3112 static float param25_init[] = {1.0f}; 3113 model->setOperandValue(param25, param25_init, sizeof(float) * 1); 3114 static int32_t param26_init[] = {0}; 3115 model->setOperandValue(param26, param26_init, sizeof(int32_t) * 1); 3116 static int32_t param27_init[] = {4}; 3117 model->setOperandValue(param27, param27_init, sizeof(int32_t) * 1); 3118 static bool8 layout_init[] = {true}; 3119 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 3120 model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in3, roi3, param21, param22, param23, param24, param25, param26, param27, layout}, {out3}); 3121 // Phase 3, inputs and outputs 3122 model->identifyInputsAndOutputs( 3123 {in3, roi3}, 3124 {out3}); 3125 // Phase 4: set relaxed execution 3126 model->relaxComputationFloat32toFloat16(true); 3127 assert(model->isValid()); 3128 } 3129 3130 inline bool is_ignored_dynamic_output_shape_nchw_relaxed_4(int i) { 3131 static std::set<int> ignore = {}; 3132 return ignore.find(i) != ignore.end(); 3133 } 3134 3135 void CreateModel_dynamic_output_shape_nchw_quant8_4(Model *model) { 3136 OperandType type0(Type::BOOL, {}); 3137 OperandType type13(Type::TENSOR_INT32, {5}); 3138 OperandType type39(Type::TENSOR_QUANT8_ASYMM, {0, 0, 0, 0}, 0.0625f, 128); 3139 OperandType type5(Type::INT32, {}); 3140 OperandType type59(Type::TENSOR_QUANT16_ASYMM, {5, 4}, 0.125f, 0); 3141 OperandType type6(Type::FLOAT32, {}); 3142 OperandType type65(Type::TENSOR_QUANT8_ASYMM, {4, 1, 4, 4}, 0.25f, 128); 3143 // Phase 1, operands 3144 auto in3 = model->addOperand(&type65); 3145 auto roi3 = model->addOperand(&type59); 3146 auto param21 = model->addOperand(&type13); 3147 auto param22 = model->addOperand(&type5); 3148 auto param23 = model->addOperand(&type5); 3149 auto param24 = model->addOperand(&type6); 3150 auto param25 = model->addOperand(&type6); 3151 auto param26 = model->addOperand(&type5); 3152 auto param27 = model->addOperand(&type5); 3153 auto layout = model->addOperand(&type0); 3154 auto out3 = model->addOperand(&type39); 3155 // Phase 2, operations 3156 static int32_t param21_init[] = {2, 2, 2, 2, 2}; 3157 model->setOperandValue(param21, param21_init, sizeof(int32_t) * 5); 3158 static int32_t param22_init[] = {2}; 3159 model->setOperandValue(param22, param22_init, sizeof(int32_t) * 1); 3160 static int32_t param23_init[] = {2}; 3161 model->setOperandValue(param23, param23_init, sizeof(int32_t) * 1); 3162 static float param24_init[] = {2.0f}; 3163 model->setOperandValue(param24, param24_init, sizeof(float) * 1); 3164 static float param25_init[] = {1.0f}; 3165 model->setOperandValue(param25, param25_init, sizeof(float) * 1); 3166 static int32_t param26_init[] = {0}; 3167 model->setOperandValue(param26, param26_init, sizeof(int32_t) * 1); 3168 static int32_t param27_init[] = {4}; 3169 model->setOperandValue(param27, param27_init, sizeof(int32_t) * 1); 3170 static bool8 layout_init[] = {true}; 3171 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 3172 model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in3, roi3, param21, param22, param23, param24, param25, param26, param27, layout}, {out3}); 3173 // Phase 3, inputs and outputs 3174 model->identifyInputsAndOutputs( 3175 {in3, roi3}, 3176 {out3}); 3177 assert(model->isValid()); 3178 } 3179 3180 inline bool is_ignored_dynamic_output_shape_nchw_quant8_4(int i) { 3181 static std::set<int> ignore = {}; 3182 return ignore.find(i) != ignore.end(); 3183 } 3184 3185 void CreateModel_dynamic_output_shape_nchw_float16_4(Model *model) { 3186 OperandType type0(Type::BOOL, {}); 3187 OperandType type13(Type::TENSOR_INT32, {5}); 3188 OperandType type30(Type::FLOAT16, {}); 3189 OperandType type40(Type::TENSOR_FLOAT16, {0, 0, 0, 0}); 3190 OperandType type5(Type::INT32, {}); 3191 OperandType type62(Type::TENSOR_FLOAT16, {5, 4}); 3192 OperandType type67(Type::TENSOR_FLOAT16, {4, 1, 4, 4}); 3193 // Phase 1, operands 3194 auto in3 = model->addOperand(&type67); 3195 auto roi3 = model->addOperand(&type62); 3196 auto param21 = model->addOperand(&type13); 3197 auto param22 = model->addOperand(&type5); 3198 auto param23 = model->addOperand(&type5); 3199 auto param24 = model->addOperand(&type30); 3200 auto param25 = model->addOperand(&type30); 3201 auto param26 = model->addOperand(&type5); 3202 auto param27 = model->addOperand(&type5); 3203 auto layout = model->addOperand(&type0); 3204 auto out3 = model->addOperand(&type40); 3205 // Phase 2, operations 3206 static int32_t param21_init[] = {2, 2, 2, 2, 2}; 3207 model->setOperandValue(param21, param21_init, sizeof(int32_t) * 5); 3208 static int32_t param22_init[] = {2}; 3209 model->setOperandValue(param22, param22_init, sizeof(int32_t) * 1); 3210 static int32_t param23_init[] = {2}; 3211 model->setOperandValue(param23, param23_init, sizeof(int32_t) * 1); 3212 static _Float16 param24_init[] = {2.0f}; 3213 model->setOperandValue(param24, param24_init, sizeof(_Float16) * 1); 3214 static _Float16 param25_init[] = {1.0f}; 3215 model->setOperandValue(param25, param25_init, sizeof(_Float16) * 1); 3216 static int32_t param26_init[] = {0}; 3217 model->setOperandValue(param26, param26_init, sizeof(int32_t) * 1); 3218 static int32_t param27_init[] = {4}; 3219 model->setOperandValue(param27, param27_init, sizeof(int32_t) * 1); 3220 static bool8 layout_init[] = {true}; 3221 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 3222 model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in3, roi3, param21, param22, param23, param24, param25, param26, param27, layout}, {out3}); 3223 // Phase 3, inputs and outputs 3224 model->identifyInputsAndOutputs( 3225 {in3, roi3}, 3226 {out3}); 3227 assert(model->isValid()); 3228 } 3229 3230 inline bool is_ignored_dynamic_output_shape_nchw_float16_4(int i) { 3231 static std::set<int> ignore = {}; 3232 return ignore.find(i) != ignore.end(); 3233 } 3234 3235 void CreateModel_zero_sized_nhwc(Model *model) { 3236 OperandType type0(Type::BOOL, {}); 3237 OperandType type14(Type::TENSOR_FLOAT32, {1, 2}); 3238 OperandType type15(Type::TENSOR_FLOAT32, {1, 8}); 3239 OperandType type16(Type::TENSOR_FLOAT32, {0}); 3240 OperandType type17(Type::TENSOR_INT32, {0}); 3241 OperandType type18(Type::TENSOR_FLOAT32, {0, 4}); 3242 OperandType type19(Type::TENSOR_INT32, {1}); 3243 OperandType type20(Type::TENSOR_FLOAT32, {1, 1, 1, 1}); 3244 OperandType type21(Type::TENSOR_FLOAT32, {0, 2, 2, 1}); 3245 OperandType type5(Type::INT32, {}); 3246 OperandType type6(Type::FLOAT32, {}); 3247 // Phase 1, operands 3248 auto scores = model->addOperand(&type14); 3249 auto roi4 = model->addOperand(&type15); 3250 auto param28 = model->addOperand(&type19); 3251 auto param29 = model->addOperand(&type6); 3252 auto param30 = model->addOperand(&type5); 3253 auto param31 = model->addOperand(&type5); 3254 auto param32 = model->addOperand(&type6); 3255 auto param33 = model->addOperand(&type6); 3256 auto param34 = model->addOperand(&type6); 3257 auto scoresOut = model->addOperand(&type16); 3258 auto roiOut = model->addOperand(&type18); 3259 auto classesOut = model->addOperand(&type17); 3260 auto batchSplitOut = model->addOperand(&type17); 3261 auto in4 = model->addOperand(&type20); 3262 auto param35 = model->addOperand(&type5); 3263 auto param36 = model->addOperand(&type5); 3264 auto param37 = model->addOperand(&type6); 3265 auto param38 = model->addOperand(&type6); 3266 auto param39 = model->addOperand(&type5); 3267 auto param40 = model->addOperand(&type5); 3268 auto layout = model->addOperand(&type0); 3269 auto featureMap = model->addOperand(&type21); 3270 // Phase 2, operations 3271 static float scores_init[] = {0.9f, 0.1f}; 3272 model->setOperandValue(scores, scores_init, sizeof(float) * 2); 3273 static float roi4_init[] = {1.0f, 1.0f, 10.0f, 10.0f, 0.0f, 0.0f, 10.0f, 10.0f}; 3274 model->setOperandValue(roi4, roi4_init, sizeof(float) * 8); 3275 static int32_t param28_init[] = {0}; 3276 model->setOperandValue(param28, param28_init, sizeof(int32_t) * 1); 3277 static float param29_init[] = {0.3f}; 3278 model->setOperandValue(param29, param29_init, sizeof(float) * 1); 3279 static int32_t param30_init[] = {-1}; 3280 model->setOperandValue(param30, param30_init, sizeof(int32_t) * 1); 3281 static int32_t param31_init[] = {0}; 3282 model->setOperandValue(param31, param31_init, sizeof(int32_t) * 1); 3283 static float param32_init[] = {0.4f}; 3284 model->setOperandValue(param32, param32_init, sizeof(float) * 1); 3285 static float param33_init[] = {1.0f}; 3286 model->setOperandValue(param33, param33_init, sizeof(float) * 1); 3287 static float param34_init[] = {0.3f}; 3288 model->setOperandValue(param34, param34_init, sizeof(float) * 1); 3289 static int32_t param35_init[] = {2}; 3290 model->setOperandValue(param35, param35_init, sizeof(int32_t) * 1); 3291 static int32_t param36_init[] = {2}; 3292 model->setOperandValue(param36, param36_init, sizeof(int32_t) * 1); 3293 static float param37_init[] = {2.0f}; 3294 model->setOperandValue(param37, param37_init, sizeof(float) * 1); 3295 static float param38_init[] = {2.0f}; 3296 model->setOperandValue(param38, param38_init, sizeof(float) * 1); 3297 static int32_t param39_init[] = {4}; 3298 model->setOperandValue(param39, param39_init, sizeof(int32_t) * 1); 3299 static int32_t param40_init[] = {4}; 3300 model->setOperandValue(param40, param40_init, sizeof(int32_t) * 1); 3301 static bool8 layout_init[] = {false}; 3302 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 3303 model->addOperation(ANEURALNETWORKS_BOX_WITH_NMS_LIMIT, {scores, roi4, param28, param29, param30, param31, param32, param33, param34}, {scoresOut, roiOut, classesOut, batchSplitOut}); 3304 model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in4, roiOut, batchSplitOut, param35, param36, param37, param38, param39, param40, layout}, {featureMap}); 3305 // Phase 3, inputs and outputs 3306 model->identifyInputsAndOutputs( 3307 {in4}, 3308 {scoresOut, classesOut, featureMap}); 3309 assert(model->isValid()); 3310 } 3311 3312 inline bool is_ignored_zero_sized_nhwc(int i) { 3313 static std::set<int> ignore = {}; 3314 return ignore.find(i) != ignore.end(); 3315 } 3316 3317 void CreateModel_zero_sized_nhwc_relaxed(Model *model) { 3318 OperandType type0(Type::BOOL, {}); 3319 OperandType type14(Type::TENSOR_FLOAT32, {1, 2}); 3320 OperandType type15(Type::TENSOR_FLOAT32, {1, 8}); 3321 OperandType type16(Type::TENSOR_FLOAT32, {0}); 3322 OperandType type17(Type::TENSOR_INT32, {0}); 3323 OperandType type18(Type::TENSOR_FLOAT32, {0, 4}); 3324 OperandType type19(Type::TENSOR_INT32, {1}); 3325 OperandType type20(Type::TENSOR_FLOAT32, {1, 1, 1, 1}); 3326 OperandType type21(Type::TENSOR_FLOAT32, {0, 2, 2, 1}); 3327 OperandType type5(Type::INT32, {}); 3328 OperandType type6(Type::FLOAT32, {}); 3329 // Phase 1, operands 3330 auto scores = model->addOperand(&type14); 3331 auto roi4 = model->addOperand(&type15); 3332 auto param28 = model->addOperand(&type19); 3333 auto param29 = model->addOperand(&type6); 3334 auto param30 = model->addOperand(&type5); 3335 auto param31 = model->addOperand(&type5); 3336 auto param32 = model->addOperand(&type6); 3337 auto param33 = model->addOperand(&type6); 3338 auto param34 = model->addOperand(&type6); 3339 auto scoresOut = model->addOperand(&type16); 3340 auto roiOut = model->addOperand(&type18); 3341 auto classesOut = model->addOperand(&type17); 3342 auto batchSplitOut = model->addOperand(&type17); 3343 auto in4 = model->addOperand(&type20); 3344 auto param35 = model->addOperand(&type5); 3345 auto param36 = model->addOperand(&type5); 3346 auto param37 = model->addOperand(&type6); 3347 auto param38 = model->addOperand(&type6); 3348 auto param39 = model->addOperand(&type5); 3349 auto param40 = model->addOperand(&type5); 3350 auto layout = model->addOperand(&type0); 3351 auto featureMap = model->addOperand(&type21); 3352 // Phase 2, operations 3353 static float scores_init[] = {0.9f, 0.1f}; 3354 model->setOperandValue(scores, scores_init, sizeof(float) * 2); 3355 static float roi4_init[] = {1.0f, 1.0f, 10.0f, 10.0f, 0.0f, 0.0f, 10.0f, 10.0f}; 3356 model->setOperandValue(roi4, roi4_init, sizeof(float) * 8); 3357 static int32_t param28_init[] = {0}; 3358 model->setOperandValue(param28, param28_init, sizeof(int32_t) * 1); 3359 static float param29_init[] = {0.3f}; 3360 model->setOperandValue(param29, param29_init, sizeof(float) * 1); 3361 static int32_t param30_init[] = {-1}; 3362 model->setOperandValue(param30, param30_init, sizeof(int32_t) * 1); 3363 static int32_t param31_init[] = {0}; 3364 model->setOperandValue(param31, param31_init, sizeof(int32_t) * 1); 3365 static float param32_init[] = {0.4f}; 3366 model->setOperandValue(param32, param32_init, sizeof(float) * 1); 3367 static float param33_init[] = {1.0f}; 3368 model->setOperandValue(param33, param33_init, sizeof(float) * 1); 3369 static float param34_init[] = {0.3f}; 3370 model->setOperandValue(param34, param34_init, sizeof(float) * 1); 3371 static int32_t param35_init[] = {2}; 3372 model->setOperandValue(param35, param35_init, sizeof(int32_t) * 1); 3373 static int32_t param36_init[] = {2}; 3374 model->setOperandValue(param36, param36_init, sizeof(int32_t) * 1); 3375 static float param37_init[] = {2.0f}; 3376 model->setOperandValue(param37, param37_init, sizeof(float) * 1); 3377 static float param38_init[] = {2.0f}; 3378 model->setOperandValue(param38, param38_init, sizeof(float) * 1); 3379 static int32_t param39_init[] = {4}; 3380 model->setOperandValue(param39, param39_init, sizeof(int32_t) * 1); 3381 static int32_t param40_init[] = {4}; 3382 model->setOperandValue(param40, param40_init, sizeof(int32_t) * 1); 3383 static bool8 layout_init[] = {false}; 3384 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 3385 model->addOperation(ANEURALNETWORKS_BOX_WITH_NMS_LIMIT, {scores, roi4, param28, param29, param30, param31, param32, param33, param34}, {scoresOut, roiOut, classesOut, batchSplitOut}); 3386 model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in4, roiOut, batchSplitOut, param35, param36, param37, param38, param39, param40, layout}, {featureMap}); 3387 // Phase 3, inputs and outputs 3388 model->identifyInputsAndOutputs( 3389 {in4}, 3390 {scoresOut, classesOut, featureMap}); 3391 // Phase 4: set relaxed execution 3392 model->relaxComputationFloat32toFloat16(true); 3393 assert(model->isValid()); 3394 } 3395 3396 inline bool is_ignored_zero_sized_nhwc_relaxed(int i) { 3397 static std::set<int> ignore = {}; 3398 return ignore.find(i) != ignore.end(); 3399 } 3400 3401 void CreateModel_zero_sized_nhwc_quant8(Model *model) { 3402 OperandType type0(Type::BOOL, {}); 3403 OperandType type17(Type::TENSOR_INT32, {0}); 3404 OperandType type19(Type::TENSOR_INT32, {1}); 3405 OperandType type5(Type::INT32, {}); 3406 OperandType type6(Type::FLOAT32, {}); 3407 OperandType type69(Type::TENSOR_QUANT8_ASYMM, {0, 2, 2, 1}, 0.1f, 128); 3408 OperandType type70(Type::TENSOR_QUANT8_ASYMM, {1, 1, 1, 1}, 0.1f, 128); 3409 OperandType type71(Type::TENSOR_QUANT16_ASYMM, {1, 8}, 0.125f, 0); 3410 OperandType type72(Type::TENSOR_QUANT16_ASYMM, {0, 4}, 0.125f, 0); 3411 OperandType type73(Type::TENSOR_QUANT8_ASYMM, {1, 2}, 0.1f, 128); 3412 OperandType type74(Type::TENSOR_QUANT8_ASYMM, {0}, 0.1f, 128); 3413 // Phase 1, operands 3414 auto scores = model->addOperand(&type73); 3415 auto roi4 = model->addOperand(&type71); 3416 auto param28 = model->addOperand(&type19); 3417 auto param29 = model->addOperand(&type6); 3418 auto param30 = model->addOperand(&type5); 3419 auto param31 = model->addOperand(&type5); 3420 auto param32 = model->addOperand(&type6); 3421 auto param33 = model->addOperand(&type6); 3422 auto param34 = model->addOperand(&type6); 3423 auto scoresOut = model->addOperand(&type74); 3424 auto roiOut = model->addOperand(&type72); 3425 auto classesOut = model->addOperand(&type17); 3426 auto batchSplitOut = model->addOperand(&type17); 3427 auto in4 = model->addOperand(&type70); 3428 auto param35 = model->addOperand(&type5); 3429 auto param36 = model->addOperand(&type5); 3430 auto param37 = model->addOperand(&type6); 3431 auto param38 = model->addOperand(&type6); 3432 auto param39 = model->addOperand(&type5); 3433 auto param40 = model->addOperand(&type5); 3434 auto layout = model->addOperand(&type0); 3435 auto featureMap = model->addOperand(&type69); 3436 // Phase 2, operations 3437 static uint8_t scores_init[] = {137, 129}; 3438 model->setOperandValue(scores, scores_init, sizeof(uint8_t) * 2); 3439 static uint16_t roi4_init[] = {8, 8, 80, 80, 0, 0, 80, 80}; 3440 model->setOperandValue(roi4, roi4_init, sizeof(uint16_t) * 8); 3441 static int32_t param28_init[] = {0}; 3442 model->setOperandValue(param28, param28_init, sizeof(int32_t) * 1); 3443 static float param29_init[] = {0.3f}; 3444 model->setOperandValue(param29, param29_init, sizeof(float) * 1); 3445 static int32_t param30_init[] = {-1}; 3446 model->setOperandValue(param30, param30_init, sizeof(int32_t) * 1); 3447 static int32_t param31_init[] = {0}; 3448 model->setOperandValue(param31, param31_init, sizeof(int32_t) * 1); 3449 static float param32_init[] = {0.4f}; 3450 model->setOperandValue(param32, param32_init, sizeof(float) * 1); 3451 static float param33_init[] = {1.0f}; 3452 model->setOperandValue(param33, param33_init, sizeof(float) * 1); 3453 static float param34_init[] = {0.3f}; 3454 model->setOperandValue(param34, param34_init, sizeof(float) * 1); 3455 static int32_t param35_init[] = {2}; 3456 model->setOperandValue(param35, param35_init, sizeof(int32_t) * 1); 3457 static int32_t param36_init[] = {2}; 3458 model->setOperandValue(param36, param36_init, sizeof(int32_t) * 1); 3459 static float param37_init[] = {2.0f}; 3460 model->setOperandValue(param37, param37_init, sizeof(float) * 1); 3461 static float param38_init[] = {2.0f}; 3462 model->setOperandValue(param38, param38_init, sizeof(float) * 1); 3463 static int32_t param39_init[] = {4}; 3464 model->setOperandValue(param39, param39_init, sizeof(int32_t) * 1); 3465 static int32_t param40_init[] = {4}; 3466 model->setOperandValue(param40, param40_init, sizeof(int32_t) * 1); 3467 static bool8 layout_init[] = {false}; 3468 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 3469 model->addOperation(ANEURALNETWORKS_BOX_WITH_NMS_LIMIT, {scores, roi4, param28, param29, param30, param31, param32, param33, param34}, {scoresOut, roiOut, classesOut, batchSplitOut}); 3470 model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in4, roiOut, batchSplitOut, param35, param36, param37, param38, param39, param40, layout}, {featureMap}); 3471 // Phase 3, inputs and outputs 3472 model->identifyInputsAndOutputs( 3473 {in4}, 3474 {scoresOut, classesOut, featureMap}); 3475 assert(model->isValid()); 3476 } 3477 3478 inline bool is_ignored_zero_sized_nhwc_quant8(int i) { 3479 static std::set<int> ignore = {}; 3480 return ignore.find(i) != ignore.end(); 3481 } 3482 3483 void CreateModel_zero_sized_nhwc_float16(Model *model) { 3484 OperandType type0(Type::BOOL, {}); 3485 OperandType type17(Type::TENSOR_INT32, {0}); 3486 OperandType type19(Type::TENSOR_INT32, {1}); 3487 OperandType type30(Type::FLOAT16, {}); 3488 OperandType type5(Type::INT32, {}); 3489 OperandType type75(Type::TENSOR_FLOAT16, {0, 2, 2, 1}); 3490 OperandType type76(Type::TENSOR_FLOAT16, {1, 1, 1, 1}); 3491 OperandType type77(Type::TENSOR_FLOAT16, {1, 8}); 3492 OperandType type78(Type::TENSOR_FLOAT16, {0, 4}); 3493 OperandType type79(Type::TENSOR_FLOAT16, {1, 2}); 3494 OperandType type80(Type::TENSOR_FLOAT16, {0}); 3495 // Phase 1, operands 3496 auto scores = model->addOperand(&type79); 3497 auto roi4 = model->addOperand(&type77); 3498 auto param28 = model->addOperand(&type19); 3499 auto param29 = model->addOperand(&type30); 3500 auto param30 = model->addOperand(&type5); 3501 auto param31 = model->addOperand(&type5); 3502 auto param32 = model->addOperand(&type30); 3503 auto param33 = model->addOperand(&type30); 3504 auto param34 = model->addOperand(&type30); 3505 auto scoresOut = model->addOperand(&type80); 3506 auto roiOut = model->addOperand(&type78); 3507 auto classesOut = model->addOperand(&type17); 3508 auto batchSplitOut = model->addOperand(&type17); 3509 auto in4 = model->addOperand(&type76); 3510 auto param35 = model->addOperand(&type5); 3511 auto param36 = model->addOperand(&type5); 3512 auto param37 = model->addOperand(&type30); 3513 auto param38 = model->addOperand(&type30); 3514 auto param39 = model->addOperand(&type5); 3515 auto param40 = model->addOperand(&type5); 3516 auto layout = model->addOperand(&type0); 3517 auto featureMap = model->addOperand(&type75); 3518 // Phase 2, operations 3519 static _Float16 scores_init[] = {0.8999999761581421f, 0.10000000149011612f}; 3520 model->setOperandValue(scores, scores_init, sizeof(_Float16) * 2); 3521 static _Float16 roi4_init[] = {1.0f, 1.0f, 10.0f, 10.0f, 0.0f, 0.0f, 10.0f, 10.0f}; 3522 model->setOperandValue(roi4, roi4_init, sizeof(_Float16) * 8); 3523 static int32_t param28_init[] = {0}; 3524 model->setOperandValue(param28, param28_init, sizeof(int32_t) * 1); 3525 static _Float16 param29_init[] = {0.30000001192092896f}; 3526 model->setOperandValue(param29, param29_init, sizeof(_Float16) * 1); 3527 static int32_t param30_init[] = {-1}; 3528 model->setOperandValue(param30, param30_init, sizeof(int32_t) * 1); 3529 static int32_t param31_init[] = {0}; 3530 model->setOperandValue(param31, param31_init, sizeof(int32_t) * 1); 3531 static _Float16 param32_init[] = {0.4000000059604645f}; 3532 model->setOperandValue(param32, param32_init, sizeof(_Float16) * 1); 3533 static _Float16 param33_init[] = {1.0f}; 3534 model->setOperandValue(param33, param33_init, sizeof(_Float16) * 1); 3535 static _Float16 param34_init[] = {0.30000001192092896f}; 3536 model->setOperandValue(param34, param34_init, sizeof(_Float16) * 1); 3537 static int32_t param35_init[] = {2}; 3538 model->setOperandValue(param35, param35_init, sizeof(int32_t) * 1); 3539 static int32_t param36_init[] = {2}; 3540 model->setOperandValue(param36, param36_init, sizeof(int32_t) * 1); 3541 static _Float16 param37_init[] = {2.0f}; 3542 model->setOperandValue(param37, param37_init, sizeof(_Float16) * 1); 3543 static _Float16 param38_init[] = {2.0f}; 3544 model->setOperandValue(param38, param38_init, sizeof(_Float16) * 1); 3545 static int32_t param39_init[] = {4}; 3546 model->setOperandValue(param39, param39_init, sizeof(int32_t) * 1); 3547 static int32_t param40_init[] = {4}; 3548 model->setOperandValue(param40, param40_init, sizeof(int32_t) * 1); 3549 static bool8 layout_init[] = {false}; 3550 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 3551 model->addOperation(ANEURALNETWORKS_BOX_WITH_NMS_LIMIT, {scores, roi4, param28, param29, param30, param31, param32, param33, param34}, {scoresOut, roiOut, classesOut, batchSplitOut}); 3552 model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in4, roiOut, batchSplitOut, param35, param36, param37, param38, param39, param40, layout}, {featureMap}); 3553 // Phase 3, inputs and outputs 3554 model->identifyInputsAndOutputs( 3555 {in4}, 3556 {scoresOut, classesOut, featureMap}); 3557 assert(model->isValid()); 3558 } 3559 3560 inline bool is_ignored_zero_sized_nhwc_float16(int i) { 3561 static std::set<int> ignore = {}; 3562 return ignore.find(i) != ignore.end(); 3563 } 3564 3565 void CreateModel_zero_sized_nchw(Model *model) { 3566 OperandType type0(Type::BOOL, {}); 3567 OperandType type14(Type::TENSOR_FLOAT32, {1, 2}); 3568 OperandType type15(Type::TENSOR_FLOAT32, {1, 8}); 3569 OperandType type16(Type::TENSOR_FLOAT32, {0}); 3570 OperandType type17(Type::TENSOR_INT32, {0}); 3571 OperandType type18(Type::TENSOR_FLOAT32, {0, 4}); 3572 OperandType type19(Type::TENSOR_INT32, {1}); 3573 OperandType type20(Type::TENSOR_FLOAT32, {1, 1, 1, 1}); 3574 OperandType type5(Type::INT32, {}); 3575 OperandType type6(Type::FLOAT32, {}); 3576 OperandType type81(Type::TENSOR_FLOAT32, {0, 1, 2, 2}); 3577 // Phase 1, operands 3578 auto scores = model->addOperand(&type14); 3579 auto roi4 = model->addOperand(&type15); 3580 auto param28 = model->addOperand(&type19); 3581 auto param29 = model->addOperand(&type6); 3582 auto param30 = model->addOperand(&type5); 3583 auto param31 = model->addOperand(&type5); 3584 auto param32 = model->addOperand(&type6); 3585 auto param33 = model->addOperand(&type6); 3586 auto param34 = model->addOperand(&type6); 3587 auto scoresOut = model->addOperand(&type16); 3588 auto roiOut = model->addOperand(&type18); 3589 auto classesOut = model->addOperand(&type17); 3590 auto batchSplitOut = model->addOperand(&type17); 3591 auto in4 = model->addOperand(&type20); 3592 auto param35 = model->addOperand(&type5); 3593 auto param36 = model->addOperand(&type5); 3594 auto param37 = model->addOperand(&type6); 3595 auto param38 = model->addOperand(&type6); 3596 auto param39 = model->addOperand(&type5); 3597 auto param40 = model->addOperand(&type5); 3598 auto layout = model->addOperand(&type0); 3599 auto featureMap = model->addOperand(&type81); 3600 // Phase 2, operations 3601 static float scores_init[] = {0.9f, 0.1f}; 3602 model->setOperandValue(scores, scores_init, sizeof(float) * 2); 3603 static float roi4_init[] = {1.0f, 1.0f, 10.0f, 10.0f, 0.0f, 0.0f, 10.0f, 10.0f}; 3604 model->setOperandValue(roi4, roi4_init, sizeof(float) * 8); 3605 static int32_t param28_init[] = {0}; 3606 model->setOperandValue(param28, param28_init, sizeof(int32_t) * 1); 3607 static float param29_init[] = {0.3f}; 3608 model->setOperandValue(param29, param29_init, sizeof(float) * 1); 3609 static int32_t param30_init[] = {-1}; 3610 model->setOperandValue(param30, param30_init, sizeof(int32_t) * 1); 3611 static int32_t param31_init[] = {0}; 3612 model->setOperandValue(param31, param31_init, sizeof(int32_t) * 1); 3613 static float param32_init[] = {0.4f}; 3614 model->setOperandValue(param32, param32_init, sizeof(float) * 1); 3615 static float param33_init[] = {1.0f}; 3616 model->setOperandValue(param33, param33_init, sizeof(float) * 1); 3617 static float param34_init[] = {0.3f}; 3618 model->setOperandValue(param34, param34_init, sizeof(float) * 1); 3619 static int32_t param35_init[] = {2}; 3620 model->setOperandValue(param35, param35_init, sizeof(int32_t) * 1); 3621 static int32_t param36_init[] = {2}; 3622 model->setOperandValue(param36, param36_init, sizeof(int32_t) * 1); 3623 static float param37_init[] = {2.0f}; 3624 model->setOperandValue(param37, param37_init, sizeof(float) * 1); 3625 static float param38_init[] = {2.0f}; 3626 model->setOperandValue(param38, param38_init, sizeof(float) * 1); 3627 static int32_t param39_init[] = {4}; 3628 model->setOperandValue(param39, param39_init, sizeof(int32_t) * 1); 3629 static int32_t param40_init[] = {4}; 3630 model->setOperandValue(param40, param40_init, sizeof(int32_t) * 1); 3631 static bool8 layout_init[] = {true}; 3632 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 3633 model->addOperation(ANEURALNETWORKS_BOX_WITH_NMS_LIMIT, {scores, roi4, param28, param29, param30, param31, param32, param33, param34}, {scoresOut, roiOut, classesOut, batchSplitOut}); 3634 model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in4, roiOut, batchSplitOut, param35, param36, param37, param38, param39, param40, layout}, {featureMap}); 3635 // Phase 3, inputs and outputs 3636 model->identifyInputsAndOutputs( 3637 {in4}, 3638 {scoresOut, classesOut, featureMap}); 3639 assert(model->isValid()); 3640 } 3641 3642 inline bool is_ignored_zero_sized_nchw(int i) { 3643 static std::set<int> ignore = {}; 3644 return ignore.find(i) != ignore.end(); 3645 } 3646 3647 void CreateModel_zero_sized_nchw_relaxed(Model *model) { 3648 OperandType type0(Type::BOOL, {}); 3649 OperandType type14(Type::TENSOR_FLOAT32, {1, 2}); 3650 OperandType type15(Type::TENSOR_FLOAT32, {1, 8}); 3651 OperandType type16(Type::TENSOR_FLOAT32, {0}); 3652 OperandType type17(Type::TENSOR_INT32, {0}); 3653 OperandType type18(Type::TENSOR_FLOAT32, {0, 4}); 3654 OperandType type19(Type::TENSOR_INT32, {1}); 3655 OperandType type20(Type::TENSOR_FLOAT32, {1, 1, 1, 1}); 3656 OperandType type5(Type::INT32, {}); 3657 OperandType type6(Type::FLOAT32, {}); 3658 OperandType type81(Type::TENSOR_FLOAT32, {0, 1, 2, 2}); 3659 // Phase 1, operands 3660 auto scores = model->addOperand(&type14); 3661 auto roi4 = model->addOperand(&type15); 3662 auto param28 = model->addOperand(&type19); 3663 auto param29 = model->addOperand(&type6); 3664 auto param30 = model->addOperand(&type5); 3665 auto param31 = model->addOperand(&type5); 3666 auto param32 = model->addOperand(&type6); 3667 auto param33 = model->addOperand(&type6); 3668 auto param34 = model->addOperand(&type6); 3669 auto scoresOut = model->addOperand(&type16); 3670 auto roiOut = model->addOperand(&type18); 3671 auto classesOut = model->addOperand(&type17); 3672 auto batchSplitOut = model->addOperand(&type17); 3673 auto in4 = model->addOperand(&type20); 3674 auto param35 = model->addOperand(&type5); 3675 auto param36 = model->addOperand(&type5); 3676 auto param37 = model->addOperand(&type6); 3677 auto param38 = model->addOperand(&type6); 3678 auto param39 = model->addOperand(&type5); 3679 auto param40 = model->addOperand(&type5); 3680 auto layout = model->addOperand(&type0); 3681 auto featureMap = model->addOperand(&type81); 3682 // Phase 2, operations 3683 static float scores_init[] = {0.9f, 0.1f}; 3684 model->setOperandValue(scores, scores_init, sizeof(float) * 2); 3685 static float roi4_init[] = {1.0f, 1.0f, 10.0f, 10.0f, 0.0f, 0.0f, 10.0f, 10.0f}; 3686 model->setOperandValue(roi4, roi4_init, sizeof(float) * 8); 3687 static int32_t param28_init[] = {0}; 3688 model->setOperandValue(param28, param28_init, sizeof(int32_t) * 1); 3689 static float param29_init[] = {0.3f}; 3690 model->setOperandValue(param29, param29_init, sizeof(float) * 1); 3691 static int32_t param30_init[] = {-1}; 3692 model->setOperandValue(param30, param30_init, sizeof(int32_t) * 1); 3693 static int32_t param31_init[] = {0}; 3694 model->setOperandValue(param31, param31_init, sizeof(int32_t) * 1); 3695 static float param32_init[] = {0.4f}; 3696 model->setOperandValue(param32, param32_init, sizeof(float) * 1); 3697 static float param33_init[] = {1.0f}; 3698 model->setOperandValue(param33, param33_init, sizeof(float) * 1); 3699 static float param34_init[] = {0.3f}; 3700 model->setOperandValue(param34, param34_init, sizeof(float) * 1); 3701 static int32_t param35_init[] = {2}; 3702 model->setOperandValue(param35, param35_init, sizeof(int32_t) * 1); 3703 static int32_t param36_init[] = {2}; 3704 model->setOperandValue(param36, param36_init, sizeof(int32_t) * 1); 3705 static float param37_init[] = {2.0f}; 3706 model->setOperandValue(param37, param37_init, sizeof(float) * 1); 3707 static float param38_init[] = {2.0f}; 3708 model->setOperandValue(param38, param38_init, sizeof(float) * 1); 3709 static int32_t param39_init[] = {4}; 3710 model->setOperandValue(param39, param39_init, sizeof(int32_t) * 1); 3711 static int32_t param40_init[] = {4}; 3712 model->setOperandValue(param40, param40_init, sizeof(int32_t) * 1); 3713 static bool8 layout_init[] = {true}; 3714 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 3715 model->addOperation(ANEURALNETWORKS_BOX_WITH_NMS_LIMIT, {scores, roi4, param28, param29, param30, param31, param32, param33, param34}, {scoresOut, roiOut, classesOut, batchSplitOut}); 3716 model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in4, roiOut, batchSplitOut, param35, param36, param37, param38, param39, param40, layout}, {featureMap}); 3717 // Phase 3, inputs and outputs 3718 model->identifyInputsAndOutputs( 3719 {in4}, 3720 {scoresOut, classesOut, featureMap}); 3721 // Phase 4: set relaxed execution 3722 model->relaxComputationFloat32toFloat16(true); 3723 assert(model->isValid()); 3724 } 3725 3726 inline bool is_ignored_zero_sized_nchw_relaxed(int i) { 3727 static std::set<int> ignore = {}; 3728 return ignore.find(i) != ignore.end(); 3729 } 3730 3731 void CreateModel_zero_sized_nchw_quant8(Model *model) { 3732 OperandType type0(Type::BOOL, {}); 3733 OperandType type17(Type::TENSOR_INT32, {0}); 3734 OperandType type19(Type::TENSOR_INT32, {1}); 3735 OperandType type5(Type::INT32, {}); 3736 OperandType type6(Type::FLOAT32, {}); 3737 OperandType type70(Type::TENSOR_QUANT8_ASYMM, {1, 1, 1, 1}, 0.1f, 128); 3738 OperandType type71(Type::TENSOR_QUANT16_ASYMM, {1, 8}, 0.125f, 0); 3739 OperandType type72(Type::TENSOR_QUANT16_ASYMM, {0, 4}, 0.125f, 0); 3740 OperandType type73(Type::TENSOR_QUANT8_ASYMM, {1, 2}, 0.1f, 128); 3741 OperandType type74(Type::TENSOR_QUANT8_ASYMM, {0}, 0.1f, 128); 3742 OperandType type82(Type::TENSOR_QUANT8_ASYMM, {0, 1, 2, 2}, 0.1f, 128); 3743 // Phase 1, operands 3744 auto scores = model->addOperand(&type73); 3745 auto roi4 = model->addOperand(&type71); 3746 auto param28 = model->addOperand(&type19); 3747 auto param29 = model->addOperand(&type6); 3748 auto param30 = model->addOperand(&type5); 3749 auto param31 = model->addOperand(&type5); 3750 auto param32 = model->addOperand(&type6); 3751 auto param33 = model->addOperand(&type6); 3752 auto param34 = model->addOperand(&type6); 3753 auto scoresOut = model->addOperand(&type74); 3754 auto roiOut = model->addOperand(&type72); 3755 auto classesOut = model->addOperand(&type17); 3756 auto batchSplitOut = model->addOperand(&type17); 3757 auto in4 = model->addOperand(&type70); 3758 auto param35 = model->addOperand(&type5); 3759 auto param36 = model->addOperand(&type5); 3760 auto param37 = model->addOperand(&type6); 3761 auto param38 = model->addOperand(&type6); 3762 auto param39 = model->addOperand(&type5); 3763 auto param40 = model->addOperand(&type5); 3764 auto layout = model->addOperand(&type0); 3765 auto featureMap = model->addOperand(&type82); 3766 // Phase 2, operations 3767 static uint8_t scores_init[] = {137, 129}; 3768 model->setOperandValue(scores, scores_init, sizeof(uint8_t) * 2); 3769 static uint16_t roi4_init[] = {8, 8, 80, 80, 0, 0, 80, 80}; 3770 model->setOperandValue(roi4, roi4_init, sizeof(uint16_t) * 8); 3771 static int32_t param28_init[] = {0}; 3772 model->setOperandValue(param28, param28_init, sizeof(int32_t) * 1); 3773 static float param29_init[] = {0.3f}; 3774 model->setOperandValue(param29, param29_init, sizeof(float) * 1); 3775 static int32_t param30_init[] = {-1}; 3776 model->setOperandValue(param30, param30_init, sizeof(int32_t) * 1); 3777 static int32_t param31_init[] = {0}; 3778 model->setOperandValue(param31, param31_init, sizeof(int32_t) * 1); 3779 static float param32_init[] = {0.4f}; 3780 model->setOperandValue(param32, param32_init, sizeof(float) * 1); 3781 static float param33_init[] = {1.0f}; 3782 model->setOperandValue(param33, param33_init, sizeof(float) * 1); 3783 static float param34_init[] = {0.3f}; 3784 model->setOperandValue(param34, param34_init, sizeof(float) * 1); 3785 static int32_t param35_init[] = {2}; 3786 model->setOperandValue(param35, param35_init, sizeof(int32_t) * 1); 3787 static int32_t param36_init[] = {2}; 3788 model->setOperandValue(param36, param36_init, sizeof(int32_t) * 1); 3789 static float param37_init[] = {2.0f}; 3790 model->setOperandValue(param37, param37_init, sizeof(float) * 1); 3791 static float param38_init[] = {2.0f}; 3792 model->setOperandValue(param38, param38_init, sizeof(float) * 1); 3793 static int32_t param39_init[] = {4}; 3794 model->setOperandValue(param39, param39_init, sizeof(int32_t) * 1); 3795 static int32_t param40_init[] = {4}; 3796 model->setOperandValue(param40, param40_init, sizeof(int32_t) * 1); 3797 static bool8 layout_init[] = {true}; 3798 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 3799 model->addOperation(ANEURALNETWORKS_BOX_WITH_NMS_LIMIT, {scores, roi4, param28, param29, param30, param31, param32, param33, param34}, {scoresOut, roiOut, classesOut, batchSplitOut}); 3800 model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in4, roiOut, batchSplitOut, param35, param36, param37, param38, param39, param40, layout}, {featureMap}); 3801 // Phase 3, inputs and outputs 3802 model->identifyInputsAndOutputs( 3803 {in4}, 3804 {scoresOut, classesOut, featureMap}); 3805 assert(model->isValid()); 3806 } 3807 3808 inline bool is_ignored_zero_sized_nchw_quant8(int i) { 3809 static std::set<int> ignore = {}; 3810 return ignore.find(i) != ignore.end(); 3811 } 3812 3813 void CreateModel_zero_sized_nchw_float16(Model *model) { 3814 OperandType type0(Type::BOOL, {}); 3815 OperandType type17(Type::TENSOR_INT32, {0}); 3816 OperandType type19(Type::TENSOR_INT32, {1}); 3817 OperandType type30(Type::FLOAT16, {}); 3818 OperandType type5(Type::INT32, {}); 3819 OperandType type76(Type::TENSOR_FLOAT16, {1, 1, 1, 1}); 3820 OperandType type77(Type::TENSOR_FLOAT16, {1, 8}); 3821 OperandType type78(Type::TENSOR_FLOAT16, {0, 4}); 3822 OperandType type79(Type::TENSOR_FLOAT16, {1, 2}); 3823 OperandType type80(Type::TENSOR_FLOAT16, {0}); 3824 OperandType type83(Type::TENSOR_FLOAT16, {0, 1, 2, 2}); 3825 // Phase 1, operands 3826 auto scores = model->addOperand(&type79); 3827 auto roi4 = model->addOperand(&type77); 3828 auto param28 = model->addOperand(&type19); 3829 auto param29 = model->addOperand(&type30); 3830 auto param30 = model->addOperand(&type5); 3831 auto param31 = model->addOperand(&type5); 3832 auto param32 = model->addOperand(&type30); 3833 auto param33 = model->addOperand(&type30); 3834 auto param34 = model->addOperand(&type30); 3835 auto scoresOut = model->addOperand(&type80); 3836 auto roiOut = model->addOperand(&type78); 3837 auto classesOut = model->addOperand(&type17); 3838 auto batchSplitOut = model->addOperand(&type17); 3839 auto in4 = model->addOperand(&type76); 3840 auto param35 = model->addOperand(&type5); 3841 auto param36 = model->addOperand(&type5); 3842 auto param37 = model->addOperand(&type30); 3843 auto param38 = model->addOperand(&type30); 3844 auto param39 = model->addOperand(&type5); 3845 auto param40 = model->addOperand(&type5); 3846 auto layout = model->addOperand(&type0); 3847 auto featureMap = model->addOperand(&type83); 3848 // Phase 2, operations 3849 static _Float16 scores_init[] = {0.8999999761581421f, 0.10000000149011612f}; 3850 model->setOperandValue(scores, scores_init, sizeof(_Float16) * 2); 3851 static _Float16 roi4_init[] = {1.0f, 1.0f, 10.0f, 10.0f, 0.0f, 0.0f, 10.0f, 10.0f}; 3852 model->setOperandValue(roi4, roi4_init, sizeof(_Float16) * 8); 3853 static int32_t param28_init[] = {0}; 3854 model->setOperandValue(param28, param28_init, sizeof(int32_t) * 1); 3855 static _Float16 param29_init[] = {0.30000001192092896f}; 3856 model->setOperandValue(param29, param29_init, sizeof(_Float16) * 1); 3857 static int32_t param30_init[] = {-1}; 3858 model->setOperandValue(param30, param30_init, sizeof(int32_t) * 1); 3859 static int32_t param31_init[] = {0}; 3860 model->setOperandValue(param31, param31_init, sizeof(int32_t) * 1); 3861 static _Float16 param32_init[] = {0.4000000059604645f}; 3862 model->setOperandValue(param32, param32_init, sizeof(_Float16) * 1); 3863 static _Float16 param33_init[] = {1.0f}; 3864 model->setOperandValue(param33, param33_init, sizeof(_Float16) * 1); 3865 static _Float16 param34_init[] = {0.30000001192092896f}; 3866 model->setOperandValue(param34, param34_init, sizeof(_Float16) * 1); 3867 static int32_t param35_init[] = {2}; 3868 model->setOperandValue(param35, param35_init, sizeof(int32_t) * 1); 3869 static int32_t param36_init[] = {2}; 3870 model->setOperandValue(param36, param36_init, sizeof(int32_t) * 1); 3871 static _Float16 param37_init[] = {2.0f}; 3872 model->setOperandValue(param37, param37_init, sizeof(_Float16) * 1); 3873 static _Float16 param38_init[] = {2.0f}; 3874 model->setOperandValue(param38, param38_init, sizeof(_Float16) * 1); 3875 static int32_t param39_init[] = {4}; 3876 model->setOperandValue(param39, param39_init, sizeof(int32_t) * 1); 3877 static int32_t param40_init[] = {4}; 3878 model->setOperandValue(param40, param40_init, sizeof(int32_t) * 1); 3879 static bool8 layout_init[] = {true}; 3880 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 3881 model->addOperation(ANEURALNETWORKS_BOX_WITH_NMS_LIMIT, {scores, roi4, param28, param29, param30, param31, param32, param33, param34}, {scoresOut, roiOut, classesOut, batchSplitOut}); 3882 model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in4, roiOut, batchSplitOut, param35, param36, param37, param38, param39, param40, layout}, {featureMap}); 3883 // Phase 3, inputs and outputs 3884 model->identifyInputsAndOutputs( 3885 {in4}, 3886 {scoresOut, classesOut, featureMap}); 3887 assert(model->isValid()); 3888 } 3889 3890 inline bool is_ignored_zero_sized_nchw_float16(int i) { 3891 static std::set<int> ignore = {}; 3892 return ignore.find(i) != ignore.end(); 3893 } 3894 3895 void CreateModel_zero_sized_dynamic_output_shape_nhwc(Model *model) { 3896 OperandType type0(Type::BOOL, {}); 3897 OperandType type14(Type::TENSOR_FLOAT32, {1, 2}); 3898 OperandType type15(Type::TENSOR_FLOAT32, {1, 8}); 3899 OperandType type16(Type::TENSOR_FLOAT32, {0}); 3900 OperandType type17(Type::TENSOR_INT32, {0}); 3901 OperandType type18(Type::TENSOR_FLOAT32, {0, 4}); 3902 OperandType type19(Type::TENSOR_INT32, {1}); 3903 OperandType type20(Type::TENSOR_FLOAT32, {1, 1, 1, 1}); 3904 OperandType type38(Type::TENSOR_FLOAT32, {0, 0, 0, 0}); 3905 OperandType type5(Type::INT32, {}); 3906 OperandType type6(Type::FLOAT32, {}); 3907 // Phase 1, operands 3908 auto scores = model->addOperand(&type14); 3909 auto roi4 = model->addOperand(&type15); 3910 auto param28 = model->addOperand(&type19); 3911 auto param29 = model->addOperand(&type6); 3912 auto param30 = model->addOperand(&type5); 3913 auto param31 = model->addOperand(&type5); 3914 auto param32 = model->addOperand(&type6); 3915 auto param33 = model->addOperand(&type6); 3916 auto param34 = model->addOperand(&type6); 3917 auto scoresOut = model->addOperand(&type16); 3918 auto roiOut = model->addOperand(&type18); 3919 auto classesOut = model->addOperand(&type17); 3920 auto batchSplitOut = model->addOperand(&type17); 3921 auto in4 = model->addOperand(&type20); 3922 auto param35 = model->addOperand(&type5); 3923 auto param36 = model->addOperand(&type5); 3924 auto param37 = model->addOperand(&type6); 3925 auto param38 = model->addOperand(&type6); 3926 auto param39 = model->addOperand(&type5); 3927 auto param40 = model->addOperand(&type5); 3928 auto layout = model->addOperand(&type0); 3929 auto featureMap = model->addOperand(&type38); 3930 // Phase 2, operations 3931 static float scores_init[] = {0.9f, 0.1f}; 3932 model->setOperandValue(scores, scores_init, sizeof(float) * 2); 3933 static float roi4_init[] = {1.0f, 1.0f, 10.0f, 10.0f, 0.0f, 0.0f, 10.0f, 10.0f}; 3934 model->setOperandValue(roi4, roi4_init, sizeof(float) * 8); 3935 static int32_t param28_init[] = {0}; 3936 model->setOperandValue(param28, param28_init, sizeof(int32_t) * 1); 3937 static float param29_init[] = {0.3f}; 3938 model->setOperandValue(param29, param29_init, sizeof(float) * 1); 3939 static int32_t param30_init[] = {-1}; 3940 model->setOperandValue(param30, param30_init, sizeof(int32_t) * 1); 3941 static int32_t param31_init[] = {0}; 3942 model->setOperandValue(param31, param31_init, sizeof(int32_t) * 1); 3943 static float param32_init[] = {0.4f}; 3944 model->setOperandValue(param32, param32_init, sizeof(float) * 1); 3945 static float param33_init[] = {1.0f}; 3946 model->setOperandValue(param33, param33_init, sizeof(float) * 1); 3947 static float param34_init[] = {0.3f}; 3948 model->setOperandValue(param34, param34_init, sizeof(float) * 1); 3949 static int32_t param35_init[] = {2}; 3950 model->setOperandValue(param35, param35_init, sizeof(int32_t) * 1); 3951 static int32_t param36_init[] = {2}; 3952 model->setOperandValue(param36, param36_init, sizeof(int32_t) * 1); 3953 static float param37_init[] = {2.0f}; 3954 model->setOperandValue(param37, param37_init, sizeof(float) * 1); 3955 static float param38_init[] = {2.0f}; 3956 model->setOperandValue(param38, param38_init, sizeof(float) * 1); 3957 static int32_t param39_init[] = {4}; 3958 model->setOperandValue(param39, param39_init, sizeof(int32_t) * 1); 3959 static int32_t param40_init[] = {4}; 3960 model->setOperandValue(param40, param40_init, sizeof(int32_t) * 1); 3961 static bool8 layout_init[] = {false}; 3962 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 3963 model->addOperation(ANEURALNETWORKS_BOX_WITH_NMS_LIMIT, {scores, roi4, param28, param29, param30, param31, param32, param33, param34}, {scoresOut, roiOut, classesOut, batchSplitOut}); 3964 model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in4, roiOut, batchSplitOut, param35, param36, param37, param38, param39, param40, layout}, {featureMap}); 3965 // Phase 3, inputs and outputs 3966 model->identifyInputsAndOutputs( 3967 {in4}, 3968 {scoresOut, classesOut, featureMap}); 3969 assert(model->isValid()); 3970 } 3971 3972 inline bool is_ignored_zero_sized_dynamic_output_shape_nhwc(int i) { 3973 static std::set<int> ignore = {}; 3974 return ignore.find(i) != ignore.end(); 3975 } 3976 3977 void CreateModel_zero_sized_dynamic_output_shape_nhwc_relaxed(Model *model) { 3978 OperandType type0(Type::BOOL, {}); 3979 OperandType type14(Type::TENSOR_FLOAT32, {1, 2}); 3980 OperandType type15(Type::TENSOR_FLOAT32, {1, 8}); 3981 OperandType type16(Type::TENSOR_FLOAT32, {0}); 3982 OperandType type17(Type::TENSOR_INT32, {0}); 3983 OperandType type18(Type::TENSOR_FLOAT32, {0, 4}); 3984 OperandType type19(Type::TENSOR_INT32, {1}); 3985 OperandType type20(Type::TENSOR_FLOAT32, {1, 1, 1, 1}); 3986 OperandType type38(Type::TENSOR_FLOAT32, {0, 0, 0, 0}); 3987 OperandType type5(Type::INT32, {}); 3988 OperandType type6(Type::FLOAT32, {}); 3989 // Phase 1, operands 3990 auto scores = model->addOperand(&type14); 3991 auto roi4 = model->addOperand(&type15); 3992 auto param28 = model->addOperand(&type19); 3993 auto param29 = model->addOperand(&type6); 3994 auto param30 = model->addOperand(&type5); 3995 auto param31 = model->addOperand(&type5); 3996 auto param32 = model->addOperand(&type6); 3997 auto param33 = model->addOperand(&type6); 3998 auto param34 = model->addOperand(&type6); 3999 auto scoresOut = model->addOperand(&type16); 4000 auto roiOut = model->addOperand(&type18); 4001 auto classesOut = model->addOperand(&type17); 4002 auto batchSplitOut = model->addOperand(&type17); 4003 auto in4 = model->addOperand(&type20); 4004 auto param35 = model->addOperand(&type5); 4005 auto param36 = model->addOperand(&type5); 4006 auto param37 = model->addOperand(&type6); 4007 auto param38 = model->addOperand(&type6); 4008 auto param39 = model->addOperand(&type5); 4009 auto param40 = model->addOperand(&type5); 4010 auto layout = model->addOperand(&type0); 4011 auto featureMap = model->addOperand(&type38); 4012 // Phase 2, operations 4013 static float scores_init[] = {0.9f, 0.1f}; 4014 model->setOperandValue(scores, scores_init, sizeof(float) * 2); 4015 static float roi4_init[] = {1.0f, 1.0f, 10.0f, 10.0f, 0.0f, 0.0f, 10.0f, 10.0f}; 4016 model->setOperandValue(roi4, roi4_init, sizeof(float) * 8); 4017 static int32_t param28_init[] = {0}; 4018 model->setOperandValue(param28, param28_init, sizeof(int32_t) * 1); 4019 static float param29_init[] = {0.3f}; 4020 model->setOperandValue(param29, param29_init, sizeof(float) * 1); 4021 static int32_t param30_init[] = {-1}; 4022 model->setOperandValue(param30, param30_init, sizeof(int32_t) * 1); 4023 static int32_t param31_init[] = {0}; 4024 model->setOperandValue(param31, param31_init, sizeof(int32_t) * 1); 4025 static float param32_init[] = {0.4f}; 4026 model->setOperandValue(param32, param32_init, sizeof(float) * 1); 4027 static float param33_init[] = {1.0f}; 4028 model->setOperandValue(param33, param33_init, sizeof(float) * 1); 4029 static float param34_init[] = {0.3f}; 4030 model->setOperandValue(param34, param34_init, sizeof(float) * 1); 4031 static int32_t param35_init[] = {2}; 4032 model->setOperandValue(param35, param35_init, sizeof(int32_t) * 1); 4033 static int32_t param36_init[] = {2}; 4034 model->setOperandValue(param36, param36_init, sizeof(int32_t) * 1); 4035 static float param37_init[] = {2.0f}; 4036 model->setOperandValue(param37, param37_init, sizeof(float) * 1); 4037 static float param38_init[] = {2.0f}; 4038 model->setOperandValue(param38, param38_init, sizeof(float) * 1); 4039 static int32_t param39_init[] = {4}; 4040 model->setOperandValue(param39, param39_init, sizeof(int32_t) * 1); 4041 static int32_t param40_init[] = {4}; 4042 model->setOperandValue(param40, param40_init, sizeof(int32_t) * 1); 4043 static bool8 layout_init[] = {false}; 4044 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 4045 model->addOperation(ANEURALNETWORKS_BOX_WITH_NMS_LIMIT, {scores, roi4, param28, param29, param30, param31, param32, param33, param34}, {scoresOut, roiOut, classesOut, batchSplitOut}); 4046 model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in4, roiOut, batchSplitOut, param35, param36, param37, param38, param39, param40, layout}, {featureMap}); 4047 // Phase 3, inputs and outputs 4048 model->identifyInputsAndOutputs( 4049 {in4}, 4050 {scoresOut, classesOut, featureMap}); 4051 // Phase 4: set relaxed execution 4052 model->relaxComputationFloat32toFloat16(true); 4053 assert(model->isValid()); 4054 } 4055 4056 inline bool is_ignored_zero_sized_dynamic_output_shape_nhwc_relaxed(int i) { 4057 static std::set<int> ignore = {}; 4058 return ignore.find(i) != ignore.end(); 4059 } 4060 4061 void CreateModel_zero_sized_dynamic_output_shape_nhwc_quant8(Model *model) { 4062 OperandType type0(Type::BOOL, {}); 4063 OperandType type17(Type::TENSOR_INT32, {0}); 4064 OperandType type19(Type::TENSOR_INT32, {1}); 4065 OperandType type5(Type::INT32, {}); 4066 OperandType type6(Type::FLOAT32, {}); 4067 OperandType type70(Type::TENSOR_QUANT8_ASYMM, {1, 1, 1, 1}, 0.1f, 128); 4068 OperandType type71(Type::TENSOR_QUANT16_ASYMM, {1, 8}, 0.125f, 0); 4069 OperandType type72(Type::TENSOR_QUANT16_ASYMM, {0, 4}, 0.125f, 0); 4070 OperandType type73(Type::TENSOR_QUANT8_ASYMM, {1, 2}, 0.1f, 128); 4071 OperandType type74(Type::TENSOR_QUANT8_ASYMM, {0}, 0.1f, 128); 4072 OperandType type84(Type::TENSOR_QUANT8_ASYMM, {0, 0, 0, 0}, 0.1f, 128); 4073 // Phase 1, operands 4074 auto scores = model->addOperand(&type73); 4075 auto roi4 = model->addOperand(&type71); 4076 auto param28 = model->addOperand(&type19); 4077 auto param29 = model->addOperand(&type6); 4078 auto param30 = model->addOperand(&type5); 4079 auto param31 = model->addOperand(&type5); 4080 auto param32 = model->addOperand(&type6); 4081 auto param33 = model->addOperand(&type6); 4082 auto param34 = model->addOperand(&type6); 4083 auto scoresOut = model->addOperand(&type74); 4084 auto roiOut = model->addOperand(&type72); 4085 auto classesOut = model->addOperand(&type17); 4086 auto batchSplitOut = model->addOperand(&type17); 4087 auto in4 = model->addOperand(&type70); 4088 auto param35 = model->addOperand(&type5); 4089 auto param36 = model->addOperand(&type5); 4090 auto param37 = model->addOperand(&type6); 4091 auto param38 = model->addOperand(&type6); 4092 auto param39 = model->addOperand(&type5); 4093 auto param40 = model->addOperand(&type5); 4094 auto layout = model->addOperand(&type0); 4095 auto featureMap = model->addOperand(&type84); 4096 // Phase 2, operations 4097 static uint8_t scores_init[] = {137, 129}; 4098 model->setOperandValue(scores, scores_init, sizeof(uint8_t) * 2); 4099 static uint16_t roi4_init[] = {8, 8, 80, 80, 0, 0, 80, 80}; 4100 model->setOperandValue(roi4, roi4_init, sizeof(uint16_t) * 8); 4101 static int32_t param28_init[] = {0}; 4102 model->setOperandValue(param28, param28_init, sizeof(int32_t) * 1); 4103 static float param29_init[] = {0.3f}; 4104 model->setOperandValue(param29, param29_init, sizeof(float) * 1); 4105 static int32_t param30_init[] = {-1}; 4106 model->setOperandValue(param30, param30_init, sizeof(int32_t) * 1); 4107 static int32_t param31_init[] = {0}; 4108 model->setOperandValue(param31, param31_init, sizeof(int32_t) * 1); 4109 static float param32_init[] = {0.4f}; 4110 model->setOperandValue(param32, param32_init, sizeof(float) * 1); 4111 static float param33_init[] = {1.0f}; 4112 model->setOperandValue(param33, param33_init, sizeof(float) * 1); 4113 static float param34_init[] = {0.3f}; 4114 model->setOperandValue(param34, param34_init, sizeof(float) * 1); 4115 static int32_t param35_init[] = {2}; 4116 model->setOperandValue(param35, param35_init, sizeof(int32_t) * 1); 4117 static int32_t param36_init[] = {2}; 4118 model->setOperandValue(param36, param36_init, sizeof(int32_t) * 1); 4119 static float param37_init[] = {2.0f}; 4120 model->setOperandValue(param37, param37_init, sizeof(float) * 1); 4121 static float param38_init[] = {2.0f}; 4122 model->setOperandValue(param38, param38_init, sizeof(float) * 1); 4123 static int32_t param39_init[] = {4}; 4124 model->setOperandValue(param39, param39_init, sizeof(int32_t) * 1); 4125 static int32_t param40_init[] = {4}; 4126 model->setOperandValue(param40, param40_init, sizeof(int32_t) * 1); 4127 static bool8 layout_init[] = {false}; 4128 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 4129 model->addOperation(ANEURALNETWORKS_BOX_WITH_NMS_LIMIT, {scores, roi4, param28, param29, param30, param31, param32, param33, param34}, {scoresOut, roiOut, classesOut, batchSplitOut}); 4130 model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in4, roiOut, batchSplitOut, param35, param36, param37, param38, param39, param40, layout}, {featureMap}); 4131 // Phase 3, inputs and outputs 4132 model->identifyInputsAndOutputs( 4133 {in4}, 4134 {scoresOut, classesOut, featureMap}); 4135 assert(model->isValid()); 4136 } 4137 4138 inline bool is_ignored_zero_sized_dynamic_output_shape_nhwc_quant8(int i) { 4139 static std::set<int> ignore = {}; 4140 return ignore.find(i) != ignore.end(); 4141 } 4142 4143 void CreateModel_zero_sized_dynamic_output_shape_nhwc_float16(Model *model) { 4144 OperandType type0(Type::BOOL, {}); 4145 OperandType type17(Type::TENSOR_INT32, {0}); 4146 OperandType type19(Type::TENSOR_INT32, {1}); 4147 OperandType type30(Type::FLOAT16, {}); 4148 OperandType type40(Type::TENSOR_FLOAT16, {0, 0, 0, 0}); 4149 OperandType type5(Type::INT32, {}); 4150 OperandType type76(Type::TENSOR_FLOAT16, {1, 1, 1, 1}); 4151 OperandType type77(Type::TENSOR_FLOAT16, {1, 8}); 4152 OperandType type78(Type::TENSOR_FLOAT16, {0, 4}); 4153 OperandType type79(Type::TENSOR_FLOAT16, {1, 2}); 4154 OperandType type85(Type::TENSOR_FLOAT16, {0}); 4155 // Phase 1, operands 4156 auto scores = model->addOperand(&type79); 4157 auto roi4 = model->addOperand(&type77); 4158 auto param28 = model->addOperand(&type19); 4159 auto param29 = model->addOperand(&type30); 4160 auto param30 = model->addOperand(&type5); 4161 auto param31 = model->addOperand(&type5); 4162 auto param32 = model->addOperand(&type30); 4163 auto param33 = model->addOperand(&type30); 4164 auto param34 = model->addOperand(&type30); 4165 auto scoresOut = model->addOperand(&type85); 4166 auto roiOut = model->addOperand(&type78); 4167 auto classesOut = model->addOperand(&type17); 4168 auto batchSplitOut = model->addOperand(&type17); 4169 auto in4 = model->addOperand(&type76); 4170 auto param35 = model->addOperand(&type5); 4171 auto param36 = model->addOperand(&type5); 4172 auto param37 = model->addOperand(&type30); 4173 auto param38 = model->addOperand(&type30); 4174 auto param39 = model->addOperand(&type5); 4175 auto param40 = model->addOperand(&type5); 4176 auto layout = model->addOperand(&type0); 4177 auto featureMap = model->addOperand(&type40); 4178 // Phase 2, operations 4179 static _Float16 scores_init[] = {0.8999999761581421f, 0.10000000149011612f}; 4180 model->setOperandValue(scores, scores_init, sizeof(_Float16) * 2); 4181 static _Float16 roi4_init[] = {1.0f, 1.0f, 10.0f, 10.0f, 0.0f, 0.0f, 10.0f, 10.0f}; 4182 model->setOperandValue(roi4, roi4_init, sizeof(_Float16) * 8); 4183 static int32_t param28_init[] = {0}; 4184 model->setOperandValue(param28, param28_init, sizeof(int32_t) * 1); 4185 static _Float16 param29_init[] = {0.30000001192092896f}; 4186 model->setOperandValue(param29, param29_init, sizeof(_Float16) * 1); 4187 static int32_t param30_init[] = {-1}; 4188 model->setOperandValue(param30, param30_init, sizeof(int32_t) * 1); 4189 static int32_t param31_init[] = {0}; 4190 model->setOperandValue(param31, param31_init, sizeof(int32_t) * 1); 4191 static _Float16 param32_init[] = {0.4000000059604645f}; 4192 model->setOperandValue(param32, param32_init, sizeof(_Float16) * 1); 4193 static _Float16 param33_init[] = {1.0f}; 4194 model->setOperandValue(param33, param33_init, sizeof(_Float16) * 1); 4195 static _Float16 param34_init[] = {0.30000001192092896f}; 4196 model->setOperandValue(param34, param34_init, sizeof(_Float16) * 1); 4197 static int32_t param35_init[] = {2}; 4198 model->setOperandValue(param35, param35_init, sizeof(int32_t) * 1); 4199 static int32_t param36_init[] = {2}; 4200 model->setOperandValue(param36, param36_init, sizeof(int32_t) * 1); 4201 static _Float16 param37_init[] = {2.0f}; 4202 model->setOperandValue(param37, param37_init, sizeof(_Float16) * 1); 4203 static _Float16 param38_init[] = {2.0f}; 4204 model->setOperandValue(param38, param38_init, sizeof(_Float16) * 1); 4205 static int32_t param39_init[] = {4}; 4206 model->setOperandValue(param39, param39_init, sizeof(int32_t) * 1); 4207 static int32_t param40_init[] = {4}; 4208 model->setOperandValue(param40, param40_init, sizeof(int32_t) * 1); 4209 static bool8 layout_init[] = {false}; 4210 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 4211 model->addOperation(ANEURALNETWORKS_BOX_WITH_NMS_LIMIT, {scores, roi4, param28, param29, param30, param31, param32, param33, param34}, {scoresOut, roiOut, classesOut, batchSplitOut}); 4212 model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in4, roiOut, batchSplitOut, param35, param36, param37, param38, param39, param40, layout}, {featureMap}); 4213 // Phase 3, inputs and outputs 4214 model->identifyInputsAndOutputs( 4215 {in4}, 4216 {scoresOut, classesOut, featureMap}); 4217 assert(model->isValid()); 4218 } 4219 4220 inline bool is_ignored_zero_sized_dynamic_output_shape_nhwc_float16(int i) { 4221 static std::set<int> ignore = {}; 4222 return ignore.find(i) != ignore.end(); 4223 } 4224 4225 void CreateModel_zero_sized_dynamic_output_shape_nchw(Model *model) { 4226 OperandType type0(Type::BOOL, {}); 4227 OperandType type14(Type::TENSOR_FLOAT32, {1, 2}); 4228 OperandType type15(Type::TENSOR_FLOAT32, {1, 8}); 4229 OperandType type16(Type::TENSOR_FLOAT32, {0}); 4230 OperandType type17(Type::TENSOR_INT32, {0}); 4231 OperandType type18(Type::TENSOR_FLOAT32, {0, 4}); 4232 OperandType type19(Type::TENSOR_INT32, {1}); 4233 OperandType type20(Type::TENSOR_FLOAT32, {1, 1, 1, 1}); 4234 OperandType type38(Type::TENSOR_FLOAT32, {0, 0, 0, 0}); 4235 OperandType type5(Type::INT32, {}); 4236 OperandType type6(Type::FLOAT32, {}); 4237 // Phase 1, operands 4238 auto scores = model->addOperand(&type14); 4239 auto roi4 = model->addOperand(&type15); 4240 auto param28 = model->addOperand(&type19); 4241 auto param29 = model->addOperand(&type6); 4242 auto param30 = model->addOperand(&type5); 4243 auto param31 = model->addOperand(&type5); 4244 auto param32 = model->addOperand(&type6); 4245 auto param33 = model->addOperand(&type6); 4246 auto param34 = model->addOperand(&type6); 4247 auto scoresOut = model->addOperand(&type16); 4248 auto roiOut = model->addOperand(&type18); 4249 auto classesOut = model->addOperand(&type17); 4250 auto batchSplitOut = model->addOperand(&type17); 4251 auto in4 = model->addOperand(&type20); 4252 auto param35 = model->addOperand(&type5); 4253 auto param36 = model->addOperand(&type5); 4254 auto param37 = model->addOperand(&type6); 4255 auto param38 = model->addOperand(&type6); 4256 auto param39 = model->addOperand(&type5); 4257 auto param40 = model->addOperand(&type5); 4258 auto layout = model->addOperand(&type0); 4259 auto featureMap = model->addOperand(&type38); 4260 // Phase 2, operations 4261 static float scores_init[] = {0.9f, 0.1f}; 4262 model->setOperandValue(scores, scores_init, sizeof(float) * 2); 4263 static float roi4_init[] = {1.0f, 1.0f, 10.0f, 10.0f, 0.0f, 0.0f, 10.0f, 10.0f}; 4264 model->setOperandValue(roi4, roi4_init, sizeof(float) * 8); 4265 static int32_t param28_init[] = {0}; 4266 model->setOperandValue(param28, param28_init, sizeof(int32_t) * 1); 4267 static float param29_init[] = {0.3f}; 4268 model->setOperandValue(param29, param29_init, sizeof(float) * 1); 4269 static int32_t param30_init[] = {-1}; 4270 model->setOperandValue(param30, param30_init, sizeof(int32_t) * 1); 4271 static int32_t param31_init[] = {0}; 4272 model->setOperandValue(param31, param31_init, sizeof(int32_t) * 1); 4273 static float param32_init[] = {0.4f}; 4274 model->setOperandValue(param32, param32_init, sizeof(float) * 1); 4275 static float param33_init[] = {1.0f}; 4276 model->setOperandValue(param33, param33_init, sizeof(float) * 1); 4277 static float param34_init[] = {0.3f}; 4278 model->setOperandValue(param34, param34_init, sizeof(float) * 1); 4279 static int32_t param35_init[] = {2}; 4280 model->setOperandValue(param35, param35_init, sizeof(int32_t) * 1); 4281 static int32_t param36_init[] = {2}; 4282 model->setOperandValue(param36, param36_init, sizeof(int32_t) * 1); 4283 static float param37_init[] = {2.0f}; 4284 model->setOperandValue(param37, param37_init, sizeof(float) * 1); 4285 static float param38_init[] = {2.0f}; 4286 model->setOperandValue(param38, param38_init, sizeof(float) * 1); 4287 static int32_t param39_init[] = {4}; 4288 model->setOperandValue(param39, param39_init, sizeof(int32_t) * 1); 4289 static int32_t param40_init[] = {4}; 4290 model->setOperandValue(param40, param40_init, sizeof(int32_t) * 1); 4291 static bool8 layout_init[] = {true}; 4292 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 4293 model->addOperation(ANEURALNETWORKS_BOX_WITH_NMS_LIMIT, {scores, roi4, param28, param29, param30, param31, param32, param33, param34}, {scoresOut, roiOut, classesOut, batchSplitOut}); 4294 model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in4, roiOut, batchSplitOut, param35, param36, param37, param38, param39, param40, layout}, {featureMap}); 4295 // Phase 3, inputs and outputs 4296 model->identifyInputsAndOutputs( 4297 {in4}, 4298 {scoresOut, classesOut, featureMap}); 4299 assert(model->isValid()); 4300 } 4301 4302 inline bool is_ignored_zero_sized_dynamic_output_shape_nchw(int i) { 4303 static std::set<int> ignore = {}; 4304 return ignore.find(i) != ignore.end(); 4305 } 4306 4307 void CreateModel_zero_sized_dynamic_output_shape_nchw_relaxed(Model *model) { 4308 OperandType type0(Type::BOOL, {}); 4309 OperandType type14(Type::TENSOR_FLOAT32, {1, 2}); 4310 OperandType type15(Type::TENSOR_FLOAT32, {1, 8}); 4311 OperandType type16(Type::TENSOR_FLOAT32, {0}); 4312 OperandType type17(Type::TENSOR_INT32, {0}); 4313 OperandType type18(Type::TENSOR_FLOAT32, {0, 4}); 4314 OperandType type19(Type::TENSOR_INT32, {1}); 4315 OperandType type20(Type::TENSOR_FLOAT32, {1, 1, 1, 1}); 4316 OperandType type38(Type::TENSOR_FLOAT32, {0, 0, 0, 0}); 4317 OperandType type5(Type::INT32, {}); 4318 OperandType type6(Type::FLOAT32, {}); 4319 // Phase 1, operands 4320 auto scores = model->addOperand(&type14); 4321 auto roi4 = model->addOperand(&type15); 4322 auto param28 = model->addOperand(&type19); 4323 auto param29 = model->addOperand(&type6); 4324 auto param30 = model->addOperand(&type5); 4325 auto param31 = model->addOperand(&type5); 4326 auto param32 = model->addOperand(&type6); 4327 auto param33 = model->addOperand(&type6); 4328 auto param34 = model->addOperand(&type6); 4329 auto scoresOut = model->addOperand(&type16); 4330 auto roiOut = model->addOperand(&type18); 4331 auto classesOut = model->addOperand(&type17); 4332 auto batchSplitOut = model->addOperand(&type17); 4333 auto in4 = model->addOperand(&type20); 4334 auto param35 = model->addOperand(&type5); 4335 auto param36 = model->addOperand(&type5); 4336 auto param37 = model->addOperand(&type6); 4337 auto param38 = model->addOperand(&type6); 4338 auto param39 = model->addOperand(&type5); 4339 auto param40 = model->addOperand(&type5); 4340 auto layout = model->addOperand(&type0); 4341 auto featureMap = model->addOperand(&type38); 4342 // Phase 2, operations 4343 static float scores_init[] = {0.9f, 0.1f}; 4344 model->setOperandValue(scores, scores_init, sizeof(float) * 2); 4345 static float roi4_init[] = {1.0f, 1.0f, 10.0f, 10.0f, 0.0f, 0.0f, 10.0f, 10.0f}; 4346 model->setOperandValue(roi4, roi4_init, sizeof(float) * 8); 4347 static int32_t param28_init[] = {0}; 4348 model->setOperandValue(param28, param28_init, sizeof(int32_t) * 1); 4349 static float param29_init[] = {0.3f}; 4350 model->setOperandValue(param29, param29_init, sizeof(float) * 1); 4351 static int32_t param30_init[] = {-1}; 4352 model->setOperandValue(param30, param30_init, sizeof(int32_t) * 1); 4353 static int32_t param31_init[] = {0}; 4354 model->setOperandValue(param31, param31_init, sizeof(int32_t) * 1); 4355 static float param32_init[] = {0.4f}; 4356 model->setOperandValue(param32, param32_init, sizeof(float) * 1); 4357 static float param33_init[] = {1.0f}; 4358 model->setOperandValue(param33, param33_init, sizeof(float) * 1); 4359 static float param34_init[] = {0.3f}; 4360 model->setOperandValue(param34, param34_init, sizeof(float) * 1); 4361 static int32_t param35_init[] = {2}; 4362 model->setOperandValue(param35, param35_init, sizeof(int32_t) * 1); 4363 static int32_t param36_init[] = {2}; 4364 model->setOperandValue(param36, param36_init, sizeof(int32_t) * 1); 4365 static float param37_init[] = {2.0f}; 4366 model->setOperandValue(param37, param37_init, sizeof(float) * 1); 4367 static float param38_init[] = {2.0f}; 4368 model->setOperandValue(param38, param38_init, sizeof(float) * 1); 4369 static int32_t param39_init[] = {4}; 4370 model->setOperandValue(param39, param39_init, sizeof(int32_t) * 1); 4371 static int32_t param40_init[] = {4}; 4372 model->setOperandValue(param40, param40_init, sizeof(int32_t) * 1); 4373 static bool8 layout_init[] = {true}; 4374 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 4375 model->addOperation(ANEURALNETWORKS_BOX_WITH_NMS_LIMIT, {scores, roi4, param28, param29, param30, param31, param32, param33, param34}, {scoresOut, roiOut, classesOut, batchSplitOut}); 4376 model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in4, roiOut, batchSplitOut, param35, param36, param37, param38, param39, param40, layout}, {featureMap}); 4377 // Phase 3, inputs and outputs 4378 model->identifyInputsAndOutputs( 4379 {in4}, 4380 {scoresOut, classesOut, featureMap}); 4381 // Phase 4: set relaxed execution 4382 model->relaxComputationFloat32toFloat16(true); 4383 assert(model->isValid()); 4384 } 4385 4386 inline bool is_ignored_zero_sized_dynamic_output_shape_nchw_relaxed(int i) { 4387 static std::set<int> ignore = {}; 4388 return ignore.find(i) != ignore.end(); 4389 } 4390 4391 void CreateModel_zero_sized_dynamic_output_shape_nchw_quant8(Model *model) { 4392 OperandType type0(Type::BOOL, {}); 4393 OperandType type17(Type::TENSOR_INT32, {0}); 4394 OperandType type19(Type::TENSOR_INT32, {1}); 4395 OperandType type5(Type::INT32, {}); 4396 OperandType type6(Type::FLOAT32, {}); 4397 OperandType type70(Type::TENSOR_QUANT8_ASYMM, {1, 1, 1, 1}, 0.1f, 128); 4398 OperandType type71(Type::TENSOR_QUANT16_ASYMM, {1, 8}, 0.125f, 0); 4399 OperandType type72(Type::TENSOR_QUANT16_ASYMM, {0, 4}, 0.125f, 0); 4400 OperandType type73(Type::TENSOR_QUANT8_ASYMM, {1, 2}, 0.1f, 128); 4401 OperandType type74(Type::TENSOR_QUANT8_ASYMM, {0}, 0.1f, 128); 4402 OperandType type84(Type::TENSOR_QUANT8_ASYMM, {0, 0, 0, 0}, 0.1f, 128); 4403 // Phase 1, operands 4404 auto scores = model->addOperand(&type73); 4405 auto roi4 = model->addOperand(&type71); 4406 auto param28 = model->addOperand(&type19); 4407 auto param29 = model->addOperand(&type6); 4408 auto param30 = model->addOperand(&type5); 4409 auto param31 = model->addOperand(&type5); 4410 auto param32 = model->addOperand(&type6); 4411 auto param33 = model->addOperand(&type6); 4412 auto param34 = model->addOperand(&type6); 4413 auto scoresOut = model->addOperand(&type74); 4414 auto roiOut = model->addOperand(&type72); 4415 auto classesOut = model->addOperand(&type17); 4416 auto batchSplitOut = model->addOperand(&type17); 4417 auto in4 = model->addOperand(&type70); 4418 auto param35 = model->addOperand(&type5); 4419 auto param36 = model->addOperand(&type5); 4420 auto param37 = model->addOperand(&type6); 4421 auto param38 = model->addOperand(&type6); 4422 auto param39 = model->addOperand(&type5); 4423 auto param40 = model->addOperand(&type5); 4424 auto layout = model->addOperand(&type0); 4425 auto featureMap = model->addOperand(&type84); 4426 // Phase 2, operations 4427 static uint8_t scores_init[] = {137, 129}; 4428 model->setOperandValue(scores, scores_init, sizeof(uint8_t) * 2); 4429 static uint16_t roi4_init[] = {8, 8, 80, 80, 0, 0, 80, 80}; 4430 model->setOperandValue(roi4, roi4_init, sizeof(uint16_t) * 8); 4431 static int32_t param28_init[] = {0}; 4432 model->setOperandValue(param28, param28_init, sizeof(int32_t) * 1); 4433 static float param29_init[] = {0.3f}; 4434 model->setOperandValue(param29, param29_init, sizeof(float) * 1); 4435 static int32_t param30_init[] = {-1}; 4436 model->setOperandValue(param30, param30_init, sizeof(int32_t) * 1); 4437 static int32_t param31_init[] = {0}; 4438 model->setOperandValue(param31, param31_init, sizeof(int32_t) * 1); 4439 static float param32_init[] = {0.4f}; 4440 model->setOperandValue(param32, param32_init, sizeof(float) * 1); 4441 static float param33_init[] = {1.0f}; 4442 model->setOperandValue(param33, param33_init, sizeof(float) * 1); 4443 static float param34_init[] = {0.3f}; 4444 model->setOperandValue(param34, param34_init, sizeof(float) * 1); 4445 static int32_t param35_init[] = {2}; 4446 model->setOperandValue(param35, param35_init, sizeof(int32_t) * 1); 4447 static int32_t param36_init[] = {2}; 4448 model->setOperandValue(param36, param36_init, sizeof(int32_t) * 1); 4449 static float param37_init[] = {2.0f}; 4450 model->setOperandValue(param37, param37_init, sizeof(float) * 1); 4451 static float param38_init[] = {2.0f}; 4452 model->setOperandValue(param38, param38_init, sizeof(float) * 1); 4453 static int32_t param39_init[] = {4}; 4454 model->setOperandValue(param39, param39_init, sizeof(int32_t) * 1); 4455 static int32_t param40_init[] = {4}; 4456 model->setOperandValue(param40, param40_init, sizeof(int32_t) * 1); 4457 static bool8 layout_init[] = {true}; 4458 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 4459 model->addOperation(ANEURALNETWORKS_BOX_WITH_NMS_LIMIT, {scores, roi4, param28, param29, param30, param31, param32, param33, param34}, {scoresOut, roiOut, classesOut, batchSplitOut}); 4460 model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in4, roiOut, batchSplitOut, param35, param36, param37, param38, param39, param40, layout}, {featureMap}); 4461 // Phase 3, inputs and outputs 4462 model->identifyInputsAndOutputs( 4463 {in4}, 4464 {scoresOut, classesOut, featureMap}); 4465 assert(model->isValid()); 4466 } 4467 4468 inline bool is_ignored_zero_sized_dynamic_output_shape_nchw_quant8(int i) { 4469 static std::set<int> ignore = {}; 4470 return ignore.find(i) != ignore.end(); 4471 } 4472 4473 void CreateModel_zero_sized_dynamic_output_shape_nchw_float16(Model *model) { 4474 OperandType type0(Type::BOOL, {}); 4475 OperandType type17(Type::TENSOR_INT32, {0}); 4476 OperandType type19(Type::TENSOR_INT32, {1}); 4477 OperandType type30(Type::FLOAT16, {}); 4478 OperandType type40(Type::TENSOR_FLOAT16, {0, 0, 0, 0}); 4479 OperandType type5(Type::INT32, {}); 4480 OperandType type76(Type::TENSOR_FLOAT16, {1, 1, 1, 1}); 4481 OperandType type77(Type::TENSOR_FLOAT16, {1, 8}); 4482 OperandType type78(Type::TENSOR_FLOAT16, {0, 4}); 4483 OperandType type79(Type::TENSOR_FLOAT16, {1, 2}); 4484 OperandType type85(Type::TENSOR_FLOAT16, {0}); 4485 // Phase 1, operands 4486 auto scores = model->addOperand(&type79); 4487 auto roi4 = model->addOperand(&type77); 4488 auto param28 = model->addOperand(&type19); 4489 auto param29 = model->addOperand(&type30); 4490 auto param30 = model->addOperand(&type5); 4491 auto param31 = model->addOperand(&type5); 4492 auto param32 = model->addOperand(&type30); 4493 auto param33 = model->addOperand(&type30); 4494 auto param34 = model->addOperand(&type30); 4495 auto scoresOut = model->addOperand(&type85); 4496 auto roiOut = model->addOperand(&type78); 4497 auto classesOut = model->addOperand(&type17); 4498 auto batchSplitOut = model->addOperand(&type17); 4499 auto in4 = model->addOperand(&type76); 4500 auto param35 = model->addOperand(&type5); 4501 auto param36 = model->addOperand(&type5); 4502 auto param37 = model->addOperand(&type30); 4503 auto param38 = model->addOperand(&type30); 4504 auto param39 = model->addOperand(&type5); 4505 auto param40 = model->addOperand(&type5); 4506 auto layout = model->addOperand(&type0); 4507 auto featureMap = model->addOperand(&type40); 4508 // Phase 2, operations 4509 static _Float16 scores_init[] = {0.8999999761581421f, 0.10000000149011612f}; 4510 model->setOperandValue(scores, scores_init, sizeof(_Float16) * 2); 4511 static _Float16 roi4_init[] = {1.0f, 1.0f, 10.0f, 10.0f, 0.0f, 0.0f, 10.0f, 10.0f}; 4512 model->setOperandValue(roi4, roi4_init, sizeof(_Float16) * 8); 4513 static int32_t param28_init[] = {0}; 4514 model->setOperandValue(param28, param28_init, sizeof(int32_t) * 1); 4515 static _Float16 param29_init[] = {0.30000001192092896f}; 4516 model->setOperandValue(param29, param29_init, sizeof(_Float16) * 1); 4517 static int32_t param30_init[] = {-1}; 4518 model->setOperandValue(param30, param30_init, sizeof(int32_t) * 1); 4519 static int32_t param31_init[] = {0}; 4520 model->setOperandValue(param31, param31_init, sizeof(int32_t) * 1); 4521 static _Float16 param32_init[] = {0.4000000059604645f}; 4522 model->setOperandValue(param32, param32_init, sizeof(_Float16) * 1); 4523 static _Float16 param33_init[] = {1.0f}; 4524 model->setOperandValue(param33, param33_init, sizeof(_Float16) * 1); 4525 static _Float16 param34_init[] = {0.30000001192092896f}; 4526 model->setOperandValue(param34, param34_init, sizeof(_Float16) * 1); 4527 static int32_t param35_init[] = {2}; 4528 model->setOperandValue(param35, param35_init, sizeof(int32_t) * 1); 4529 static int32_t param36_init[] = {2}; 4530 model->setOperandValue(param36, param36_init, sizeof(int32_t) * 1); 4531 static _Float16 param37_init[] = {2.0f}; 4532 model->setOperandValue(param37, param37_init, sizeof(_Float16) * 1); 4533 static _Float16 param38_init[] = {2.0f}; 4534 model->setOperandValue(param38, param38_init, sizeof(_Float16) * 1); 4535 static int32_t param39_init[] = {4}; 4536 model->setOperandValue(param39, param39_init, sizeof(int32_t) * 1); 4537 static int32_t param40_init[] = {4}; 4538 model->setOperandValue(param40, param40_init, sizeof(int32_t) * 1); 4539 static bool8 layout_init[] = {true}; 4540 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 4541 model->addOperation(ANEURALNETWORKS_BOX_WITH_NMS_LIMIT, {scores, roi4, param28, param29, param30, param31, param32, param33, param34}, {scoresOut, roiOut, classesOut, batchSplitOut}); 4542 model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in4, roiOut, batchSplitOut, param35, param36, param37, param38, param39, param40, layout}, {featureMap}); 4543 // Phase 3, inputs and outputs 4544 model->identifyInputsAndOutputs( 4545 {in4}, 4546 {scoresOut, classesOut, featureMap}); 4547 assert(model->isValid()); 4548 } 4549 4550 inline bool is_ignored_zero_sized_dynamic_output_shape_nchw_float16(int i) { 4551 static std::set<int> ignore = {}; 4552 return ignore.find(i) != ignore.end(); 4553 } 4554 4555 void CreateModel_nhwc_5(Model *model) { 4556 OperandType type0(Type::BOOL, {}); 4557 OperandType type19(Type::TENSOR_INT32, {1}); 4558 OperandType type22(Type::TENSOR_FLOAT32, {1, 512, 8, 1}); 4559 OperandType type23(Type::TENSOR_FLOAT32, {1, 4}); 4560 OperandType type24(Type::TENSOR_FLOAT32, {1, 128, 4, 1}); 4561 OperandType type5(Type::INT32, {}); 4562 OperandType type6(Type::FLOAT32, {}); 4563 // Phase 1, operands 4564 auto in5 = model->addOperand(&type22); 4565 auto roi5 = model->addOperand(&type23); 4566 auto param41 = model->addOperand(&type19); 4567 auto param42 = model->addOperand(&type5); 4568 auto param43 = model->addOperand(&type5); 4569 auto param44 = model->addOperand(&type6); 4570 auto param45 = model->addOperand(&type6); 4571 auto param46 = model->addOperand(&type5); 4572 auto param47 = model->addOperand(&type5); 4573 auto layout = model->addOperand(&type0); 4574 auto out4 = model->addOperand(&type24); 4575 // Phase 2, operations 4576 static int32_t param41_init[] = {0}; 4577 model->setOperandValue(param41, param41_init, sizeof(int32_t) * 1); 4578 static int32_t param42_init[] = {128}; 4579 model->setOperandValue(param42, param42_init, sizeof(int32_t) * 1); 4580 static int32_t param43_init[] = {4}; 4581 model->setOperandValue(param43, param43_init, sizeof(int32_t) * 1); 4582 static float param44_init[] = {1.0f}; 4583 model->setOperandValue(param44, param44_init, sizeof(float) * 1); 4584 static float param45_init[] = {64.0f}; 4585 model->setOperandValue(param45, param45_init, sizeof(float) * 1); 4586 static int32_t param46_init[] = {10}; 4587 model->setOperandValue(param46, param46_init, sizeof(int32_t) * 1); 4588 static int32_t param47_init[] = {10}; 4589 model->setOperandValue(param47, param47_init, sizeof(int32_t) * 1); 4590 static bool8 layout_init[] = {false}; 4591 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 4592 model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in5, roi5, param41, param42, param43, param44, param45, param46, param47, layout}, {out4}); 4593 // Phase 3, inputs and outputs 4594 model->identifyInputsAndOutputs( 4595 {in5, roi5}, 4596 {out4}); 4597 assert(model->isValid()); 4598 } 4599 4600 inline bool is_ignored_nhwc_5(int i) { 4601 static std::set<int> ignore = {}; 4602 return ignore.find(i) != ignore.end(); 4603 } 4604 4605 void CreateModel_nhwc_relaxed_5(Model *model) { 4606 OperandType type0(Type::BOOL, {}); 4607 OperandType type19(Type::TENSOR_INT32, {1}); 4608 OperandType type22(Type::TENSOR_FLOAT32, {1, 512, 8, 1}); 4609 OperandType type23(Type::TENSOR_FLOAT32, {1, 4}); 4610 OperandType type24(Type::TENSOR_FLOAT32, {1, 128, 4, 1}); 4611 OperandType type5(Type::INT32, {}); 4612 OperandType type6(Type::FLOAT32, {}); 4613 // Phase 1, operands 4614 auto in5 = model->addOperand(&type22); 4615 auto roi5 = model->addOperand(&type23); 4616 auto param41 = model->addOperand(&type19); 4617 auto param42 = model->addOperand(&type5); 4618 auto param43 = model->addOperand(&type5); 4619 auto param44 = model->addOperand(&type6); 4620 auto param45 = model->addOperand(&type6); 4621 auto param46 = model->addOperand(&type5); 4622 auto param47 = model->addOperand(&type5); 4623 auto layout = model->addOperand(&type0); 4624 auto out4 = model->addOperand(&type24); 4625 // Phase 2, operations 4626 static int32_t param41_init[] = {0}; 4627 model->setOperandValue(param41, param41_init, sizeof(int32_t) * 1); 4628 static int32_t param42_init[] = {128}; 4629 model->setOperandValue(param42, param42_init, sizeof(int32_t) * 1); 4630 static int32_t param43_init[] = {4}; 4631 model->setOperandValue(param43, param43_init, sizeof(int32_t) * 1); 4632 static float param44_init[] = {1.0f}; 4633 model->setOperandValue(param44, param44_init, sizeof(float) * 1); 4634 static float param45_init[] = {64.0f}; 4635 model->setOperandValue(param45, param45_init, sizeof(float) * 1); 4636 static int32_t param46_init[] = {10}; 4637 model->setOperandValue(param46, param46_init, sizeof(int32_t) * 1); 4638 static int32_t param47_init[] = {10}; 4639 model->setOperandValue(param47, param47_init, sizeof(int32_t) * 1); 4640 static bool8 layout_init[] = {false}; 4641 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 4642 model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in5, roi5, param41, param42, param43, param44, param45, param46, param47, layout}, {out4}); 4643 // Phase 3, inputs and outputs 4644 model->identifyInputsAndOutputs( 4645 {in5, roi5}, 4646 {out4}); 4647 // Phase 4: set relaxed execution 4648 model->relaxComputationFloat32toFloat16(true); 4649 assert(model->isValid()); 4650 } 4651 4652 inline bool is_ignored_nhwc_relaxed_5(int i) { 4653 static std::set<int> ignore = {}; 4654 return ignore.find(i) != ignore.end(); 4655 } 4656 4657 void CreateModel_nhwc_quant8_5(Model *model) { 4658 OperandType type0(Type::BOOL, {}); 4659 OperandType type19(Type::TENSOR_INT32, {1}); 4660 OperandType type5(Type::INT32, {}); 4661 OperandType type6(Type::FLOAT32, {}); 4662 OperandType type86(Type::TENSOR_QUANT8_ASYMM, {1, 512, 8, 1}, 0.25f, 128); 4663 OperandType type87(Type::TENSOR_QUANT8_ASYMM, {1, 128, 4, 1}, 0.0625f, 128); 4664 OperandType type88(Type::TENSOR_QUANT16_ASYMM, {1, 4}, 0.125f, 0); 4665 // Phase 1, operands 4666 auto in5 = model->addOperand(&type86); 4667 auto roi5 = model->addOperand(&type88); 4668 auto param41 = model->addOperand(&type19); 4669 auto param42 = model->addOperand(&type5); 4670 auto param43 = model->addOperand(&type5); 4671 auto param44 = model->addOperand(&type6); 4672 auto param45 = model->addOperand(&type6); 4673 auto param46 = model->addOperand(&type5); 4674 auto param47 = model->addOperand(&type5); 4675 auto layout = model->addOperand(&type0); 4676 auto out4 = model->addOperand(&type87); 4677 // Phase 2, operations 4678 static int32_t param41_init[] = {0}; 4679 model->setOperandValue(param41, param41_init, sizeof(int32_t) * 1); 4680 static int32_t param42_init[] = {128}; 4681 model->setOperandValue(param42, param42_init, sizeof(int32_t) * 1); 4682 static int32_t param43_init[] = {4}; 4683 model->setOperandValue(param43, param43_init, sizeof(int32_t) * 1); 4684 static float param44_init[] = {1.0f}; 4685 model->setOperandValue(param44, param44_init, sizeof(float) * 1); 4686 static float param45_init[] = {64.0f}; 4687 model->setOperandValue(param45, param45_init, sizeof(float) * 1); 4688 static int32_t param46_init[] = {10}; 4689 model->setOperandValue(param46, param46_init, sizeof(int32_t) * 1); 4690 static int32_t param47_init[] = {10}; 4691 model->setOperandValue(param47, param47_init, sizeof(int32_t) * 1); 4692 static bool8 layout_init[] = {false}; 4693 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 4694 model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in5, roi5, param41, param42, param43, param44, param45, param46, param47, layout}, {out4}); 4695 // Phase 3, inputs and outputs 4696 model->identifyInputsAndOutputs( 4697 {in5, roi5}, 4698 {out4}); 4699 assert(model->isValid()); 4700 } 4701 4702 inline bool is_ignored_nhwc_quant8_5(int i) { 4703 static std::set<int> ignore = {}; 4704 return ignore.find(i) != ignore.end(); 4705 } 4706 4707 void CreateModel_nhwc_float16_5(Model *model) { 4708 OperandType type0(Type::BOOL, {}); 4709 OperandType type19(Type::TENSOR_INT32, {1}); 4710 OperandType type30(Type::FLOAT16, {}); 4711 OperandType type5(Type::INT32, {}); 4712 OperandType type89(Type::TENSOR_FLOAT16, {1, 512, 8, 1}); 4713 OperandType type90(Type::TENSOR_FLOAT16, {1, 128, 4, 1}); 4714 OperandType type91(Type::TENSOR_FLOAT16, {1, 4}); 4715 // Phase 1, operands 4716 auto in5 = model->addOperand(&type89); 4717 auto roi5 = model->addOperand(&type91); 4718 auto param41 = model->addOperand(&type19); 4719 auto param42 = model->addOperand(&type5); 4720 auto param43 = model->addOperand(&type5); 4721 auto param44 = model->addOperand(&type30); 4722 auto param45 = model->addOperand(&type30); 4723 auto param46 = model->addOperand(&type5); 4724 auto param47 = model->addOperand(&type5); 4725 auto layout = model->addOperand(&type0); 4726 auto out4 = model->addOperand(&type90); 4727 // Phase 2, operations 4728 static int32_t param41_init[] = {0}; 4729 model->setOperandValue(param41, param41_init, sizeof(int32_t) * 1); 4730 static int32_t param42_init[] = {128}; 4731 model->setOperandValue(param42, param42_init, sizeof(int32_t) * 1); 4732 static int32_t param43_init[] = {4}; 4733 model->setOperandValue(param43, param43_init, sizeof(int32_t) * 1); 4734 static _Float16 param44_init[] = {1.0f}; 4735 model->setOperandValue(param44, param44_init, sizeof(_Float16) * 1); 4736 static _Float16 param45_init[] = {64.0f}; 4737 model->setOperandValue(param45, param45_init, sizeof(_Float16) * 1); 4738 static int32_t param46_init[] = {10}; 4739 model->setOperandValue(param46, param46_init, sizeof(int32_t) * 1); 4740 static int32_t param47_init[] = {10}; 4741 model->setOperandValue(param47, param47_init, sizeof(int32_t) * 1); 4742 static bool8 layout_init[] = {false}; 4743 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 4744 model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in5, roi5, param41, param42, param43, param44, param45, param46, param47, layout}, {out4}); 4745 // Phase 3, inputs and outputs 4746 model->identifyInputsAndOutputs( 4747 {in5, roi5}, 4748 {out4}); 4749 assert(model->isValid()); 4750 } 4751 4752 inline bool is_ignored_nhwc_float16_5(int i) { 4753 static std::set<int> ignore = {}; 4754 return ignore.find(i) != ignore.end(); 4755 } 4756 4757 void CreateModel_nchw_5(Model *model) { 4758 OperandType type0(Type::BOOL, {}); 4759 OperandType type19(Type::TENSOR_INT32, {1}); 4760 OperandType type23(Type::TENSOR_FLOAT32, {1, 4}); 4761 OperandType type5(Type::INT32, {}); 4762 OperandType type6(Type::FLOAT32, {}); 4763 OperandType type92(Type::TENSOR_FLOAT32, {1, 1, 512, 8}); 4764 OperandType type93(Type::TENSOR_FLOAT32, {1, 1, 128, 4}); 4765 // Phase 1, operands 4766 auto in5 = model->addOperand(&type92); 4767 auto roi5 = model->addOperand(&type23); 4768 auto param41 = model->addOperand(&type19); 4769 auto param42 = model->addOperand(&type5); 4770 auto param43 = model->addOperand(&type5); 4771 auto param44 = model->addOperand(&type6); 4772 auto param45 = model->addOperand(&type6); 4773 auto param46 = model->addOperand(&type5); 4774 auto param47 = model->addOperand(&type5); 4775 auto layout = model->addOperand(&type0); 4776 auto out4 = model->addOperand(&type93); 4777 // Phase 2, operations 4778 static int32_t param41_init[] = {0}; 4779 model->setOperandValue(param41, param41_init, sizeof(int32_t) * 1); 4780 static int32_t param42_init[] = {128}; 4781 model->setOperandValue(param42, param42_init, sizeof(int32_t) * 1); 4782 static int32_t param43_init[] = {4}; 4783 model->setOperandValue(param43, param43_init, sizeof(int32_t) * 1); 4784 static float param44_init[] = {1.0f}; 4785 model->setOperandValue(param44, param44_init, sizeof(float) * 1); 4786 static float param45_init[] = {64.0f}; 4787 model->setOperandValue(param45, param45_init, sizeof(float) * 1); 4788 static int32_t param46_init[] = {10}; 4789 model->setOperandValue(param46, param46_init, sizeof(int32_t) * 1); 4790 static int32_t param47_init[] = {10}; 4791 model->setOperandValue(param47, param47_init, sizeof(int32_t) * 1); 4792 static bool8 layout_init[] = {true}; 4793 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 4794 model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in5, roi5, param41, param42, param43, param44, param45, param46, param47, layout}, {out4}); 4795 // Phase 3, inputs and outputs 4796 model->identifyInputsAndOutputs( 4797 {in5, roi5}, 4798 {out4}); 4799 assert(model->isValid()); 4800 } 4801 4802 inline bool is_ignored_nchw_5(int i) { 4803 static std::set<int> ignore = {}; 4804 return ignore.find(i) != ignore.end(); 4805 } 4806 4807 void CreateModel_nchw_relaxed_5(Model *model) { 4808 OperandType type0(Type::BOOL, {}); 4809 OperandType type19(Type::TENSOR_INT32, {1}); 4810 OperandType type23(Type::TENSOR_FLOAT32, {1, 4}); 4811 OperandType type5(Type::INT32, {}); 4812 OperandType type6(Type::FLOAT32, {}); 4813 OperandType type92(Type::TENSOR_FLOAT32, {1, 1, 512, 8}); 4814 OperandType type93(Type::TENSOR_FLOAT32, {1, 1, 128, 4}); 4815 // Phase 1, operands 4816 auto in5 = model->addOperand(&type92); 4817 auto roi5 = model->addOperand(&type23); 4818 auto param41 = model->addOperand(&type19); 4819 auto param42 = model->addOperand(&type5); 4820 auto param43 = model->addOperand(&type5); 4821 auto param44 = model->addOperand(&type6); 4822 auto param45 = model->addOperand(&type6); 4823 auto param46 = model->addOperand(&type5); 4824 auto param47 = model->addOperand(&type5); 4825 auto layout = model->addOperand(&type0); 4826 auto out4 = model->addOperand(&type93); 4827 // Phase 2, operations 4828 static int32_t param41_init[] = {0}; 4829 model->setOperandValue(param41, param41_init, sizeof(int32_t) * 1); 4830 static int32_t param42_init[] = {128}; 4831 model->setOperandValue(param42, param42_init, sizeof(int32_t) * 1); 4832 static int32_t param43_init[] = {4}; 4833 model->setOperandValue(param43, param43_init, sizeof(int32_t) * 1); 4834 static float param44_init[] = {1.0f}; 4835 model->setOperandValue(param44, param44_init, sizeof(float) * 1); 4836 static float param45_init[] = {64.0f}; 4837 model->setOperandValue(param45, param45_init, sizeof(float) * 1); 4838 static int32_t param46_init[] = {10}; 4839 model->setOperandValue(param46, param46_init, sizeof(int32_t) * 1); 4840 static int32_t param47_init[] = {10}; 4841 model->setOperandValue(param47, param47_init, sizeof(int32_t) * 1); 4842 static bool8 layout_init[] = {true}; 4843 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 4844 model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in5, roi5, param41, param42, param43, param44, param45, param46, param47, layout}, {out4}); 4845 // Phase 3, inputs and outputs 4846 model->identifyInputsAndOutputs( 4847 {in5, roi5}, 4848 {out4}); 4849 // Phase 4: set relaxed execution 4850 model->relaxComputationFloat32toFloat16(true); 4851 assert(model->isValid()); 4852 } 4853 4854 inline bool is_ignored_nchw_relaxed_5(int i) { 4855 static std::set<int> ignore = {}; 4856 return ignore.find(i) != ignore.end(); 4857 } 4858 4859 void CreateModel_nchw_quant8_5(Model *model) { 4860 OperandType type0(Type::BOOL, {}); 4861 OperandType type19(Type::TENSOR_INT32, {1}); 4862 OperandType type5(Type::INT32, {}); 4863 OperandType type6(Type::FLOAT32, {}); 4864 OperandType type88(Type::TENSOR_QUANT16_ASYMM, {1, 4}, 0.125f, 0); 4865 OperandType type94(Type::TENSOR_QUANT8_ASYMM, {1, 1, 512, 8}, 0.25f, 128); 4866 OperandType type95(Type::TENSOR_QUANT8_ASYMM, {1, 1, 128, 4}, 0.0625f, 128); 4867 // Phase 1, operands 4868 auto in5 = model->addOperand(&type94); 4869 auto roi5 = model->addOperand(&type88); 4870 auto param41 = model->addOperand(&type19); 4871 auto param42 = model->addOperand(&type5); 4872 auto param43 = model->addOperand(&type5); 4873 auto param44 = model->addOperand(&type6); 4874 auto param45 = model->addOperand(&type6); 4875 auto param46 = model->addOperand(&type5); 4876 auto param47 = model->addOperand(&type5); 4877 auto layout = model->addOperand(&type0); 4878 auto out4 = model->addOperand(&type95); 4879 // Phase 2, operations 4880 static int32_t param41_init[] = {0}; 4881 model->setOperandValue(param41, param41_init, sizeof(int32_t) * 1); 4882 static int32_t param42_init[] = {128}; 4883 model->setOperandValue(param42, param42_init, sizeof(int32_t) * 1); 4884 static int32_t param43_init[] = {4}; 4885 model->setOperandValue(param43, param43_init, sizeof(int32_t) * 1); 4886 static float param44_init[] = {1.0f}; 4887 model->setOperandValue(param44, param44_init, sizeof(float) * 1); 4888 static float param45_init[] = {64.0f}; 4889 model->setOperandValue(param45, param45_init, sizeof(float) * 1); 4890 static int32_t param46_init[] = {10}; 4891 model->setOperandValue(param46, param46_init, sizeof(int32_t) * 1); 4892 static int32_t param47_init[] = {10}; 4893 model->setOperandValue(param47, param47_init, sizeof(int32_t) * 1); 4894 static bool8 layout_init[] = {true}; 4895 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 4896 model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in5, roi5, param41, param42, param43, param44, param45, param46, param47, layout}, {out4}); 4897 // Phase 3, inputs and outputs 4898 model->identifyInputsAndOutputs( 4899 {in5, roi5}, 4900 {out4}); 4901 assert(model->isValid()); 4902 } 4903 4904 inline bool is_ignored_nchw_quant8_5(int i) { 4905 static std::set<int> ignore = {}; 4906 return ignore.find(i) != ignore.end(); 4907 } 4908 4909 void CreateModel_nchw_float16_5(Model *model) { 4910 OperandType type0(Type::BOOL, {}); 4911 OperandType type19(Type::TENSOR_INT32, {1}); 4912 OperandType type30(Type::FLOAT16, {}); 4913 OperandType type5(Type::INT32, {}); 4914 OperandType type91(Type::TENSOR_FLOAT16, {1, 4}); 4915 OperandType type96(Type::TENSOR_FLOAT16, {1, 1, 512, 8}); 4916 OperandType type97(Type::TENSOR_FLOAT16, {1, 1, 128, 4}); 4917 // Phase 1, operands 4918 auto in5 = model->addOperand(&type96); 4919 auto roi5 = model->addOperand(&type91); 4920 auto param41 = model->addOperand(&type19); 4921 auto param42 = model->addOperand(&type5); 4922 auto param43 = model->addOperand(&type5); 4923 auto param44 = model->addOperand(&type30); 4924 auto param45 = model->addOperand(&type30); 4925 auto param46 = model->addOperand(&type5); 4926 auto param47 = model->addOperand(&type5); 4927 auto layout = model->addOperand(&type0); 4928 auto out4 = model->addOperand(&type97); 4929 // Phase 2, operations 4930 static int32_t param41_init[] = {0}; 4931 model->setOperandValue(param41, param41_init, sizeof(int32_t) * 1); 4932 static int32_t param42_init[] = {128}; 4933 model->setOperandValue(param42, param42_init, sizeof(int32_t) * 1); 4934 static int32_t param43_init[] = {4}; 4935 model->setOperandValue(param43, param43_init, sizeof(int32_t) * 1); 4936 static _Float16 param44_init[] = {1.0f}; 4937 model->setOperandValue(param44, param44_init, sizeof(_Float16) * 1); 4938 static _Float16 param45_init[] = {64.0f}; 4939 model->setOperandValue(param45, param45_init, sizeof(_Float16) * 1); 4940 static int32_t param46_init[] = {10}; 4941 model->setOperandValue(param46, param46_init, sizeof(int32_t) * 1); 4942 static int32_t param47_init[] = {10}; 4943 model->setOperandValue(param47, param47_init, sizeof(int32_t) * 1); 4944 static bool8 layout_init[] = {true}; 4945 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 4946 model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in5, roi5, param41, param42, param43, param44, param45, param46, param47, layout}, {out4}); 4947 // Phase 3, inputs and outputs 4948 model->identifyInputsAndOutputs( 4949 {in5, roi5}, 4950 {out4}); 4951 assert(model->isValid()); 4952 } 4953 4954 inline bool is_ignored_nchw_float16_5(int i) { 4955 static std::set<int> ignore = {}; 4956 return ignore.find(i) != ignore.end(); 4957 } 4958 4959 void CreateModel_dynamic_output_shape_nhwc_5(Model *model) { 4960 OperandType type0(Type::BOOL, {}); 4961 OperandType type19(Type::TENSOR_INT32, {1}); 4962 OperandType type22(Type::TENSOR_FLOAT32, {1, 512, 8, 1}); 4963 OperandType type23(Type::TENSOR_FLOAT32, {1, 4}); 4964 OperandType type38(Type::TENSOR_FLOAT32, {0, 0, 0, 0}); 4965 OperandType type5(Type::INT32, {}); 4966 OperandType type6(Type::FLOAT32, {}); 4967 // Phase 1, operands 4968 auto in5 = model->addOperand(&type22); 4969 auto roi5 = model->addOperand(&type23); 4970 auto param41 = model->addOperand(&type19); 4971 auto param42 = model->addOperand(&type5); 4972 auto param43 = model->addOperand(&type5); 4973 auto param44 = model->addOperand(&type6); 4974 auto param45 = model->addOperand(&type6); 4975 auto param46 = model->addOperand(&type5); 4976 auto param47 = model->addOperand(&type5); 4977 auto layout = model->addOperand(&type0); 4978 auto out4 = model->addOperand(&type38); 4979 // Phase 2, operations 4980 static int32_t param41_init[] = {0}; 4981 model->setOperandValue(param41, param41_init, sizeof(int32_t) * 1); 4982 static int32_t param42_init[] = {128}; 4983 model->setOperandValue(param42, param42_init, sizeof(int32_t) * 1); 4984 static int32_t param43_init[] = {4}; 4985 model->setOperandValue(param43, param43_init, sizeof(int32_t) * 1); 4986 static float param44_init[] = {1.0f}; 4987 model->setOperandValue(param44, param44_init, sizeof(float) * 1); 4988 static float param45_init[] = {64.0f}; 4989 model->setOperandValue(param45, param45_init, sizeof(float) * 1); 4990 static int32_t param46_init[] = {10}; 4991 model->setOperandValue(param46, param46_init, sizeof(int32_t) * 1); 4992 static int32_t param47_init[] = {10}; 4993 model->setOperandValue(param47, param47_init, sizeof(int32_t) * 1); 4994 static bool8 layout_init[] = {false}; 4995 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 4996 model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in5, roi5, param41, param42, param43, param44, param45, param46, param47, layout}, {out4}); 4997 // Phase 3, inputs and outputs 4998 model->identifyInputsAndOutputs( 4999 {in5, roi5}, 5000 {out4}); 5001 assert(model->isValid()); 5002 } 5003 5004 inline bool is_ignored_dynamic_output_shape_nhwc_5(int i) { 5005 static std::set<int> ignore = {}; 5006 return ignore.find(i) != ignore.end(); 5007 } 5008 5009 void CreateModel_dynamic_output_shape_nhwc_relaxed_5(Model *model) { 5010 OperandType type0(Type::BOOL, {}); 5011 OperandType type19(Type::TENSOR_INT32, {1}); 5012 OperandType type22(Type::TENSOR_FLOAT32, {1, 512, 8, 1}); 5013 OperandType type23(Type::TENSOR_FLOAT32, {1, 4}); 5014 OperandType type38(Type::TENSOR_FLOAT32, {0, 0, 0, 0}); 5015 OperandType type5(Type::INT32, {}); 5016 OperandType type6(Type::FLOAT32, {}); 5017 // Phase 1, operands 5018 auto in5 = model->addOperand(&type22); 5019 auto roi5 = model->addOperand(&type23); 5020 auto param41 = model->addOperand(&type19); 5021 auto param42 = model->addOperand(&type5); 5022 auto param43 = model->addOperand(&type5); 5023 auto param44 = model->addOperand(&type6); 5024 auto param45 = model->addOperand(&type6); 5025 auto param46 = model->addOperand(&type5); 5026 auto param47 = model->addOperand(&type5); 5027 auto layout = model->addOperand(&type0); 5028 auto out4 = model->addOperand(&type38); 5029 // Phase 2, operations 5030 static int32_t param41_init[] = {0}; 5031 model->setOperandValue(param41, param41_init, sizeof(int32_t) * 1); 5032 static int32_t param42_init[] = {128}; 5033 model->setOperandValue(param42, param42_init, sizeof(int32_t) * 1); 5034 static int32_t param43_init[] = {4}; 5035 model->setOperandValue(param43, param43_init, sizeof(int32_t) * 1); 5036 static float param44_init[] = {1.0f}; 5037 model->setOperandValue(param44, param44_init, sizeof(float) * 1); 5038 static float param45_init[] = {64.0f}; 5039 model->setOperandValue(param45, param45_init, sizeof(float) * 1); 5040 static int32_t param46_init[] = {10}; 5041 model->setOperandValue(param46, param46_init, sizeof(int32_t) * 1); 5042 static int32_t param47_init[] = {10}; 5043 model->setOperandValue(param47, param47_init, sizeof(int32_t) * 1); 5044 static bool8 layout_init[] = {false}; 5045 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 5046 model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in5, roi5, param41, param42, param43, param44, param45, param46, param47, layout}, {out4}); 5047 // Phase 3, inputs and outputs 5048 model->identifyInputsAndOutputs( 5049 {in5, roi5}, 5050 {out4}); 5051 // Phase 4: set relaxed execution 5052 model->relaxComputationFloat32toFloat16(true); 5053 assert(model->isValid()); 5054 } 5055 5056 inline bool is_ignored_dynamic_output_shape_nhwc_relaxed_5(int i) { 5057 static std::set<int> ignore = {}; 5058 return ignore.find(i) != ignore.end(); 5059 } 5060 5061 void CreateModel_dynamic_output_shape_nhwc_quant8_5(Model *model) { 5062 OperandType type0(Type::BOOL, {}); 5063 OperandType type19(Type::TENSOR_INT32, {1}); 5064 OperandType type39(Type::TENSOR_QUANT8_ASYMM, {0, 0, 0, 0}, 0.0625f, 128); 5065 OperandType type5(Type::INT32, {}); 5066 OperandType type6(Type::FLOAT32, {}); 5067 OperandType type86(Type::TENSOR_QUANT8_ASYMM, {1, 512, 8, 1}, 0.25f, 128); 5068 OperandType type88(Type::TENSOR_QUANT16_ASYMM, {1, 4}, 0.125f, 0); 5069 // Phase 1, operands 5070 auto in5 = model->addOperand(&type86); 5071 auto roi5 = model->addOperand(&type88); 5072 auto param41 = model->addOperand(&type19); 5073 auto param42 = model->addOperand(&type5); 5074 auto param43 = model->addOperand(&type5); 5075 auto param44 = model->addOperand(&type6); 5076 auto param45 = model->addOperand(&type6); 5077 auto param46 = model->addOperand(&type5); 5078 auto param47 = model->addOperand(&type5); 5079 auto layout = model->addOperand(&type0); 5080 auto out4 = model->addOperand(&type39); 5081 // Phase 2, operations 5082 static int32_t param41_init[] = {0}; 5083 model->setOperandValue(param41, param41_init, sizeof(int32_t) * 1); 5084 static int32_t param42_init[] = {128}; 5085 model->setOperandValue(param42, param42_init, sizeof(int32_t) * 1); 5086 static int32_t param43_init[] = {4}; 5087 model->setOperandValue(param43, param43_init, sizeof(int32_t) * 1); 5088 static float param44_init[] = {1.0f}; 5089 model->setOperandValue(param44, param44_init, sizeof(float) * 1); 5090 static float param45_init[] = {64.0f}; 5091 model->setOperandValue(param45, param45_init, sizeof(float) * 1); 5092 static int32_t param46_init[] = {10}; 5093 model->setOperandValue(param46, param46_init, sizeof(int32_t) * 1); 5094 static int32_t param47_init[] = {10}; 5095 model->setOperandValue(param47, param47_init, sizeof(int32_t) * 1); 5096 static bool8 layout_init[] = {false}; 5097 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 5098 model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in5, roi5, param41, param42, param43, param44, param45, param46, param47, layout}, {out4}); 5099 // Phase 3, inputs and outputs 5100 model->identifyInputsAndOutputs( 5101 {in5, roi5}, 5102 {out4}); 5103 assert(model->isValid()); 5104 } 5105 5106 inline bool is_ignored_dynamic_output_shape_nhwc_quant8_5(int i) { 5107 static std::set<int> ignore = {}; 5108 return ignore.find(i) != ignore.end(); 5109 } 5110 5111 void CreateModel_dynamic_output_shape_nhwc_float16_5(Model *model) { 5112 OperandType type0(Type::BOOL, {}); 5113 OperandType type19(Type::TENSOR_INT32, {1}); 5114 OperandType type30(Type::FLOAT16, {}); 5115 OperandType type40(Type::TENSOR_FLOAT16, {0, 0, 0, 0}); 5116 OperandType type5(Type::INT32, {}); 5117 OperandType type89(Type::TENSOR_FLOAT16, {1, 512, 8, 1}); 5118 OperandType type91(Type::TENSOR_FLOAT16, {1, 4}); 5119 // Phase 1, operands 5120 auto in5 = model->addOperand(&type89); 5121 auto roi5 = model->addOperand(&type91); 5122 auto param41 = model->addOperand(&type19); 5123 auto param42 = model->addOperand(&type5); 5124 auto param43 = model->addOperand(&type5); 5125 auto param44 = model->addOperand(&type30); 5126 auto param45 = model->addOperand(&type30); 5127 auto param46 = model->addOperand(&type5); 5128 auto param47 = model->addOperand(&type5); 5129 auto layout = model->addOperand(&type0); 5130 auto out4 = model->addOperand(&type40); 5131 // Phase 2, operations 5132 static int32_t param41_init[] = {0}; 5133 model->setOperandValue(param41, param41_init, sizeof(int32_t) * 1); 5134 static int32_t param42_init[] = {128}; 5135 model->setOperandValue(param42, param42_init, sizeof(int32_t) * 1); 5136 static int32_t param43_init[] = {4}; 5137 model->setOperandValue(param43, param43_init, sizeof(int32_t) * 1); 5138 static _Float16 param44_init[] = {1.0f}; 5139 model->setOperandValue(param44, param44_init, sizeof(_Float16) * 1); 5140 static _Float16 param45_init[] = {64.0f}; 5141 model->setOperandValue(param45, param45_init, sizeof(_Float16) * 1); 5142 static int32_t param46_init[] = {10}; 5143 model->setOperandValue(param46, param46_init, sizeof(int32_t) * 1); 5144 static int32_t param47_init[] = {10}; 5145 model->setOperandValue(param47, param47_init, sizeof(int32_t) * 1); 5146 static bool8 layout_init[] = {false}; 5147 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 5148 model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in5, roi5, param41, param42, param43, param44, param45, param46, param47, layout}, {out4}); 5149 // Phase 3, inputs and outputs 5150 model->identifyInputsAndOutputs( 5151 {in5, roi5}, 5152 {out4}); 5153 assert(model->isValid()); 5154 } 5155 5156 inline bool is_ignored_dynamic_output_shape_nhwc_float16_5(int i) { 5157 static std::set<int> ignore = {}; 5158 return ignore.find(i) != ignore.end(); 5159 } 5160 5161 void CreateModel_dynamic_output_shape_nchw_5(Model *model) { 5162 OperandType type0(Type::BOOL, {}); 5163 OperandType type19(Type::TENSOR_INT32, {1}); 5164 OperandType type23(Type::TENSOR_FLOAT32, {1, 4}); 5165 OperandType type38(Type::TENSOR_FLOAT32, {0, 0, 0, 0}); 5166 OperandType type5(Type::INT32, {}); 5167 OperandType type6(Type::FLOAT32, {}); 5168 OperandType type92(Type::TENSOR_FLOAT32, {1, 1, 512, 8}); 5169 // Phase 1, operands 5170 auto in5 = model->addOperand(&type92); 5171 auto roi5 = model->addOperand(&type23); 5172 auto param41 = model->addOperand(&type19); 5173 auto param42 = model->addOperand(&type5); 5174 auto param43 = model->addOperand(&type5); 5175 auto param44 = model->addOperand(&type6); 5176 auto param45 = model->addOperand(&type6); 5177 auto param46 = model->addOperand(&type5); 5178 auto param47 = model->addOperand(&type5); 5179 auto layout = model->addOperand(&type0); 5180 auto out4 = model->addOperand(&type38); 5181 // Phase 2, operations 5182 static int32_t param41_init[] = {0}; 5183 model->setOperandValue(param41, param41_init, sizeof(int32_t) * 1); 5184 static int32_t param42_init[] = {128}; 5185 model->setOperandValue(param42, param42_init, sizeof(int32_t) * 1); 5186 static int32_t param43_init[] = {4}; 5187 model->setOperandValue(param43, param43_init, sizeof(int32_t) * 1); 5188 static float param44_init[] = {1.0f}; 5189 model->setOperandValue(param44, param44_init, sizeof(float) * 1); 5190 static float param45_init[] = {64.0f}; 5191 model->setOperandValue(param45, param45_init, sizeof(float) * 1); 5192 static int32_t param46_init[] = {10}; 5193 model->setOperandValue(param46, param46_init, sizeof(int32_t) * 1); 5194 static int32_t param47_init[] = {10}; 5195 model->setOperandValue(param47, param47_init, sizeof(int32_t) * 1); 5196 static bool8 layout_init[] = {true}; 5197 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 5198 model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in5, roi5, param41, param42, param43, param44, param45, param46, param47, layout}, {out4}); 5199 // Phase 3, inputs and outputs 5200 model->identifyInputsAndOutputs( 5201 {in5, roi5}, 5202 {out4}); 5203 assert(model->isValid()); 5204 } 5205 5206 inline bool is_ignored_dynamic_output_shape_nchw_5(int i) { 5207 static std::set<int> ignore = {}; 5208 return ignore.find(i) != ignore.end(); 5209 } 5210 5211 void CreateModel_dynamic_output_shape_nchw_relaxed_5(Model *model) { 5212 OperandType type0(Type::BOOL, {}); 5213 OperandType type19(Type::TENSOR_INT32, {1}); 5214 OperandType type23(Type::TENSOR_FLOAT32, {1, 4}); 5215 OperandType type38(Type::TENSOR_FLOAT32, {0, 0, 0, 0}); 5216 OperandType type5(Type::INT32, {}); 5217 OperandType type6(Type::FLOAT32, {}); 5218 OperandType type92(Type::TENSOR_FLOAT32, {1, 1, 512, 8}); 5219 // Phase 1, operands 5220 auto in5 = model->addOperand(&type92); 5221 auto roi5 = model->addOperand(&type23); 5222 auto param41 = model->addOperand(&type19); 5223 auto param42 = model->addOperand(&type5); 5224 auto param43 = model->addOperand(&type5); 5225 auto param44 = model->addOperand(&type6); 5226 auto param45 = model->addOperand(&type6); 5227 auto param46 = model->addOperand(&type5); 5228 auto param47 = model->addOperand(&type5); 5229 auto layout = model->addOperand(&type0); 5230 auto out4 = model->addOperand(&type38); 5231 // Phase 2, operations 5232 static int32_t param41_init[] = {0}; 5233 model->setOperandValue(param41, param41_init, sizeof(int32_t) * 1); 5234 static int32_t param42_init[] = {128}; 5235 model->setOperandValue(param42, param42_init, sizeof(int32_t) * 1); 5236 static int32_t param43_init[] = {4}; 5237 model->setOperandValue(param43, param43_init, sizeof(int32_t) * 1); 5238 static float param44_init[] = {1.0f}; 5239 model->setOperandValue(param44, param44_init, sizeof(float) * 1); 5240 static float param45_init[] = {64.0f}; 5241 model->setOperandValue(param45, param45_init, sizeof(float) * 1); 5242 static int32_t param46_init[] = {10}; 5243 model->setOperandValue(param46, param46_init, sizeof(int32_t) * 1); 5244 static int32_t param47_init[] = {10}; 5245 model->setOperandValue(param47, param47_init, sizeof(int32_t) * 1); 5246 static bool8 layout_init[] = {true}; 5247 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 5248 model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in5, roi5, param41, param42, param43, param44, param45, param46, param47, layout}, {out4}); 5249 // Phase 3, inputs and outputs 5250 model->identifyInputsAndOutputs( 5251 {in5, roi5}, 5252 {out4}); 5253 // Phase 4: set relaxed execution 5254 model->relaxComputationFloat32toFloat16(true); 5255 assert(model->isValid()); 5256 } 5257 5258 inline bool is_ignored_dynamic_output_shape_nchw_relaxed_5(int i) { 5259 static std::set<int> ignore = {}; 5260 return ignore.find(i) != ignore.end(); 5261 } 5262 5263 void CreateModel_dynamic_output_shape_nchw_quant8_5(Model *model) { 5264 OperandType type0(Type::BOOL, {}); 5265 OperandType type19(Type::TENSOR_INT32, {1}); 5266 OperandType type39(Type::TENSOR_QUANT8_ASYMM, {0, 0, 0, 0}, 0.0625f, 128); 5267 OperandType type5(Type::INT32, {}); 5268 OperandType type6(Type::FLOAT32, {}); 5269 OperandType type88(Type::TENSOR_QUANT16_ASYMM, {1, 4}, 0.125f, 0); 5270 OperandType type94(Type::TENSOR_QUANT8_ASYMM, {1, 1, 512, 8}, 0.25f, 128); 5271 // Phase 1, operands 5272 auto in5 = model->addOperand(&type94); 5273 auto roi5 = model->addOperand(&type88); 5274 auto param41 = model->addOperand(&type19); 5275 auto param42 = model->addOperand(&type5); 5276 auto param43 = model->addOperand(&type5); 5277 auto param44 = model->addOperand(&type6); 5278 auto param45 = model->addOperand(&type6); 5279 auto param46 = model->addOperand(&type5); 5280 auto param47 = model->addOperand(&type5); 5281 auto layout = model->addOperand(&type0); 5282 auto out4 = model->addOperand(&type39); 5283 // Phase 2, operations 5284 static int32_t param41_init[] = {0}; 5285 model->setOperandValue(param41, param41_init, sizeof(int32_t) * 1); 5286 static int32_t param42_init[] = {128}; 5287 model->setOperandValue(param42, param42_init, sizeof(int32_t) * 1); 5288 static int32_t param43_init[] = {4}; 5289 model->setOperandValue(param43, param43_init, sizeof(int32_t) * 1); 5290 static float param44_init[] = {1.0f}; 5291 model->setOperandValue(param44, param44_init, sizeof(float) * 1); 5292 static float param45_init[] = {64.0f}; 5293 model->setOperandValue(param45, param45_init, sizeof(float) * 1); 5294 static int32_t param46_init[] = {10}; 5295 model->setOperandValue(param46, param46_init, sizeof(int32_t) * 1); 5296 static int32_t param47_init[] = {10}; 5297 model->setOperandValue(param47, param47_init, sizeof(int32_t) * 1); 5298 static bool8 layout_init[] = {true}; 5299 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 5300 model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in5, roi5, param41, param42, param43, param44, param45, param46, param47, layout}, {out4}); 5301 // Phase 3, inputs and outputs 5302 model->identifyInputsAndOutputs( 5303 {in5, roi5}, 5304 {out4}); 5305 assert(model->isValid()); 5306 } 5307 5308 inline bool is_ignored_dynamic_output_shape_nchw_quant8_5(int i) { 5309 static std::set<int> ignore = {}; 5310 return ignore.find(i) != ignore.end(); 5311 } 5312 5313 void CreateModel_dynamic_output_shape_nchw_float16_5(Model *model) { 5314 OperandType type0(Type::BOOL, {}); 5315 OperandType type19(Type::TENSOR_INT32, {1}); 5316 OperandType type30(Type::FLOAT16, {}); 5317 OperandType type40(Type::TENSOR_FLOAT16, {0, 0, 0, 0}); 5318 OperandType type5(Type::INT32, {}); 5319 OperandType type91(Type::TENSOR_FLOAT16, {1, 4}); 5320 OperandType type96(Type::TENSOR_FLOAT16, {1, 1, 512, 8}); 5321 // Phase 1, operands 5322 auto in5 = model->addOperand(&type96); 5323 auto roi5 = model->addOperand(&type91); 5324 auto param41 = model->addOperand(&type19); 5325 auto param42 = model->addOperand(&type5); 5326 auto param43 = model->addOperand(&type5); 5327 auto param44 = model->addOperand(&type30); 5328 auto param45 = model->addOperand(&type30); 5329 auto param46 = model->addOperand(&type5); 5330 auto param47 = model->addOperand(&type5); 5331 auto layout = model->addOperand(&type0); 5332 auto out4 = model->addOperand(&type40); 5333 // Phase 2, operations 5334 static int32_t param41_init[] = {0}; 5335 model->setOperandValue(param41, param41_init, sizeof(int32_t) * 1); 5336 static int32_t param42_init[] = {128}; 5337 model->setOperandValue(param42, param42_init, sizeof(int32_t) * 1); 5338 static int32_t param43_init[] = {4}; 5339 model->setOperandValue(param43, param43_init, sizeof(int32_t) * 1); 5340 static _Float16 param44_init[] = {1.0f}; 5341 model->setOperandValue(param44, param44_init, sizeof(_Float16) * 1); 5342 static _Float16 param45_init[] = {64.0f}; 5343 model->setOperandValue(param45, param45_init, sizeof(_Float16) * 1); 5344 static int32_t param46_init[] = {10}; 5345 model->setOperandValue(param46, param46_init, sizeof(int32_t) * 1); 5346 static int32_t param47_init[] = {10}; 5347 model->setOperandValue(param47, param47_init, sizeof(int32_t) * 1); 5348 static bool8 layout_init[] = {true}; 5349 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 5350 model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in5, roi5, param41, param42, param43, param44, param45, param46, param47, layout}, {out4}); 5351 // Phase 3, inputs and outputs 5352 model->identifyInputsAndOutputs( 5353 {in5, roi5}, 5354 {out4}); 5355 assert(model->isValid()); 5356 } 5357 5358 inline bool is_ignored_dynamic_output_shape_nchw_float16_5(int i) { 5359 static std::set<int> ignore = {}; 5360 return ignore.find(i) != ignore.end(); 5361 } 5362 5363