1 // clang-format off 2 // Generated file (from: conv2d_per_channel.mod.py). Do not edit 3 void CreateModel(Model *model) { 4 OperandType type0(Type::TENSOR_QUANT8_ASYMM, {1, 3, 1, 2}, 0.5f, 128); 5 OperandType type1(Type::TENSOR_QUANT8_SYMM_PER_CHANNEL, {3, 1, 1, 2}, 0.0f, 0, SymmPerChannelQuantParams({0.5f, 0.75f, 1.0f},0)); 6 OperandType type2(Type::TENSOR_INT32, {3}); 7 OperandType type3(Type::TENSOR_QUANT8_ASYMM, {1, 3, 1, 3}, 1.0f, 128); 8 OperandType type4(Type::INT32, {}); 9 // Phase 1, operands 10 auto op1 = model->addOperand(&type0); 11 auto op2 = model->addOperand(&type1); 12 auto op3 = model->addOperand(&type2); 13 auto param = model->addOperand(&type4); 14 auto param1 = model->addOperand(&type4); 15 auto param2 = model->addOperand(&type4); 16 auto param3 = model->addOperand(&type4); 17 auto param4 = model->addOperand(&type4); 18 auto param5 = model->addOperand(&type4); 19 auto param6 = model->addOperand(&type4); 20 auto op4 = model->addOperand(&type3); 21 // Phase 2, operations 22 static int8_t op2_init[] = {1, 2, 1, 2, 1, 2}; 23 model->setOperandValue(op2, op2_init, sizeof(int8_t) * 6); 24 static int32_t op3_init[] = {4, 4, 4}; 25 model->setOperandValue(op3, op3_init, sizeof(int32_t) * 3); 26 static int32_t param_init[] = {0}; 27 model->setOperandValue(param, param_init, sizeof(int32_t) * 1); 28 static int32_t param1_init[] = {0}; 29 model->setOperandValue(param1, param1_init, sizeof(int32_t) * 1); 30 static int32_t param2_init[] = {0}; 31 model->setOperandValue(param2, param2_init, sizeof(int32_t) * 1); 32 static int32_t param3_init[] = {0}; 33 model->setOperandValue(param3, param3_init, sizeof(int32_t) * 1); 34 static int32_t param4_init[] = {1}; 35 model->setOperandValue(param4, param4_init, sizeof(int32_t) * 1); 36 static int32_t param5_init[] = {1}; 37 model->setOperandValue(param5, param5_init, sizeof(int32_t) * 1); 38 static int32_t param6_init[] = {0}; 39 model->setOperandValue(param6, param6_init, sizeof(int32_t) * 1); 40 model->addOperation(ANEURALNETWORKS_CONV_2D, {op1, op2, op3, param, param1, param2, param3, param4, param5, param6}, {op4}); 41 // Phase 3, inputs and outputs 42 model->identifyInputsAndOutputs( 43 {op1}, 44 {op4}); 45 assert(model->isValid()); 46 } 47 48 inline bool is_ignored(int i) { 49 static std::set<int> ignore = {}; 50 return ignore.find(i) != ignore.end(); 51 } 52 53 void CreateModel_weight_as_input(Model *model) { 54 OperandType type0(Type::TENSOR_QUANT8_ASYMM, {1, 3, 1, 2}, 0.5f, 128); 55 OperandType type18(Type::TENSOR_QUANT8_SYMM_PER_CHANNEL, {3, 1, 1, 2}, 0.0f, 0, SymmPerChannelQuantParams({0.5f, 0.75f, 1.0f},0)); 56 OperandType type2(Type::TENSOR_INT32, {3}); 57 OperandType type3(Type::TENSOR_QUANT8_ASYMM, {1, 3, 1, 3}, 1.0f, 128); 58 OperandType type4(Type::INT32, {}); 59 // Phase 1, operands 60 auto op1 = model->addOperand(&type0); 61 auto op2 = model->addOperand(&type18); 62 auto op3 = model->addOperand(&type2); 63 auto param = model->addOperand(&type4); 64 auto param1 = model->addOperand(&type4); 65 auto param2 = model->addOperand(&type4); 66 auto param3 = model->addOperand(&type4); 67 auto param4 = model->addOperand(&type4); 68 auto param5 = model->addOperand(&type4); 69 auto param6 = model->addOperand(&type4); 70 auto op4 = model->addOperand(&type3); 71 // Phase 2, operations 72 static int32_t param_init[] = {0}; 73 model->setOperandValue(param, param_init, sizeof(int32_t) * 1); 74 static int32_t param1_init[] = {0}; 75 model->setOperandValue(param1, param1_init, sizeof(int32_t) * 1); 76 static int32_t param2_init[] = {0}; 77 model->setOperandValue(param2, param2_init, sizeof(int32_t) * 1); 78 static int32_t param3_init[] = {0}; 79 model->setOperandValue(param3, param3_init, sizeof(int32_t) * 1); 80 static int32_t param4_init[] = {1}; 81 model->setOperandValue(param4, param4_init, sizeof(int32_t) * 1); 82 static int32_t param5_init[] = {1}; 83 model->setOperandValue(param5, param5_init, sizeof(int32_t) * 1); 84 static int32_t param6_init[] = {0}; 85 model->setOperandValue(param6, param6_init, sizeof(int32_t) * 1); 86 model->addOperation(ANEURALNETWORKS_CONV_2D, {op1, op2, op3, param, param1, param2, param3, param4, param5, param6}, {op4}); 87 // Phase 3, inputs and outputs 88 model->identifyInputsAndOutputs( 89 {op1, op2, op3}, 90 {op4}); 91 assert(model->isValid()); 92 } 93 94 inline bool is_ignored_weight_as_input(int i) { 95 static std::set<int> ignore = {}; 96 return ignore.find(i) != ignore.end(); 97 } 98 99 void CreateModel_dynamic_output_shape(Model *model) { 100 OperandType type0(Type::TENSOR_QUANT8_ASYMM, {1, 3, 1, 2}, 0.5f, 128); 101 OperandType type1(Type::TENSOR_QUANT8_SYMM_PER_CHANNEL, {3, 1, 1, 2}, 0.0f, 0, SymmPerChannelQuantParams({0.5f, 0.75f, 1.0f},0)); 102 OperandType type19(Type::TENSOR_QUANT8_ASYMM, {0, 0, 0, 0}, 1.0f, 128); 103 OperandType type2(Type::TENSOR_INT32, {3}); 104 OperandType type4(Type::INT32, {}); 105 // Phase 1, operands 106 auto op1 = model->addOperand(&type0); 107 auto op2 = model->addOperand(&type1); 108 auto op3 = model->addOperand(&type2); 109 auto param = model->addOperand(&type4); 110 auto param1 = model->addOperand(&type4); 111 auto param2 = model->addOperand(&type4); 112 auto param3 = model->addOperand(&type4); 113 auto param4 = model->addOperand(&type4); 114 auto param5 = model->addOperand(&type4); 115 auto param6 = model->addOperand(&type4); 116 auto op4 = model->addOperand(&type19); 117 // Phase 2, operations 118 static int8_t op2_init[] = {1, 2, 1, 2, 1, 2}; 119 model->setOperandValue(op2, op2_init, sizeof(int8_t) * 6); 120 static int32_t op3_init[] = {4, 4, 4}; 121 model->setOperandValue(op3, op3_init, sizeof(int32_t) * 3); 122 static int32_t param_init[] = {0}; 123 model->setOperandValue(param, param_init, sizeof(int32_t) * 1); 124 static int32_t param1_init[] = {0}; 125 model->setOperandValue(param1, param1_init, sizeof(int32_t) * 1); 126 static int32_t param2_init[] = {0}; 127 model->setOperandValue(param2, param2_init, sizeof(int32_t) * 1); 128 static int32_t param3_init[] = {0}; 129 model->setOperandValue(param3, param3_init, sizeof(int32_t) * 1); 130 static int32_t param4_init[] = {1}; 131 model->setOperandValue(param4, param4_init, sizeof(int32_t) * 1); 132 static int32_t param5_init[] = {1}; 133 model->setOperandValue(param5, param5_init, sizeof(int32_t) * 1); 134 static int32_t param6_init[] = {0}; 135 model->setOperandValue(param6, param6_init, sizeof(int32_t) * 1); 136 model->addOperation(ANEURALNETWORKS_CONV_2D, {op1, op2, op3, param, param1, param2, param3, param4, param5, param6}, {op4}); 137 // Phase 3, inputs and outputs 138 model->identifyInputsAndOutputs( 139 {op1}, 140 {op4}); 141 assert(model->isValid()); 142 } 143 144 inline bool is_ignored_dynamic_output_shape(int i) { 145 static std::set<int> ignore = {}; 146 return ignore.find(i) != ignore.end(); 147 } 148 149 void CreateModel_dynamic_output_shape_weight_as_input(Model *model) { 150 OperandType type0(Type::TENSOR_QUANT8_ASYMM, {1, 3, 1, 2}, 0.5f, 128); 151 OperandType type19(Type::TENSOR_QUANT8_ASYMM, {0, 0, 0, 0}, 1.0f, 128); 152 OperandType type2(Type::TENSOR_INT32, {3}); 153 OperandType type20(Type::TENSOR_QUANT8_SYMM_PER_CHANNEL, {3, 1, 1, 2}, 0.0f, 0, SymmPerChannelQuantParams({0.5f, 0.75f, 1.0f},0)); 154 OperandType type4(Type::INT32, {}); 155 // Phase 1, operands 156 auto op1 = model->addOperand(&type0); 157 auto op2 = model->addOperand(&type20); 158 auto op3 = model->addOperand(&type2); 159 auto param = model->addOperand(&type4); 160 auto param1 = model->addOperand(&type4); 161 auto param2 = model->addOperand(&type4); 162 auto param3 = model->addOperand(&type4); 163 auto param4 = model->addOperand(&type4); 164 auto param5 = model->addOperand(&type4); 165 auto param6 = model->addOperand(&type4); 166 auto op4 = model->addOperand(&type19); 167 // Phase 2, operations 168 static int32_t param_init[] = {0}; 169 model->setOperandValue(param, param_init, sizeof(int32_t) * 1); 170 static int32_t param1_init[] = {0}; 171 model->setOperandValue(param1, param1_init, sizeof(int32_t) * 1); 172 static int32_t param2_init[] = {0}; 173 model->setOperandValue(param2, param2_init, sizeof(int32_t) * 1); 174 static int32_t param3_init[] = {0}; 175 model->setOperandValue(param3, param3_init, sizeof(int32_t) * 1); 176 static int32_t param4_init[] = {1}; 177 model->setOperandValue(param4, param4_init, sizeof(int32_t) * 1); 178 static int32_t param5_init[] = {1}; 179 model->setOperandValue(param5, param5_init, sizeof(int32_t) * 1); 180 static int32_t param6_init[] = {0}; 181 model->setOperandValue(param6, param6_init, sizeof(int32_t) * 1); 182 model->addOperation(ANEURALNETWORKS_CONV_2D, {op1, op2, op3, param, param1, param2, param3, param4, param5, param6}, {op4}); 183 // Phase 3, inputs and outputs 184 model->identifyInputsAndOutputs( 185 {op1, op2, op3}, 186 {op4}); 187 assert(model->isValid()); 188 } 189 190 inline bool is_ignored_dynamic_output_shape_weight_as_input(int i) { 191 static std::set<int> ignore = {}; 192 return ignore.find(i) != ignore.end(); 193 } 194 195 void CreateModel_layouts_nhwc(Model *model) { 196 OperandType type0(Type::TENSOR_QUANT8_ASYMM, {1, 3, 1, 2}, 0.5f, 128); 197 OperandType type2(Type::TENSOR_INT32, {3}); 198 OperandType type3(Type::TENSOR_QUANT8_ASYMM, {1, 3, 1, 3}, 1.0f, 128); 199 OperandType type4(Type::INT32, {}); 200 OperandType type5(Type::BOOL, {}); 201 OperandType type6(Type::TENSOR_QUANT8_SYMM_PER_CHANNEL, {3, 1, 1, 2}, 0.0f, 0, SymmPerChannelQuantParams({0.5f, 0.75f, 1.0f},0)); 202 // Phase 1, operands 203 auto op11 = model->addOperand(&type0); 204 auto op21 = model->addOperand(&type6); 205 auto op31 = model->addOperand(&type2); 206 auto param7 = model->addOperand(&type4); 207 auto param8 = model->addOperand(&type4); 208 auto param9 = model->addOperand(&type4); 209 auto param10 = model->addOperand(&type4); 210 auto param11 = model->addOperand(&type4); 211 auto param12 = model->addOperand(&type4); 212 auto param13 = model->addOperand(&type4); 213 auto layout = model->addOperand(&type5); 214 auto op41 = model->addOperand(&type3); 215 // Phase 2, operations 216 static int8_t op21_init[] = {1, 2, 1, 2, 1, 2}; 217 model->setOperandValue(op21, op21_init, sizeof(int8_t) * 6); 218 static int32_t op31_init[] = {4, 4, 4}; 219 model->setOperandValue(op31, op31_init, sizeof(int32_t) * 3); 220 static int32_t param7_init[] = {0}; 221 model->setOperandValue(param7, param7_init, sizeof(int32_t) * 1); 222 static int32_t param8_init[] = {0}; 223 model->setOperandValue(param8, param8_init, sizeof(int32_t) * 1); 224 static int32_t param9_init[] = {0}; 225 model->setOperandValue(param9, param9_init, sizeof(int32_t) * 1); 226 static int32_t param10_init[] = {0}; 227 model->setOperandValue(param10, param10_init, sizeof(int32_t) * 1); 228 static int32_t param11_init[] = {1}; 229 model->setOperandValue(param11, param11_init, sizeof(int32_t) * 1); 230 static int32_t param12_init[] = {1}; 231 model->setOperandValue(param12, param12_init, sizeof(int32_t) * 1); 232 static int32_t param13_init[] = {0}; 233 model->setOperandValue(param13, param13_init, sizeof(int32_t) * 1); 234 static bool8 layout_init[] = {false}; 235 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 236 model->addOperation(ANEURALNETWORKS_CONV_2D, {op11, op21, op31, param7, param8, param9, param10, param11, param12, param13, layout}, {op41}); 237 // Phase 3, inputs and outputs 238 model->identifyInputsAndOutputs( 239 {op11}, 240 {op41}); 241 assert(model->isValid()); 242 } 243 244 inline bool is_ignored_layouts_nhwc(int i) { 245 static std::set<int> ignore = {}; 246 return ignore.find(i) != ignore.end(); 247 } 248 249 void CreateModel_layouts_nhwc_weight_as_input(Model *model) { 250 OperandType type0(Type::TENSOR_QUANT8_ASYMM, {1, 3, 1, 2}, 0.5f, 128); 251 OperandType type2(Type::TENSOR_INT32, {3}); 252 OperandType type21(Type::TENSOR_QUANT8_SYMM_PER_CHANNEL, {3, 1, 1, 2}, 0.0f, 0, SymmPerChannelQuantParams({0.5f, 0.75f, 1.0f},0)); 253 OperandType type3(Type::TENSOR_QUANT8_ASYMM, {1, 3, 1, 3}, 1.0f, 128); 254 OperandType type4(Type::INT32, {}); 255 OperandType type5(Type::BOOL, {}); 256 // Phase 1, operands 257 auto op11 = model->addOperand(&type0); 258 auto op21 = model->addOperand(&type21); 259 auto op31 = model->addOperand(&type2); 260 auto param7 = model->addOperand(&type4); 261 auto param8 = model->addOperand(&type4); 262 auto param9 = model->addOperand(&type4); 263 auto param10 = model->addOperand(&type4); 264 auto param11 = model->addOperand(&type4); 265 auto param12 = model->addOperand(&type4); 266 auto param13 = model->addOperand(&type4); 267 auto layout = model->addOperand(&type5); 268 auto op41 = model->addOperand(&type3); 269 // Phase 2, operations 270 static int32_t param7_init[] = {0}; 271 model->setOperandValue(param7, param7_init, sizeof(int32_t) * 1); 272 static int32_t param8_init[] = {0}; 273 model->setOperandValue(param8, param8_init, sizeof(int32_t) * 1); 274 static int32_t param9_init[] = {0}; 275 model->setOperandValue(param9, param9_init, sizeof(int32_t) * 1); 276 static int32_t param10_init[] = {0}; 277 model->setOperandValue(param10, param10_init, sizeof(int32_t) * 1); 278 static int32_t param11_init[] = {1}; 279 model->setOperandValue(param11, param11_init, sizeof(int32_t) * 1); 280 static int32_t param12_init[] = {1}; 281 model->setOperandValue(param12, param12_init, sizeof(int32_t) * 1); 282 static int32_t param13_init[] = {0}; 283 model->setOperandValue(param13, param13_init, sizeof(int32_t) * 1); 284 static bool8 layout_init[] = {false}; 285 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 286 model->addOperation(ANEURALNETWORKS_CONV_2D, {op11, op21, op31, param7, param8, param9, param10, param11, param12, param13, layout}, {op41}); 287 // Phase 3, inputs and outputs 288 model->identifyInputsAndOutputs( 289 {op11, op21, op31}, 290 {op41}); 291 assert(model->isValid()); 292 } 293 294 inline bool is_ignored_layouts_nhwc_weight_as_input(int i) { 295 static std::set<int> ignore = {}; 296 return ignore.find(i) != ignore.end(); 297 } 298 299 void CreateModel_layouts_nchw(Model *model) { 300 OperandType type2(Type::TENSOR_INT32, {3}); 301 OperandType type22(Type::TENSOR_QUANT8_ASYMM, {1, 2, 3, 1}, 0.5f, 128); 302 OperandType type23(Type::TENSOR_QUANT8_ASYMM, {1, 3, 3, 1}, 1.0f, 128); 303 OperandType type4(Type::INT32, {}); 304 OperandType type5(Type::BOOL, {}); 305 OperandType type6(Type::TENSOR_QUANT8_SYMM_PER_CHANNEL, {3, 1, 1, 2}, 0.0f, 0, SymmPerChannelQuantParams({0.5f, 0.75f, 1.0f},0)); 306 // Phase 1, operands 307 auto op11 = model->addOperand(&type22); 308 auto op21 = model->addOperand(&type6); 309 auto op31 = model->addOperand(&type2); 310 auto param7 = model->addOperand(&type4); 311 auto param8 = model->addOperand(&type4); 312 auto param9 = model->addOperand(&type4); 313 auto param10 = model->addOperand(&type4); 314 auto param11 = model->addOperand(&type4); 315 auto param12 = model->addOperand(&type4); 316 auto param13 = model->addOperand(&type4); 317 auto layout = model->addOperand(&type5); 318 auto op41 = model->addOperand(&type23); 319 // Phase 2, operations 320 static int8_t op21_init[] = {1, 2, 1, 2, 1, 2}; 321 model->setOperandValue(op21, op21_init, sizeof(int8_t) * 6); 322 static int32_t op31_init[] = {4, 4, 4}; 323 model->setOperandValue(op31, op31_init, sizeof(int32_t) * 3); 324 static int32_t param7_init[] = {0}; 325 model->setOperandValue(param7, param7_init, sizeof(int32_t) * 1); 326 static int32_t param8_init[] = {0}; 327 model->setOperandValue(param8, param8_init, sizeof(int32_t) * 1); 328 static int32_t param9_init[] = {0}; 329 model->setOperandValue(param9, param9_init, sizeof(int32_t) * 1); 330 static int32_t param10_init[] = {0}; 331 model->setOperandValue(param10, param10_init, sizeof(int32_t) * 1); 332 static int32_t param11_init[] = {1}; 333 model->setOperandValue(param11, param11_init, sizeof(int32_t) * 1); 334 static int32_t param12_init[] = {1}; 335 model->setOperandValue(param12, param12_init, sizeof(int32_t) * 1); 336 static int32_t param13_init[] = {0}; 337 model->setOperandValue(param13, param13_init, sizeof(int32_t) * 1); 338 static bool8 layout_init[] = {true}; 339 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 340 model->addOperation(ANEURALNETWORKS_CONV_2D, {op11, op21, op31, param7, param8, param9, param10, param11, param12, param13, layout}, {op41}); 341 // Phase 3, inputs and outputs 342 model->identifyInputsAndOutputs( 343 {op11}, 344 {op41}); 345 assert(model->isValid()); 346 } 347 348 inline bool is_ignored_layouts_nchw(int i) { 349 static std::set<int> ignore = {}; 350 return ignore.find(i) != ignore.end(); 351 } 352 353 void CreateModel_layouts_nchw_weight_as_input(Model *model) { 354 OperandType type2(Type::TENSOR_INT32, {3}); 355 OperandType type22(Type::TENSOR_QUANT8_ASYMM, {1, 2, 3, 1}, 0.5f, 128); 356 OperandType type23(Type::TENSOR_QUANT8_ASYMM, {1, 3, 3, 1}, 1.0f, 128); 357 OperandType type24(Type::TENSOR_QUANT8_SYMM_PER_CHANNEL, {3, 1, 1, 2}, 0.0f, 0, SymmPerChannelQuantParams({0.5f, 0.75f, 1.0f},0)); 358 OperandType type4(Type::INT32, {}); 359 OperandType type5(Type::BOOL, {}); 360 // Phase 1, operands 361 auto op11 = model->addOperand(&type22); 362 auto op21 = model->addOperand(&type24); 363 auto op31 = model->addOperand(&type2); 364 auto param7 = model->addOperand(&type4); 365 auto param8 = model->addOperand(&type4); 366 auto param9 = model->addOperand(&type4); 367 auto param10 = model->addOperand(&type4); 368 auto param11 = model->addOperand(&type4); 369 auto param12 = model->addOperand(&type4); 370 auto param13 = model->addOperand(&type4); 371 auto layout = model->addOperand(&type5); 372 auto op41 = model->addOperand(&type23); 373 // Phase 2, operations 374 static int32_t param7_init[] = {0}; 375 model->setOperandValue(param7, param7_init, sizeof(int32_t) * 1); 376 static int32_t param8_init[] = {0}; 377 model->setOperandValue(param8, param8_init, sizeof(int32_t) * 1); 378 static int32_t param9_init[] = {0}; 379 model->setOperandValue(param9, param9_init, sizeof(int32_t) * 1); 380 static int32_t param10_init[] = {0}; 381 model->setOperandValue(param10, param10_init, sizeof(int32_t) * 1); 382 static int32_t param11_init[] = {1}; 383 model->setOperandValue(param11, param11_init, sizeof(int32_t) * 1); 384 static int32_t param12_init[] = {1}; 385 model->setOperandValue(param12, param12_init, sizeof(int32_t) * 1); 386 static int32_t param13_init[] = {0}; 387 model->setOperandValue(param13, param13_init, sizeof(int32_t) * 1); 388 static bool8 layout_init[] = {true}; 389 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 390 model->addOperation(ANEURALNETWORKS_CONV_2D, {op11, op21, op31, param7, param8, param9, param10, param11, param12, param13, layout}, {op41}); 391 // Phase 3, inputs and outputs 392 model->identifyInputsAndOutputs( 393 {op11, op21, op31}, 394 {op41}); 395 assert(model->isValid()); 396 } 397 398 inline bool is_ignored_layouts_nchw_weight_as_input(int i) { 399 static std::set<int> ignore = {}; 400 return ignore.find(i) != ignore.end(); 401 } 402 403 void CreateModel_layouts_dynamic_output_shape_nhwc(Model *model) { 404 OperandType type0(Type::TENSOR_QUANT8_ASYMM, {1, 3, 1, 2}, 0.5f, 128); 405 OperandType type19(Type::TENSOR_QUANT8_ASYMM, {0, 0, 0, 0}, 1.0f, 128); 406 OperandType type2(Type::TENSOR_INT32, {3}); 407 OperandType type4(Type::INT32, {}); 408 OperandType type5(Type::BOOL, {}); 409 OperandType type6(Type::TENSOR_QUANT8_SYMM_PER_CHANNEL, {3, 1, 1, 2}, 0.0f, 0, SymmPerChannelQuantParams({0.5f, 0.75f, 1.0f},0)); 410 // Phase 1, operands 411 auto op11 = model->addOperand(&type0); 412 auto op21 = model->addOperand(&type6); 413 auto op31 = model->addOperand(&type2); 414 auto param7 = model->addOperand(&type4); 415 auto param8 = model->addOperand(&type4); 416 auto param9 = model->addOperand(&type4); 417 auto param10 = model->addOperand(&type4); 418 auto param11 = model->addOperand(&type4); 419 auto param12 = model->addOperand(&type4); 420 auto param13 = model->addOperand(&type4); 421 auto layout = model->addOperand(&type5); 422 auto op41 = model->addOperand(&type19); 423 // Phase 2, operations 424 static int8_t op21_init[] = {1, 2, 1, 2, 1, 2}; 425 model->setOperandValue(op21, op21_init, sizeof(int8_t) * 6); 426 static int32_t op31_init[] = {4, 4, 4}; 427 model->setOperandValue(op31, op31_init, sizeof(int32_t) * 3); 428 static int32_t param7_init[] = {0}; 429 model->setOperandValue(param7, param7_init, sizeof(int32_t) * 1); 430 static int32_t param8_init[] = {0}; 431 model->setOperandValue(param8, param8_init, sizeof(int32_t) * 1); 432 static int32_t param9_init[] = {0}; 433 model->setOperandValue(param9, param9_init, sizeof(int32_t) * 1); 434 static int32_t param10_init[] = {0}; 435 model->setOperandValue(param10, param10_init, sizeof(int32_t) * 1); 436 static int32_t param11_init[] = {1}; 437 model->setOperandValue(param11, param11_init, sizeof(int32_t) * 1); 438 static int32_t param12_init[] = {1}; 439 model->setOperandValue(param12, param12_init, sizeof(int32_t) * 1); 440 static int32_t param13_init[] = {0}; 441 model->setOperandValue(param13, param13_init, sizeof(int32_t) * 1); 442 static bool8 layout_init[] = {false}; 443 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 444 model->addOperation(ANEURALNETWORKS_CONV_2D, {op11, op21, op31, param7, param8, param9, param10, param11, param12, param13, layout}, {op41}); 445 // Phase 3, inputs and outputs 446 model->identifyInputsAndOutputs( 447 {op11}, 448 {op41}); 449 assert(model->isValid()); 450 } 451 452 inline bool is_ignored_layouts_dynamic_output_shape_nhwc(int i) { 453 static std::set<int> ignore = {}; 454 return ignore.find(i) != ignore.end(); 455 } 456 457 void CreateModel_layouts_dynamic_output_shape_nhwc_weight_as_input(Model *model) { 458 OperandType type0(Type::TENSOR_QUANT8_ASYMM, {1, 3, 1, 2}, 0.5f, 128); 459 OperandType type19(Type::TENSOR_QUANT8_ASYMM, {0, 0, 0, 0}, 1.0f, 128); 460 OperandType type2(Type::TENSOR_INT32, {3}); 461 OperandType type25(Type::TENSOR_QUANT8_SYMM_PER_CHANNEL, {3, 1, 1, 2}, 0.0f, 0, SymmPerChannelQuantParams({0.5f, 0.75f, 1.0f},0)); 462 OperandType type4(Type::INT32, {}); 463 OperandType type5(Type::BOOL, {}); 464 // Phase 1, operands 465 auto op11 = model->addOperand(&type0); 466 auto op21 = model->addOperand(&type25); 467 auto op31 = model->addOperand(&type2); 468 auto param7 = model->addOperand(&type4); 469 auto param8 = model->addOperand(&type4); 470 auto param9 = model->addOperand(&type4); 471 auto param10 = model->addOperand(&type4); 472 auto param11 = model->addOperand(&type4); 473 auto param12 = model->addOperand(&type4); 474 auto param13 = model->addOperand(&type4); 475 auto layout = model->addOperand(&type5); 476 auto op41 = model->addOperand(&type19); 477 // Phase 2, operations 478 static int32_t param7_init[] = {0}; 479 model->setOperandValue(param7, param7_init, sizeof(int32_t) * 1); 480 static int32_t param8_init[] = {0}; 481 model->setOperandValue(param8, param8_init, sizeof(int32_t) * 1); 482 static int32_t param9_init[] = {0}; 483 model->setOperandValue(param9, param9_init, sizeof(int32_t) * 1); 484 static int32_t param10_init[] = {0}; 485 model->setOperandValue(param10, param10_init, sizeof(int32_t) * 1); 486 static int32_t param11_init[] = {1}; 487 model->setOperandValue(param11, param11_init, sizeof(int32_t) * 1); 488 static int32_t param12_init[] = {1}; 489 model->setOperandValue(param12, param12_init, sizeof(int32_t) * 1); 490 static int32_t param13_init[] = {0}; 491 model->setOperandValue(param13, param13_init, sizeof(int32_t) * 1); 492 static bool8 layout_init[] = {false}; 493 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 494 model->addOperation(ANEURALNETWORKS_CONV_2D, {op11, op21, op31, param7, param8, param9, param10, param11, param12, param13, layout}, {op41}); 495 // Phase 3, inputs and outputs 496 model->identifyInputsAndOutputs( 497 {op11, op21, op31}, 498 {op41}); 499 assert(model->isValid()); 500 } 501 502 inline bool is_ignored_layouts_dynamic_output_shape_nhwc_weight_as_input(int i) { 503 static std::set<int> ignore = {}; 504 return ignore.find(i) != ignore.end(); 505 } 506 507 void CreateModel_layouts_dynamic_output_shape_nchw(Model *model) { 508 OperandType type19(Type::TENSOR_QUANT8_ASYMM, {0, 0, 0, 0}, 1.0f, 128); 509 OperandType type2(Type::TENSOR_INT32, {3}); 510 OperandType type22(Type::TENSOR_QUANT8_ASYMM, {1, 2, 3, 1}, 0.5f, 128); 511 OperandType type4(Type::INT32, {}); 512 OperandType type5(Type::BOOL, {}); 513 OperandType type6(Type::TENSOR_QUANT8_SYMM_PER_CHANNEL, {3, 1, 1, 2}, 0.0f, 0, SymmPerChannelQuantParams({0.5f, 0.75f, 1.0f},0)); 514 // Phase 1, operands 515 auto op11 = model->addOperand(&type22); 516 auto op21 = model->addOperand(&type6); 517 auto op31 = model->addOperand(&type2); 518 auto param7 = model->addOperand(&type4); 519 auto param8 = model->addOperand(&type4); 520 auto param9 = model->addOperand(&type4); 521 auto param10 = model->addOperand(&type4); 522 auto param11 = model->addOperand(&type4); 523 auto param12 = model->addOperand(&type4); 524 auto param13 = model->addOperand(&type4); 525 auto layout = model->addOperand(&type5); 526 auto op41 = model->addOperand(&type19); 527 // Phase 2, operations 528 static int8_t op21_init[] = {1, 2, 1, 2, 1, 2}; 529 model->setOperandValue(op21, op21_init, sizeof(int8_t) * 6); 530 static int32_t op31_init[] = {4, 4, 4}; 531 model->setOperandValue(op31, op31_init, sizeof(int32_t) * 3); 532 static int32_t param7_init[] = {0}; 533 model->setOperandValue(param7, param7_init, sizeof(int32_t) * 1); 534 static int32_t param8_init[] = {0}; 535 model->setOperandValue(param8, param8_init, sizeof(int32_t) * 1); 536 static int32_t param9_init[] = {0}; 537 model->setOperandValue(param9, param9_init, sizeof(int32_t) * 1); 538 static int32_t param10_init[] = {0}; 539 model->setOperandValue(param10, param10_init, sizeof(int32_t) * 1); 540 static int32_t param11_init[] = {1}; 541 model->setOperandValue(param11, param11_init, sizeof(int32_t) * 1); 542 static int32_t param12_init[] = {1}; 543 model->setOperandValue(param12, param12_init, sizeof(int32_t) * 1); 544 static int32_t param13_init[] = {0}; 545 model->setOperandValue(param13, param13_init, sizeof(int32_t) * 1); 546 static bool8 layout_init[] = {true}; 547 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 548 model->addOperation(ANEURALNETWORKS_CONV_2D, {op11, op21, op31, param7, param8, param9, param10, param11, param12, param13, layout}, {op41}); 549 // Phase 3, inputs and outputs 550 model->identifyInputsAndOutputs( 551 {op11}, 552 {op41}); 553 assert(model->isValid()); 554 } 555 556 inline bool is_ignored_layouts_dynamic_output_shape_nchw(int i) { 557 static std::set<int> ignore = {}; 558 return ignore.find(i) != ignore.end(); 559 } 560 561 void CreateModel_layouts_dynamic_output_shape_nchw_weight_as_input(Model *model) { 562 OperandType type19(Type::TENSOR_QUANT8_ASYMM, {0, 0, 0, 0}, 1.0f, 128); 563 OperandType type2(Type::TENSOR_INT32, {3}); 564 OperandType type22(Type::TENSOR_QUANT8_ASYMM, {1, 2, 3, 1}, 0.5f, 128); 565 OperandType type26(Type::TENSOR_QUANT8_SYMM_PER_CHANNEL, {3, 1, 1, 2}, 0.0f, 0, SymmPerChannelQuantParams({0.5f, 0.75f, 1.0f},0)); 566 OperandType type4(Type::INT32, {}); 567 OperandType type5(Type::BOOL, {}); 568 // Phase 1, operands 569 auto op11 = model->addOperand(&type22); 570 auto op21 = model->addOperand(&type26); 571 auto op31 = model->addOperand(&type2); 572 auto param7 = model->addOperand(&type4); 573 auto param8 = model->addOperand(&type4); 574 auto param9 = model->addOperand(&type4); 575 auto param10 = model->addOperand(&type4); 576 auto param11 = model->addOperand(&type4); 577 auto param12 = model->addOperand(&type4); 578 auto param13 = model->addOperand(&type4); 579 auto layout = model->addOperand(&type5); 580 auto op41 = model->addOperand(&type19); 581 // Phase 2, operations 582 static int32_t param7_init[] = {0}; 583 model->setOperandValue(param7, param7_init, sizeof(int32_t) * 1); 584 static int32_t param8_init[] = {0}; 585 model->setOperandValue(param8, param8_init, sizeof(int32_t) * 1); 586 static int32_t param9_init[] = {0}; 587 model->setOperandValue(param9, param9_init, sizeof(int32_t) * 1); 588 static int32_t param10_init[] = {0}; 589 model->setOperandValue(param10, param10_init, sizeof(int32_t) * 1); 590 static int32_t param11_init[] = {1}; 591 model->setOperandValue(param11, param11_init, sizeof(int32_t) * 1); 592 static int32_t param12_init[] = {1}; 593 model->setOperandValue(param12, param12_init, sizeof(int32_t) * 1); 594 static int32_t param13_init[] = {0}; 595 model->setOperandValue(param13, param13_init, sizeof(int32_t) * 1); 596 static bool8 layout_init[] = {true}; 597 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 598 model->addOperation(ANEURALNETWORKS_CONV_2D, {op11, op21, op31, param7, param8, param9, param10, param11, param12, param13, layout}, {op41}); 599 // Phase 3, inputs and outputs 600 model->identifyInputsAndOutputs( 601 {op11, op21, op31}, 602 {op41}); 603 assert(model->isValid()); 604 } 605 606 inline bool is_ignored_layouts_dynamic_output_shape_nchw_weight_as_input(int i) { 607 static std::set<int> ignore = {}; 608 return ignore.find(i) != ignore.end(); 609 } 610 611 void CreateModel_zero_sized_nhwc(Model *model) { 612 OperandType type10(Type::TENSOR_INT32, {0}); 613 OperandType type11(Type::TENSOR_QUANT16_ASYMM, {0, 4}, 0.125f, 0); 614 OperandType type12(Type::TENSOR_INT32, {1}); 615 OperandType type13(Type::FLOAT32, {}); 616 OperandType type14(Type::TENSOR_QUANT8_ASYMM, {1, 1, 1, 2}, 0.5f, 128); 617 OperandType type15(Type::TENSOR_QUANT8_ASYMM, {0, 2, 2, 2}, 0.5f, 128); 618 OperandType type16(Type::TENSOR_QUANT8_SYMM_PER_CHANNEL, {3, 1, 1, 2}, 0.0f, 0, SymmPerChannelQuantParams({0.5f, 0.75f, 1.0f},0)); 619 OperandType type17(Type::TENSOR_QUANT8_ASYMM, {0, 2, 2, 3}, 1.0f, 128); 620 OperandType type2(Type::TENSOR_INT32, {3}); 621 OperandType type4(Type::INT32, {}); 622 OperandType type5(Type::BOOL, {}); 623 OperandType type7(Type::TENSOR_QUANT8_ASYMM, {1, 2}, 0.1f, 128); 624 OperandType type8(Type::TENSOR_QUANT16_ASYMM, {1, 8}, 0.125f, 0); 625 OperandType type9(Type::TENSOR_QUANT8_ASYMM, {0}, 0.1f, 128); 626 // Phase 1, operands 627 auto scores = model->addOperand(&type7); 628 auto roi = model->addOperand(&type8); 629 auto param14 = model->addOperand(&type12); 630 auto param15 = model->addOperand(&type13); 631 auto param16 = model->addOperand(&type4); 632 auto param17 = model->addOperand(&type4); 633 auto param18 = model->addOperand(&type13); 634 auto param19 = model->addOperand(&type13); 635 auto param20 = model->addOperand(&type13); 636 auto scoresOut = model->addOperand(&type9); 637 auto roiOut = model->addOperand(&type11); 638 auto classesOut = model->addOperand(&type10); 639 auto batchSplitOut = model->addOperand(&type10); 640 auto in = model->addOperand(&type14); 641 auto param21 = model->addOperand(&type4); 642 auto param22 = model->addOperand(&type4); 643 auto param23 = model->addOperand(&type13); 644 auto param24 = model->addOperand(&type13); 645 auto param25 = model->addOperand(&type4); 646 auto param26 = model->addOperand(&type4); 647 auto layout = model->addOperand(&type5); 648 auto featureMap = model->addOperand(&type15); 649 auto weights = model->addOperand(&type16); 650 auto bias = model->addOperand(&type2); 651 auto param27 = model->addOperand(&type4); 652 auto param28 = model->addOperand(&type4); 653 auto param29 = model->addOperand(&type4); 654 auto param30 = model->addOperand(&type4); 655 auto param31 = model->addOperand(&type4); 656 auto param32 = model->addOperand(&type4); 657 auto param33 = model->addOperand(&type4); 658 auto out = model->addOperand(&type17); 659 // Phase 2, operations 660 static uint8_t scores_init[] = {137, 129}; 661 model->setOperandValue(scores, scores_init, sizeof(uint8_t) * 2); 662 static uint16_t roi_init[] = {1, 1, 10, 10, 0, 0, 10, 10}; 663 model->setOperandValue(roi, roi_init, sizeof(uint16_t) * 8); 664 static int32_t param14_init[] = {0}; 665 model->setOperandValue(param14, param14_init, sizeof(int32_t) * 1); 666 static float param15_init[] = {0.3f}; 667 model->setOperandValue(param15, param15_init, sizeof(float) * 1); 668 static int32_t param16_init[] = {-1}; 669 model->setOperandValue(param16, param16_init, sizeof(int32_t) * 1); 670 static int32_t param17_init[] = {0}; 671 model->setOperandValue(param17, param17_init, sizeof(int32_t) * 1); 672 static float param18_init[] = {0.4f}; 673 model->setOperandValue(param18, param18_init, sizeof(float) * 1); 674 static float param19_init[] = {1.0f}; 675 model->setOperandValue(param19, param19_init, sizeof(float) * 1); 676 static float param20_init[] = {0.3f}; 677 model->setOperandValue(param20, param20_init, sizeof(float) * 1); 678 static int32_t param21_init[] = {2}; 679 model->setOperandValue(param21, param21_init, sizeof(int32_t) * 1); 680 static int32_t param22_init[] = {2}; 681 model->setOperandValue(param22, param22_init, sizeof(int32_t) * 1); 682 static float param23_init[] = {2.0f}; 683 model->setOperandValue(param23, param23_init, sizeof(float) * 1); 684 static float param24_init[] = {2.0f}; 685 model->setOperandValue(param24, param24_init, sizeof(float) * 1); 686 static int32_t param25_init[] = {4}; 687 model->setOperandValue(param25, param25_init, sizeof(int32_t) * 1); 688 static int32_t param26_init[] = {4}; 689 model->setOperandValue(param26, param26_init, sizeof(int32_t) * 1); 690 static bool8 layout_init[] = {false}; 691 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 692 static int8_t weights_init[] = {1, 2, 1, 2, 1, 2}; 693 model->setOperandValue(weights, weights_init, sizeof(int8_t) * 6); 694 static int32_t bias_init[] = {4, 4, 4}; 695 model->setOperandValue(bias, bias_init, sizeof(int32_t) * 3); 696 static int32_t param27_init[] = {0}; 697 model->setOperandValue(param27, param27_init, sizeof(int32_t) * 1); 698 static int32_t param28_init[] = {0}; 699 model->setOperandValue(param28, param28_init, sizeof(int32_t) * 1); 700 static int32_t param29_init[] = {0}; 701 model->setOperandValue(param29, param29_init, sizeof(int32_t) * 1); 702 static int32_t param30_init[] = {0}; 703 model->setOperandValue(param30, param30_init, sizeof(int32_t) * 1); 704 static int32_t param31_init[] = {1}; 705 model->setOperandValue(param31, param31_init, sizeof(int32_t) * 1); 706 static int32_t param32_init[] = {1}; 707 model->setOperandValue(param32, param32_init, sizeof(int32_t) * 1); 708 static int32_t param33_init[] = {0}; 709 model->setOperandValue(param33, param33_init, sizeof(int32_t) * 1); 710 model->addOperation(ANEURALNETWORKS_BOX_WITH_NMS_LIMIT, {scores, roi, param14, param15, param16, param17, param18, param19, param20}, {scoresOut, roiOut, classesOut, batchSplitOut}); 711 model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in, roiOut, batchSplitOut, param21, param22, param23, param24, param25, param26, layout}, {featureMap}); 712 model->addOperation(ANEURALNETWORKS_CONV_2D, {featureMap, weights, bias, param27, param28, param29, param30, param31, param32, param33, layout}, {out}); 713 // Phase 3, inputs and outputs 714 model->identifyInputsAndOutputs( 715 {in}, 716 {scoresOut, classesOut, out}); 717 assert(model->isValid()); 718 } 719 720 inline bool is_ignored_zero_sized_nhwc(int i) { 721 static std::set<int> ignore = {}; 722 return ignore.find(i) != ignore.end(); 723 } 724 725 void CreateModel_zero_sized_nchw(Model *model) { 726 OperandType type10(Type::TENSOR_INT32, {0}); 727 OperandType type11(Type::TENSOR_QUANT16_ASYMM, {0, 4}, 0.125f, 0); 728 OperandType type12(Type::TENSOR_INT32, {1}); 729 OperandType type13(Type::FLOAT32, {}); 730 OperandType type15(Type::TENSOR_QUANT8_ASYMM, {0, 2, 2, 2}, 0.5f, 128); 731 OperandType type16(Type::TENSOR_QUANT8_SYMM_PER_CHANNEL, {3, 1, 1, 2}, 0.0f, 0, SymmPerChannelQuantParams({0.5f, 0.75f, 1.0f},0)); 732 OperandType type2(Type::TENSOR_INT32, {3}); 733 OperandType type27(Type::TENSOR_QUANT8_ASYMM, {1, 2, 1, 1}, 0.5f, 128); 734 OperandType type28(Type::TENSOR_QUANT8_ASYMM, {0, 3, 2, 2}, 1.0f, 128); 735 OperandType type4(Type::INT32, {}); 736 OperandType type5(Type::BOOL, {}); 737 OperandType type7(Type::TENSOR_QUANT8_ASYMM, {1, 2}, 0.1f, 128); 738 OperandType type8(Type::TENSOR_QUANT16_ASYMM, {1, 8}, 0.125f, 0); 739 OperandType type9(Type::TENSOR_QUANT8_ASYMM, {0}, 0.1f, 128); 740 // Phase 1, operands 741 auto scores = model->addOperand(&type7); 742 auto roi = model->addOperand(&type8); 743 auto param14 = model->addOperand(&type12); 744 auto param15 = model->addOperand(&type13); 745 auto param16 = model->addOperand(&type4); 746 auto param17 = model->addOperand(&type4); 747 auto param18 = model->addOperand(&type13); 748 auto param19 = model->addOperand(&type13); 749 auto param20 = model->addOperand(&type13); 750 auto scoresOut = model->addOperand(&type9); 751 auto roiOut = model->addOperand(&type11); 752 auto classesOut = model->addOperand(&type10); 753 auto batchSplitOut = model->addOperand(&type10); 754 auto in = model->addOperand(&type27); 755 auto param21 = model->addOperand(&type4); 756 auto param22 = model->addOperand(&type4); 757 auto param23 = model->addOperand(&type13); 758 auto param24 = model->addOperand(&type13); 759 auto param25 = model->addOperand(&type4); 760 auto param26 = model->addOperand(&type4); 761 auto layout = model->addOperand(&type5); 762 auto featureMap = model->addOperand(&type15); 763 auto weights = model->addOperand(&type16); 764 auto bias = model->addOperand(&type2); 765 auto param27 = model->addOperand(&type4); 766 auto param28 = model->addOperand(&type4); 767 auto param29 = model->addOperand(&type4); 768 auto param30 = model->addOperand(&type4); 769 auto param31 = model->addOperand(&type4); 770 auto param32 = model->addOperand(&type4); 771 auto param33 = model->addOperand(&type4); 772 auto out = model->addOperand(&type28); 773 // Phase 2, operations 774 static uint8_t scores_init[] = {137, 129}; 775 model->setOperandValue(scores, scores_init, sizeof(uint8_t) * 2); 776 static uint16_t roi_init[] = {1, 1, 10, 10, 0, 0, 10, 10}; 777 model->setOperandValue(roi, roi_init, sizeof(uint16_t) * 8); 778 static int32_t param14_init[] = {0}; 779 model->setOperandValue(param14, param14_init, sizeof(int32_t) * 1); 780 static float param15_init[] = {0.3f}; 781 model->setOperandValue(param15, param15_init, sizeof(float) * 1); 782 static int32_t param16_init[] = {-1}; 783 model->setOperandValue(param16, param16_init, sizeof(int32_t) * 1); 784 static int32_t param17_init[] = {0}; 785 model->setOperandValue(param17, param17_init, sizeof(int32_t) * 1); 786 static float param18_init[] = {0.4f}; 787 model->setOperandValue(param18, param18_init, sizeof(float) * 1); 788 static float param19_init[] = {1.0f}; 789 model->setOperandValue(param19, param19_init, sizeof(float) * 1); 790 static float param20_init[] = {0.3f}; 791 model->setOperandValue(param20, param20_init, sizeof(float) * 1); 792 static int32_t param21_init[] = {2}; 793 model->setOperandValue(param21, param21_init, sizeof(int32_t) * 1); 794 static int32_t param22_init[] = {2}; 795 model->setOperandValue(param22, param22_init, sizeof(int32_t) * 1); 796 static float param23_init[] = {2.0f}; 797 model->setOperandValue(param23, param23_init, sizeof(float) * 1); 798 static float param24_init[] = {2.0f}; 799 model->setOperandValue(param24, param24_init, sizeof(float) * 1); 800 static int32_t param25_init[] = {4}; 801 model->setOperandValue(param25, param25_init, sizeof(int32_t) * 1); 802 static int32_t param26_init[] = {4}; 803 model->setOperandValue(param26, param26_init, sizeof(int32_t) * 1); 804 static bool8 layout_init[] = {true}; 805 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 806 static int8_t weights_init[] = {1, 2, 1, 2, 1, 2}; 807 model->setOperandValue(weights, weights_init, sizeof(int8_t) * 6); 808 static int32_t bias_init[] = {4, 4, 4}; 809 model->setOperandValue(bias, bias_init, sizeof(int32_t) * 3); 810 static int32_t param27_init[] = {0}; 811 model->setOperandValue(param27, param27_init, sizeof(int32_t) * 1); 812 static int32_t param28_init[] = {0}; 813 model->setOperandValue(param28, param28_init, sizeof(int32_t) * 1); 814 static int32_t param29_init[] = {0}; 815 model->setOperandValue(param29, param29_init, sizeof(int32_t) * 1); 816 static int32_t param30_init[] = {0}; 817 model->setOperandValue(param30, param30_init, sizeof(int32_t) * 1); 818 static int32_t param31_init[] = {1}; 819 model->setOperandValue(param31, param31_init, sizeof(int32_t) * 1); 820 static int32_t param32_init[] = {1}; 821 model->setOperandValue(param32, param32_init, sizeof(int32_t) * 1); 822 static int32_t param33_init[] = {0}; 823 model->setOperandValue(param33, param33_init, sizeof(int32_t) * 1); 824 model->addOperation(ANEURALNETWORKS_BOX_WITH_NMS_LIMIT, {scores, roi, param14, param15, param16, param17, param18, param19, param20}, {scoresOut, roiOut, classesOut, batchSplitOut}); 825 model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in, roiOut, batchSplitOut, param21, param22, param23, param24, param25, param26, layout}, {featureMap}); 826 model->addOperation(ANEURALNETWORKS_CONV_2D, {featureMap, weights, bias, param27, param28, param29, param30, param31, param32, param33, layout}, {out}); 827 // Phase 3, inputs and outputs 828 model->identifyInputsAndOutputs( 829 {in}, 830 {scoresOut, classesOut, out}); 831 assert(model->isValid()); 832 } 833 834 inline bool is_ignored_zero_sized_nchw(int i) { 835 static std::set<int> ignore = {}; 836 return ignore.find(i) != ignore.end(); 837 } 838 839 void CreateModel_zero_sized_dynamic_output_shape_nhwc(Model *model) { 840 OperandType type10(Type::TENSOR_INT32, {0}); 841 OperandType type11(Type::TENSOR_QUANT16_ASYMM, {0, 4}, 0.125f, 0); 842 OperandType type12(Type::TENSOR_INT32, {1}); 843 OperandType type13(Type::FLOAT32, {}); 844 OperandType type14(Type::TENSOR_QUANT8_ASYMM, {1, 1, 1, 2}, 0.5f, 128); 845 OperandType type15(Type::TENSOR_QUANT8_ASYMM, {0, 2, 2, 2}, 0.5f, 128); 846 OperandType type16(Type::TENSOR_QUANT8_SYMM_PER_CHANNEL, {3, 1, 1, 2}, 0.0f, 0, SymmPerChannelQuantParams({0.5f, 0.75f, 1.0f},0)); 847 OperandType type19(Type::TENSOR_QUANT8_ASYMM, {0, 0, 0, 0}, 1.0f, 128); 848 OperandType type2(Type::TENSOR_INT32, {3}); 849 OperandType type4(Type::INT32, {}); 850 OperandType type5(Type::BOOL, {}); 851 OperandType type7(Type::TENSOR_QUANT8_ASYMM, {1, 2}, 0.1f, 128); 852 OperandType type8(Type::TENSOR_QUANT16_ASYMM, {1, 8}, 0.125f, 0); 853 OperandType type9(Type::TENSOR_QUANT8_ASYMM, {0}, 0.1f, 128); 854 // Phase 1, operands 855 auto scores = model->addOperand(&type7); 856 auto roi = model->addOperand(&type8); 857 auto param14 = model->addOperand(&type12); 858 auto param15 = model->addOperand(&type13); 859 auto param16 = model->addOperand(&type4); 860 auto param17 = model->addOperand(&type4); 861 auto param18 = model->addOperand(&type13); 862 auto param19 = model->addOperand(&type13); 863 auto param20 = model->addOperand(&type13); 864 auto scoresOut = model->addOperand(&type9); 865 auto roiOut = model->addOperand(&type11); 866 auto classesOut = model->addOperand(&type10); 867 auto batchSplitOut = model->addOperand(&type10); 868 auto in = model->addOperand(&type14); 869 auto param21 = model->addOperand(&type4); 870 auto param22 = model->addOperand(&type4); 871 auto param23 = model->addOperand(&type13); 872 auto param24 = model->addOperand(&type13); 873 auto param25 = model->addOperand(&type4); 874 auto param26 = model->addOperand(&type4); 875 auto layout = model->addOperand(&type5); 876 auto featureMap = model->addOperand(&type15); 877 auto weights = model->addOperand(&type16); 878 auto bias = model->addOperand(&type2); 879 auto param27 = model->addOperand(&type4); 880 auto param28 = model->addOperand(&type4); 881 auto param29 = model->addOperand(&type4); 882 auto param30 = model->addOperand(&type4); 883 auto param31 = model->addOperand(&type4); 884 auto param32 = model->addOperand(&type4); 885 auto param33 = model->addOperand(&type4); 886 auto out = model->addOperand(&type19); 887 // Phase 2, operations 888 static uint8_t scores_init[] = {137, 129}; 889 model->setOperandValue(scores, scores_init, sizeof(uint8_t) * 2); 890 static uint16_t roi_init[] = {1, 1, 10, 10, 0, 0, 10, 10}; 891 model->setOperandValue(roi, roi_init, sizeof(uint16_t) * 8); 892 static int32_t param14_init[] = {0}; 893 model->setOperandValue(param14, param14_init, sizeof(int32_t) * 1); 894 static float param15_init[] = {0.3f}; 895 model->setOperandValue(param15, param15_init, sizeof(float) * 1); 896 static int32_t param16_init[] = {-1}; 897 model->setOperandValue(param16, param16_init, sizeof(int32_t) * 1); 898 static int32_t param17_init[] = {0}; 899 model->setOperandValue(param17, param17_init, sizeof(int32_t) * 1); 900 static float param18_init[] = {0.4f}; 901 model->setOperandValue(param18, param18_init, sizeof(float) * 1); 902 static float param19_init[] = {1.0f}; 903 model->setOperandValue(param19, param19_init, sizeof(float) * 1); 904 static float param20_init[] = {0.3f}; 905 model->setOperandValue(param20, param20_init, sizeof(float) * 1); 906 static int32_t param21_init[] = {2}; 907 model->setOperandValue(param21, param21_init, sizeof(int32_t) * 1); 908 static int32_t param22_init[] = {2}; 909 model->setOperandValue(param22, param22_init, sizeof(int32_t) * 1); 910 static float param23_init[] = {2.0f}; 911 model->setOperandValue(param23, param23_init, sizeof(float) * 1); 912 static float param24_init[] = {2.0f}; 913 model->setOperandValue(param24, param24_init, sizeof(float) * 1); 914 static int32_t param25_init[] = {4}; 915 model->setOperandValue(param25, param25_init, sizeof(int32_t) * 1); 916 static int32_t param26_init[] = {4}; 917 model->setOperandValue(param26, param26_init, sizeof(int32_t) * 1); 918 static bool8 layout_init[] = {false}; 919 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 920 static int8_t weights_init[] = {1, 2, 1, 2, 1, 2}; 921 model->setOperandValue(weights, weights_init, sizeof(int8_t) * 6); 922 static int32_t bias_init[] = {4, 4, 4}; 923 model->setOperandValue(bias, bias_init, sizeof(int32_t) * 3); 924 static int32_t param27_init[] = {0}; 925 model->setOperandValue(param27, param27_init, sizeof(int32_t) * 1); 926 static int32_t param28_init[] = {0}; 927 model->setOperandValue(param28, param28_init, sizeof(int32_t) * 1); 928 static int32_t param29_init[] = {0}; 929 model->setOperandValue(param29, param29_init, sizeof(int32_t) * 1); 930 static int32_t param30_init[] = {0}; 931 model->setOperandValue(param30, param30_init, sizeof(int32_t) * 1); 932 static int32_t param31_init[] = {1}; 933 model->setOperandValue(param31, param31_init, sizeof(int32_t) * 1); 934 static int32_t param32_init[] = {1}; 935 model->setOperandValue(param32, param32_init, sizeof(int32_t) * 1); 936 static int32_t param33_init[] = {0}; 937 model->setOperandValue(param33, param33_init, sizeof(int32_t) * 1); 938 model->addOperation(ANEURALNETWORKS_BOX_WITH_NMS_LIMIT, {scores, roi, param14, param15, param16, param17, param18, param19, param20}, {scoresOut, roiOut, classesOut, batchSplitOut}); 939 model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in, roiOut, batchSplitOut, param21, param22, param23, param24, param25, param26, layout}, {featureMap}); 940 model->addOperation(ANEURALNETWORKS_CONV_2D, {featureMap, weights, bias, param27, param28, param29, param30, param31, param32, param33, layout}, {out}); 941 // Phase 3, inputs and outputs 942 model->identifyInputsAndOutputs( 943 {in}, 944 {scoresOut, classesOut, out}); 945 assert(model->isValid()); 946 } 947 948 inline bool is_ignored_zero_sized_dynamic_output_shape_nhwc(int i) { 949 static std::set<int> ignore = {}; 950 return ignore.find(i) != ignore.end(); 951 } 952 953 void CreateModel_zero_sized_dynamic_output_shape_nchw(Model *model) { 954 OperandType type10(Type::TENSOR_INT32, {0}); 955 OperandType type11(Type::TENSOR_QUANT16_ASYMM, {0, 4}, 0.125f, 0); 956 OperandType type12(Type::TENSOR_INT32, {1}); 957 OperandType type13(Type::FLOAT32, {}); 958 OperandType type15(Type::TENSOR_QUANT8_ASYMM, {0, 2, 2, 2}, 0.5f, 128); 959 OperandType type16(Type::TENSOR_QUANT8_SYMM_PER_CHANNEL, {3, 1, 1, 2}, 0.0f, 0, SymmPerChannelQuantParams({0.5f, 0.75f, 1.0f},0)); 960 OperandType type19(Type::TENSOR_QUANT8_ASYMM, {0, 0, 0, 0}, 1.0f, 128); 961 OperandType type2(Type::TENSOR_INT32, {3}); 962 OperandType type27(Type::TENSOR_QUANT8_ASYMM, {1, 2, 1, 1}, 0.5f, 128); 963 OperandType type4(Type::INT32, {}); 964 OperandType type5(Type::BOOL, {}); 965 OperandType type7(Type::TENSOR_QUANT8_ASYMM, {1, 2}, 0.1f, 128); 966 OperandType type8(Type::TENSOR_QUANT16_ASYMM, {1, 8}, 0.125f, 0); 967 OperandType type9(Type::TENSOR_QUANT8_ASYMM, {0}, 0.1f, 128); 968 // Phase 1, operands 969 auto scores = model->addOperand(&type7); 970 auto roi = model->addOperand(&type8); 971 auto param14 = model->addOperand(&type12); 972 auto param15 = model->addOperand(&type13); 973 auto param16 = model->addOperand(&type4); 974 auto param17 = model->addOperand(&type4); 975 auto param18 = model->addOperand(&type13); 976 auto param19 = model->addOperand(&type13); 977 auto param20 = model->addOperand(&type13); 978 auto scoresOut = model->addOperand(&type9); 979 auto roiOut = model->addOperand(&type11); 980 auto classesOut = model->addOperand(&type10); 981 auto batchSplitOut = model->addOperand(&type10); 982 auto in = model->addOperand(&type27); 983 auto param21 = model->addOperand(&type4); 984 auto param22 = model->addOperand(&type4); 985 auto param23 = model->addOperand(&type13); 986 auto param24 = model->addOperand(&type13); 987 auto param25 = model->addOperand(&type4); 988 auto param26 = model->addOperand(&type4); 989 auto layout = model->addOperand(&type5); 990 auto featureMap = model->addOperand(&type15); 991 auto weights = model->addOperand(&type16); 992 auto bias = model->addOperand(&type2); 993 auto param27 = model->addOperand(&type4); 994 auto param28 = model->addOperand(&type4); 995 auto param29 = model->addOperand(&type4); 996 auto param30 = model->addOperand(&type4); 997 auto param31 = model->addOperand(&type4); 998 auto param32 = model->addOperand(&type4); 999 auto param33 = model->addOperand(&type4); 1000 auto out = model->addOperand(&type19); 1001 // Phase 2, operations 1002 static uint8_t scores_init[] = {137, 129}; 1003 model->setOperandValue(scores, scores_init, sizeof(uint8_t) * 2); 1004 static uint16_t roi_init[] = {1, 1, 10, 10, 0, 0, 10, 10}; 1005 model->setOperandValue(roi, roi_init, sizeof(uint16_t) * 8); 1006 static int32_t param14_init[] = {0}; 1007 model->setOperandValue(param14, param14_init, sizeof(int32_t) * 1); 1008 static float param15_init[] = {0.3f}; 1009 model->setOperandValue(param15, param15_init, sizeof(float) * 1); 1010 static int32_t param16_init[] = {-1}; 1011 model->setOperandValue(param16, param16_init, sizeof(int32_t) * 1); 1012 static int32_t param17_init[] = {0}; 1013 model->setOperandValue(param17, param17_init, sizeof(int32_t) * 1); 1014 static float param18_init[] = {0.4f}; 1015 model->setOperandValue(param18, param18_init, sizeof(float) * 1); 1016 static float param19_init[] = {1.0f}; 1017 model->setOperandValue(param19, param19_init, sizeof(float) * 1); 1018 static float param20_init[] = {0.3f}; 1019 model->setOperandValue(param20, param20_init, sizeof(float) * 1); 1020 static int32_t param21_init[] = {2}; 1021 model->setOperandValue(param21, param21_init, sizeof(int32_t) * 1); 1022 static int32_t param22_init[] = {2}; 1023 model->setOperandValue(param22, param22_init, sizeof(int32_t) * 1); 1024 static float param23_init[] = {2.0f}; 1025 model->setOperandValue(param23, param23_init, sizeof(float) * 1); 1026 static float param24_init[] = {2.0f}; 1027 model->setOperandValue(param24, param24_init, sizeof(float) * 1); 1028 static int32_t param25_init[] = {4}; 1029 model->setOperandValue(param25, param25_init, sizeof(int32_t) * 1); 1030 static int32_t param26_init[] = {4}; 1031 model->setOperandValue(param26, param26_init, sizeof(int32_t) * 1); 1032 static bool8 layout_init[] = {true}; 1033 model->setOperandValue(layout, layout_init, sizeof(bool8) * 1); 1034 static int8_t weights_init[] = {1, 2, 1, 2, 1, 2}; 1035 model->setOperandValue(weights, weights_init, sizeof(int8_t) * 6); 1036 static int32_t bias_init[] = {4, 4, 4}; 1037 model->setOperandValue(bias, bias_init, sizeof(int32_t) * 3); 1038 static int32_t param27_init[] = {0}; 1039 model->setOperandValue(param27, param27_init, sizeof(int32_t) * 1); 1040 static int32_t param28_init[] = {0}; 1041 model->setOperandValue(param28, param28_init, sizeof(int32_t) * 1); 1042 static int32_t param29_init[] = {0}; 1043 model->setOperandValue(param29, param29_init, sizeof(int32_t) * 1); 1044 static int32_t param30_init[] = {0}; 1045 model->setOperandValue(param30, param30_init, sizeof(int32_t) * 1); 1046 static int32_t param31_init[] = {1}; 1047 model->setOperandValue(param31, param31_init, sizeof(int32_t) * 1); 1048 static int32_t param32_init[] = {1}; 1049 model->setOperandValue(param32, param32_init, sizeof(int32_t) * 1); 1050 static int32_t param33_init[] = {0}; 1051 model->setOperandValue(param33, param33_init, sizeof(int32_t) * 1); 1052 model->addOperation(ANEURALNETWORKS_BOX_WITH_NMS_LIMIT, {scores, roi, param14, param15, param16, param17, param18, param19, param20}, {scoresOut, roiOut, classesOut, batchSplitOut}); 1053 model->addOperation(ANEURALNETWORKS_ROI_ALIGN, {in, roiOut, batchSplitOut, param21, param22, param23, param24, param25, param26, layout}, {featureMap}); 1054 model->addOperation(ANEURALNETWORKS_CONV_2D, {featureMap, weights, bias, param27, param28, param29, param30, param31, param32, param33, layout}, {out}); 1055 // Phase 3, inputs and outputs 1056 model->identifyInputsAndOutputs( 1057 {in}, 1058 {scoresOut, classesOut, out}); 1059 assert(model->isValid()); 1060 } 1061 1062 inline bool is_ignored_zero_sized_dynamic_output_shape_nchw(int i) { 1063 static std::set<int> ignore = {}; 1064 return ignore.find(i) != ignore.end(); 1065 } 1066 1067