39 class InceptionV4Example final :
public Example 43 : cmd_parser(), common_opts(cmd_parser), common_params(), graph(0,
"InceptionV4")
46 bool do_setup(
int argc,
char **argv)
override 49 cmd_parser.parse(argc, argv);
50 cmd_parser.validate();
56 if(common_params.help)
58 cmd_parser.print_help(argv[0]);
63 std::cout << common_params << std::endl;
66 std::string data_path = common_params.data_path;
69 std::unique_ptr<IPreprocessor> preprocessor = std::make_unique<TFPreproccessor>();
72 const auto operation_layout = common_params.data_layout;
79 graph << common_params.target
80 << common_params.fast_math_hint
84 get_weights_accessor(data_path,
"/cnn_data/inceptionv4_model/Conv2d_1a_3x3_weights.npy", weights_layout),
85 std::unique_ptr<arm_compute::graph::ITensorAccessor>(
nullptr),
PadStrideInfo(2, 2, 0, 0))
88 get_weights_accessor(data_path,
"/cnn_data/inceptionv4_model/Conv2d_1a_3x3_BatchNorm_moving_variance.npy"),
96 get_weights_accessor(data_path,
"/cnn_data/inceptionv4_model/Conv2d_2a_3x3_weights.npy", weights_layout),
97 std::unique_ptr<arm_compute::graph::ITensorAccessor>(
nullptr),
PadStrideInfo(1, 1, 0, 0))
100 get_weights_accessor(data_path,
"/cnn_data/inceptionv4_model/Conv2d_2a_3x3_BatchNorm_moving_variance.npy"),
102 get_weights_accessor(data_path,
"/cnn_data/inceptionv4_model/Conv2d_2a_3x3_BatchNorm_beta.npy"),
104 .
set_name(
"Conv2d_2a_3x3/BatchNorm")
108 get_weights_accessor(data_path,
"/cnn_data/inceptionv4_model/Conv2d_2b_3x3_weights.npy", weights_layout),
109 std::unique_ptr<arm_compute::graph::ITensorAccessor>(
nullptr),
PadStrideInfo(1, 1, 1, 1))
112 get_weights_accessor(data_path,
"/cnn_data/inceptionv4_model/Conv2d_2b_3x3_BatchNorm_moving_variance.npy"),
114 get_weights_accessor(data_path,
"/cnn_data/inceptionv4_model/Conv2d_2b_3x3_BatchNorm_beta.npy"),
116 .
set_name(
"Conv2d_2b_3x3/BatchNorm")
119 graph << get_mixed_3a(data_path, weights_layout).
set_name(
"Mixed_3a/concat");
120 graph << get_mixed_4a(data_path, weights_layout).
set_name(
"Mixed_4a/concat");
121 graph << get_mixed_5a(data_path, weights_layout).
set_name(
"Mixed_5a/concat");
123 graph << get_inceptionA_block(data_path, weights_layout,
"Mixed_5b").
set_name(
"Mixed_5b/concat");
124 graph << get_inceptionA_block(data_path, weights_layout,
"Mixed_5c").
set_name(
"Mixed_5c/concat");
125 graph << get_inceptionA_block(data_path, weights_layout,
"Mixed_5d").
set_name(
"Mixed_5d/concat");
126 graph << get_inceptionA_block(data_path, weights_layout,
"Mixed_5e").
set_name(
"Mixed_5e/concat");
128 graph << get_reductionA_block(data_path, weights_layout).
set_name(
"Mixed_6a/concat");
130 graph << get_inceptionB_block(data_path, weights_layout,
"Mixed_6b").
set_name(
"Mixed_6b/concat");
131 graph << get_inceptionB_block(data_path, weights_layout,
"Mixed_6c").
set_name(
"Mixed_6c/concat");
132 graph << get_inceptionB_block(data_path, weights_layout,
"Mixed_6d").
set_name(
"Mixed_6d/concat");
133 graph << get_inceptionB_block(data_path, weights_layout,
"Mixed_6e").
set_name(
"Mixed_6e/concat");
134 graph << get_inceptionB_block(data_path, weights_layout,
"Mixed_6f").
set_name(
"Mixed_6f/concat");
135 graph << get_inceptionB_block(data_path, weights_layout,
"Mixed_6g").
set_name(
"Mixed_6g/concat");
136 graph << get_inceptionB_block(data_path, weights_layout,
"Mixed_6h").
set_name(
"Mixed_6h/concat");
138 graph << get_reductionB_block(data_path, weights_layout).
set_name(
"Mixed_7a/concat");
140 graph << get_inceptionC_block(data_path, weights_layout,
"Mixed_7b").
set_name(
"Mixed_7b/concat");
141 graph << get_inceptionC_block(data_path, weights_layout,
"Mixed_7c").
set_name(
"Mixed_7c/concat");
142 graph << get_inceptionC_block(data_path, weights_layout,
"Mixed_7d").
set_name(
"Mixed_7d/concat");
147 get_weights_accessor(data_path,
"/cnn_data/inceptionv4_model/Logits_Logits_weights.npy", weights_layout),
156 config.
use_tuner = common_params.enable_tuner;
159 config.
mlgo_file = common_params.mlgo_file;
164 if(common_params.enable_cl_cache)
166 #ifdef ARM_COMPUTE_CL 171 graph.finalize(common_params.target, config);
174 if(common_opts.enable_cl_cache)
176 #ifdef ARM_COMPUTE_CL 184 void do_run()
override 198 std::string total_path =
"/cnn_data/inceptionv4_model/Mixed_3a_";
203 .
set_name(
"Mixed_3a/Branch_0/MaxPool_0a_3x3/MaxPool");
207 get_weights_accessor(data_path, total_path +
"Branch_1_Conv2d_0a_3x3_weights.npy", weights_layout),
208 std::unique_ptr<arm_compute::graph::ITensorAccessor>(
nullptr),
PadStrideInfo(2, 2, 0, 0))
209 .
set_name(
"Mixed_3a/Branch_1/Conv2d_0a_3x3/Conv2D")
211 get_weights_accessor(data_path, total_path +
"Branch_1_Conv2d_0a_3x3_BatchNorm_moving_variance.npy"),
215 .
set_name(
"Mixed_3a/Branch_1/Conv2d_0a_3x3/BatchNorm")
218 return ConcatLayer(std::move(i_a), std::move(i_b));
223 std::string total_path =
"/cnn_data/inceptionv4_model/Mixed_4a_";
227 get_weights_accessor(data_path, total_path +
"Branch_0_Conv2d_0a_1x1_weights.npy", weights_layout),
228 std::unique_ptr<arm_compute::graph::ITensorAccessor>(
nullptr),
PadStrideInfo(1, 1, 0, 0))
229 .
set_name(
"Mixed_4a/Branch_0/Conv2d_0a_1x1/Conv2D")
231 get_weights_accessor(data_path, total_path +
"Branch_0_Conv2d_0a_1x1_BatchNorm_moving_variance.npy"),
235 .
set_name(
"Mixed_4a/Branch_0/Conv2d_0a_1x1/BatchNorm")
238 get_weights_accessor(data_path, total_path +
"Branch_0_Conv2d_1a_3x3_weights.npy", weights_layout),
239 std::unique_ptr<arm_compute::graph::ITensorAccessor>(
nullptr),
PadStrideInfo(1, 1, 0, 0))
240 .
set_name(
"Mixed_4a/Branch_0/Conv2d_1a_3x3/Conv2D")
242 get_weights_accessor(data_path, total_path +
"Branch_0_Conv2d_1a_3x3_BatchNorm_moving_variance.npy"),
246 .
set_name(
"Mixed_4a/Branch_0/Conv2d_1a_3x3/BatchNorm")
251 get_weights_accessor(data_path, total_path +
"Branch_1_Conv2d_0a_1x1_weights.npy", weights_layout),
252 std::unique_ptr<arm_compute::graph::ITensorAccessor>(
nullptr),
PadStrideInfo(1, 1, 0, 0))
253 .
set_name(
"Mixed_4a/Branch_1/Conv2d_0a_1x1/Conv2D")
255 get_weights_accessor(data_path, total_path +
"Branch_1_Conv2d_0a_1x1_BatchNorm_moving_variance.npy"),
259 .
set_name(
"Mixed_4a/Branch_1/Conv2d_0a_1x1/BatchNorm")
262 get_weights_accessor(data_path, total_path +
"Branch_1_Conv2d_0b_1x7_weights.npy", weights_layout),
263 std::unique_ptr<arm_compute::graph::ITensorAccessor>(
nullptr),
PadStrideInfo(1, 1, 3, 0))
264 .
set_name(
"Mixed_4a/Branch_1/Conv2d_0b_1x7/Conv2D")
266 get_weights_accessor(data_path, total_path +
"Branch_1_Conv2d_0b_1x7_BatchNorm_moving_variance.npy"),
270 .
set_name(
"Mixed_4a/Branch_1/Conv2d_0b_1x7/BatchNorm")
273 get_weights_accessor(data_path, total_path +
"Branch_1_Conv2d_0c_7x1_weights.npy", weights_layout),
274 std::unique_ptr<arm_compute::graph::ITensorAccessor>(
nullptr),
PadStrideInfo(1, 1, 0, 3))
275 .
set_name(
"Mixed_4a/Branch_1/Conv2d_0c_7x1/Conv2D")
277 get_weights_accessor(data_path, total_path +
"Branch_1_Conv2d_0c_7x1_BatchNorm_moving_variance.npy"),
281 .
set_name(
"Mixed_4a/Branch_1/Conv2d_0c_7x1/BatchNorm")
284 get_weights_accessor(data_path, total_path +
"Branch_1_Conv2d_1a_3x3_weights.npy", weights_layout),
285 std::unique_ptr<arm_compute::graph::ITensorAccessor>(
nullptr),
PadStrideInfo(1, 1, 0, 0))
286 .
set_name(
"Mixed_4a/Branch_1/Conv2d_1a_3x3/Conv2D")
288 get_weights_accessor(data_path, total_path +
"Branch_1_Conv2d_1a_3x3_BatchNorm_moving_variance.npy"),
292 .
set_name(
"Mixed_4a/Branch_1/Conv2d_1a_3x3/BatchNorm")
295 return ConcatLayer(std::move(i_a), std::move(i_b));
300 std::string total_path =
"/cnn_data/inceptionv4_model/Mixed_5a_";
304 get_weights_accessor(data_path, total_path +
"Branch_0_Conv2d_1a_3x3_weights.npy", weights_layout),
305 std::unique_ptr<arm_compute::graph::ITensorAccessor>(
nullptr),
PadStrideInfo(2, 2, 0, 0))
306 .
set_name(
"Mixed_5a/Branch_0/Conv2d_1a_3x3/Conv2D")
308 get_weights_accessor(data_path, total_path +
"Branch_0_Conv2d_1a_3x3_BatchNorm_moving_variance.npy"),
312 .
set_name(
"Mixed_5a/Branch_0/Conv2d_1a_3x3/BatchNorm")
318 .
set_name(
"Mixed_5a/Branch_1/MaxPool_1a_3x3/MaxPool");
320 return ConcatLayer(std::move(i_a), std::move(i_b));
323 ConcatLayer get_inceptionA_block(
const std::string &data_path,
DataLayout weights_layout, std::string &¶m_path)
325 std::string total_path =
"/cnn_data/inceptionv4_model/" + param_path +
"_";
329 get_weights_accessor(data_path, total_path +
"Branch_0_Conv2d_0a_1x1_weights.npy", weights_layout),
330 std::unique_ptr<arm_compute::graph::ITensorAccessor>(
nullptr),
PadStrideInfo(1, 1, 0, 0))
331 .
set_name(param_path +
"/Branch_0/Conv2d_0a_1x1/Conv2D")
333 get_weights_accessor(data_path, total_path +
"Branch_0_Conv2d_0a_1x1_BatchNorm_moving_variance.npy"),
337 .
set_name(param_path +
"/Branch_0/Conv2d_0a_1x1/BatchNorm")
342 get_weights_accessor(data_path, total_path +
"Branch_1_Conv2d_0a_1x1_weights.npy", weights_layout),
343 std::unique_ptr<arm_compute::graph::ITensorAccessor>(
nullptr),
PadStrideInfo(1, 1, 0, 0))
344 .
set_name(param_path +
"/Branch_1/Conv2d_0a_1x1/Conv2D")
346 get_weights_accessor(data_path, total_path +
"Branch_1_Conv2d_0a_1x1_BatchNorm_moving_variance.npy"),
350 .
set_name(param_path +
"/Branch_1/Conv2d_0a_1x1/BatchNorm")
353 get_weights_accessor(data_path, total_path +
"Branch_1_Conv2d_0b_3x3_weights.npy", weights_layout),
354 std::unique_ptr<arm_compute::graph::ITensorAccessor>(
nullptr),
PadStrideInfo(1, 1, 1, 1))
355 .
set_name(param_path +
"/Branch_1/Conv2d_0b_3x3/Conv2D")
357 get_weights_accessor(data_path, total_path +
"Branch_1_Conv2d_0b_3x3_BatchNorm_moving_variance.npy"),
361 .
set_name(param_path +
"/Branch_1/Conv2d_0b_3x3/BatchNorm")
366 get_weights_accessor(data_path, total_path +
"Branch_2_Conv2d_0a_1x1_weights.npy", weights_layout),
367 std::unique_ptr<arm_compute::graph::ITensorAccessor>(
nullptr),
PadStrideInfo(1, 1, 0, 0))
368 .
set_name(param_path +
"/Branch_2/Conv2d_0a_1x1/Conv2D")
370 get_weights_accessor(data_path, total_path +
"Branch_2_Conv2d_0a_1x1_BatchNorm_moving_variance.npy"),
374 .
set_name(param_path +
"/Branch_2/Conv2d_0a_1x1/BatchNorm")
377 get_weights_accessor(data_path, total_path +
"Branch_2_Conv2d_0b_3x3_weights.npy", weights_layout),
378 std::unique_ptr<arm_compute::graph::ITensorAccessor>(
nullptr),
PadStrideInfo(1, 1, 1, 1))
379 .
set_name(param_path +
"/Branch_2/Conv2d_0b_3x3/Conv2D")
381 get_weights_accessor(data_path, total_path +
"Branch_2_Conv2d_0b_3x3_BatchNorm_moving_variance.npy"),
385 .
set_name(param_path +
"/Branch_2/Conv2d_0b_3x3/BatchNorm")
388 get_weights_accessor(data_path, total_path +
"Branch_2_Conv2d_0c_3x3_weights.npy", weights_layout),
389 std::unique_ptr<arm_compute::graph::ITensorAccessor>(
nullptr),
PadStrideInfo(1, 1, 1, 1))
390 .
set_name(param_path +
"/Branch_2/Conv2d_0c_3x3/Conv2D")
392 get_weights_accessor(data_path, total_path +
"Branch_2_Conv2d_0c_3x3_BatchNorm_moving_variance.npy"),
396 .
set_name(param_path +
"/Branch_2/Conv2d_0c_3x3/BatchNorm")
402 .
set_name(param_path +
"/Branch_3/AvgPool_0a_3x3/AvgPool")
404 get_weights_accessor(data_path, total_path +
"Branch_3_Conv2d_0b_1x1_weights.npy", weights_layout),
405 std::unique_ptr<arm_compute::graph::ITensorAccessor>(
nullptr),
PadStrideInfo(1, 1, 0, 0))
406 .
set_name(param_path +
"/Branch_3/Conv2d_0b_1x1/Conv2D")
408 get_weights_accessor(data_path, total_path +
"Branch_3_Conv2d_0b_1x1_BatchNorm_moving_variance.npy"),
412 .
set_name(param_path +
"/Branch_3/Conv2d_0b_1x1/BatchNorm")
415 return ConcatLayer(std::move(i_a), std::move(i_b), std::move(i_c), std::move(i_d));
420 std::string total_path =
"/cnn_data/inceptionv4_model/Mixed_6a_";
424 get_weights_accessor(data_path, total_path +
"Branch_0_Conv2d_1a_3x3_weights.npy", weights_layout),
425 std::unique_ptr<arm_compute::graph::ITensorAccessor>(
nullptr),
PadStrideInfo(2, 2, 0, 0))
426 .
set_name(
"Mixed_6a/Branch_0/Conv2d_1a_3x3/Conv2D")
428 get_weights_accessor(data_path, total_path +
"Branch_0_Conv2d_1a_3x3_BatchNorm_moving_variance.npy"),
432 .
set_name(
"Mixed_6a/Branch_0/Conv2d_1a_3x3/BatchNorm")
437 get_weights_accessor(data_path, total_path +
"Branch_1_Conv2d_0a_1x1_weights.npy", weights_layout),
438 std::unique_ptr<arm_compute::graph::ITensorAccessor>(
nullptr),
PadStrideInfo(1, 1, 0, 0))
439 .
set_name(
"Mixed_6a/Branch_1/Conv2d_0a_1x1/Conv2D")
441 get_weights_accessor(data_path, total_path +
"Branch_1_Conv2d_0a_1x1_BatchNorm_moving_variance.npy"),
445 .
set_name(
"Mixed_6a/Branch_1/Conv2d_0a_1x1/BatchNorm")
448 get_weights_accessor(data_path, total_path +
"Branch_1_Conv2d_0b_3x3_weights.npy", weights_layout),
449 std::unique_ptr<arm_compute::graph::ITensorAccessor>(
nullptr),
PadStrideInfo(1, 1, 1, 1))
450 .
set_name(
"Mixed_6a/Branch_1/Conv2d_0b_3x3/Conv2D")
452 get_weights_accessor(data_path, total_path +
"Branch_1_Conv2d_0b_3x3_BatchNorm_moving_variance.npy"),
456 .
set_name(
"Mixed_6a/Branch_1/Conv2d_0b_3x3/BatchNorm")
459 get_weights_accessor(data_path, total_path +
"Branch_1_Conv2d_1a_3x3_weights.npy", weights_layout),
460 std::unique_ptr<arm_compute::graph::ITensorAccessor>(
nullptr),
PadStrideInfo(2, 2, 0, 0))
461 .
set_name(
"Mixed_6a/Branch_1/Conv2d_1a_3x3/Conv2D")
463 get_weights_accessor(data_path, total_path +
"Branch_1_Conv2d_1a_3x3_BatchNorm_moving_variance.npy"),
467 .
set_name(
"Mixed_6a/Branch_1/Conv2d_1a_3x3/BatchNorm")
473 .
set_name(
"Mixed_6a/Branch_2/MaxPool_1a_3x3/MaxPool");
475 return ConcatLayer(std::move(i_a), std::move(i_b), std::move(i_c));
478 ConcatLayer get_inceptionB_block(
const std::string &data_path,
DataLayout weights_layout, std::string &¶m_path)
480 std::string total_path =
"/cnn_data/inceptionv4_model/" + param_path +
"_";
484 get_weights_accessor(data_path, total_path +
"Branch_0_Conv2d_0a_1x1_weights.npy", weights_layout),
485 std::unique_ptr<arm_compute::graph::ITensorAccessor>(
nullptr),
PadStrideInfo(1, 1, 0, 0))
486 .
set_name(param_path +
"/Branch_0/Conv2d_0a_1x1/Conv2D")
488 get_weights_accessor(data_path, total_path +
"Branch_0_Conv2d_0a_1x1_BatchNorm_moving_variance.npy"),
492 .
set_name(param_path +
"/Branch_0/Conv2d_0a_1x1/BatchNorm")
497 get_weights_accessor(data_path, total_path +
"Branch_1_Conv2d_0a_1x1_weights.npy", weights_layout),
498 std::unique_ptr<arm_compute::graph::ITensorAccessor>(
nullptr),
PadStrideInfo(1, 1, 0, 0))
499 .
set_name(param_path +
"/Branch_1/Conv2d_0a_1x1/Conv2D")
501 get_weights_accessor(data_path, total_path +
"Branch_1_Conv2d_0a_1x1_BatchNorm_moving_variance.npy"),
505 .
set_name(param_path +
"/Branch_1/Conv2d_0a_1x1/BatchNorm")
508 get_weights_accessor(data_path, total_path +
"Branch_1_Conv2d_0b_1x7_weights.npy", weights_layout),
509 std::unique_ptr<arm_compute::graph::ITensorAccessor>(
nullptr),
PadStrideInfo(1, 1, 3, 0))
510 .
set_name(param_path +
"/Branch_1/Conv2d_0b_1x7/Conv2D")
512 get_weights_accessor(data_path, total_path +
"Branch_1_Conv2d_0b_1x7_BatchNorm_moving_variance.npy"),
516 .
set_name(param_path +
"/Branch_1/Conv2d_0b_1x7/BatchNorm")
519 get_weights_accessor(data_path, total_path +
"Branch_1_Conv2d_0c_7x1_weights.npy", weights_layout),
520 std::unique_ptr<arm_compute::graph::ITensorAccessor>(
nullptr),
PadStrideInfo(1, 1, 0, 3))
521 .
set_name(param_path +
"/Branch_1/Conv2d_0c_7x1/Conv2D")
523 get_weights_accessor(data_path, total_path +
"Branch_1_Conv2d_0c_7x1_BatchNorm_moving_variance.npy"),
527 .
set_name(param_path +
"/Branch_1/Conv2d_0c_7x1/BatchNorm")
532 get_weights_accessor(data_path, total_path +
"Branch_2_Conv2d_0a_1x1_weights.npy", weights_layout),
533 std::unique_ptr<arm_compute::graph::ITensorAccessor>(
nullptr),
PadStrideInfo(1, 1, 0, 0))
534 .
set_name(param_path +
"/Branch_2/Conv2d_0a_1x1/Conv2D")
536 get_weights_accessor(data_path, total_path +
"Branch_2_Conv2d_0a_1x1_BatchNorm_moving_variance.npy"),
540 .
set_name(param_path +
"/Branch_2/Conv2d_0a_1x1/BatchNorm")
543 get_weights_accessor(data_path, total_path +
"Branch_2_Conv2d_0b_7x1_weights.npy", weights_layout),
544 std::unique_ptr<arm_compute::graph::ITensorAccessor>(
nullptr),
PadStrideInfo(1, 1, 0, 3))
545 .
set_name(param_path +
"/Branch_2/Conv2d_0b_7x1/Conv2D")
547 get_weights_accessor(data_path, total_path +
"Branch_2_Conv2d_0b_7x1_BatchNorm_moving_variance.npy"),
551 .
set_name(param_path +
"/Branch_2/Conv2d_0b_7x1/BatchNorm")
554 get_weights_accessor(data_path, total_path +
"Branch_2_Conv2d_0c_1x7_weights.npy", weights_layout),
555 std::unique_ptr<arm_compute::graph::ITensorAccessor>(
nullptr),
PadStrideInfo(1, 1, 3, 0))
556 .
set_name(param_path +
"/Branch_2/Conv2d_0c_1x7/Conv2D")
558 get_weights_accessor(data_path, total_path +
"Branch_2_Conv2d_0c_1x7_BatchNorm_moving_variance.npy"),
562 .
set_name(param_path +
"/Branch_2/Conv2d_0c_1x7/BatchNorm")
565 get_weights_accessor(data_path, total_path +
"Branch_2_Conv2d_0d_7x1_weights.npy", weights_layout),
566 std::unique_ptr<arm_compute::graph::ITensorAccessor>(
nullptr),
PadStrideInfo(1, 1, 0, 3))
567 .
set_name(param_path +
"/Branch_2/Conv2d_0d_7x1/Conv2D")
569 get_weights_accessor(data_path, total_path +
"Branch_2_Conv2d_0d_7x1_BatchNorm_moving_variance.npy"),
573 .
set_name(param_path +
"/Branch_2/Conv2d_0d_7x1/BatchNorm")
576 get_weights_accessor(data_path, total_path +
"Branch_2_Conv2d_0e_1x7_weights.npy", weights_layout),
577 std::unique_ptr<arm_compute::graph::ITensorAccessor>(
nullptr),
PadStrideInfo(1, 1, 3, 0))
578 .
set_name(param_path +
"/Branch_2/Conv2d_0e_1x7/Conv2D")
580 get_weights_accessor(data_path, total_path +
"Branch_2_Conv2d_0e_1x7_BatchNorm_moving_variance.npy"),
584 .
set_name(param_path +
"/Branch_2/Conv2d_0e_1x7/BatchNorm")
590 .
set_name(param_path +
"/Branch_3/AvgPool_0a_3x3/AvgPool")
592 get_weights_accessor(data_path, total_path +
"Branch_3_Conv2d_0b_1x1_weights.npy", weights_layout),
593 std::unique_ptr<arm_compute::graph::ITensorAccessor>(
nullptr),
PadStrideInfo(1, 1, 0, 0))
594 .
set_name(param_path +
"/Branch_3/Conv2d_0b_1x1/Conv2D")
596 get_weights_accessor(data_path, total_path +
"Branch_3_Conv2d_0b_1x1_BatchNorm_moving_variance.npy"),
600 .
set_name(param_path +
"/Branch_3/Conv2d_0b_1x1/BatchNorm")
603 return ConcatLayer(std::move(i_a), std::move(i_b), std::move(i_c), std::move(i_d));
608 std::string total_path =
"/cnn_data/inceptionv4_model/Mixed_7a_";
612 get_weights_accessor(data_path, total_path +
"Branch_0_Conv2d_0a_1x1_weights.npy", weights_layout),
613 std::unique_ptr<arm_compute::graph::ITensorAccessor>(
nullptr),
PadStrideInfo(1, 1, 0, 0))
614 .
set_name(
"Mixed_7a/Branch_1/Conv2d_0a_1x1/Conv2D")
616 get_weights_accessor(data_path, total_path +
"Branch_0_Conv2d_0a_1x1_BatchNorm_moving_variance.npy"),
620 .
set_name(
"Mixed_7a/Branch_1/Conv2d_0a_1x1/BatchNorm")
623 get_weights_accessor(data_path, total_path +
"Branch_0_Conv2d_1a_3x3_weights.npy", weights_layout),
624 std::unique_ptr<arm_compute::graph::ITensorAccessor>(
nullptr),
PadStrideInfo(2, 2, 0, 0))
625 .
set_name(
"Mixed_7a/Branch_0/Conv2d_1a_3x3/Conv2D")
627 get_weights_accessor(data_path, total_path +
"Branch_0_Conv2d_1a_3x3_BatchNorm_moving_variance.npy"),
631 .
set_name(
"Mixed_7a/Branch_0/Conv2d_1a_3x3/BatchNorm")
636 get_weights_accessor(data_path, total_path +
"Branch_1_Conv2d_0a_1x1_weights.npy", weights_layout),
637 std::unique_ptr<arm_compute::graph::ITensorAccessor>(
nullptr),
PadStrideInfo(1, 1, 0, 0))
638 .
set_name(
"Mixed_7a/Branch_1/Conv2d_0a_1x1/Conv2D")
640 get_weights_accessor(data_path, total_path +
"Branch_1_Conv2d_0a_1x1_BatchNorm_moving_variance.npy"),
644 .
set_name(
"Mixed_7a/Branch_1/Conv2d_0a_1x1/BatchNorm")
647 get_weights_accessor(data_path, total_path +
"Branch_1_Conv2d_0b_1x7_weights.npy", weights_layout),
648 std::unique_ptr<arm_compute::graph::ITensorAccessor>(
nullptr),
PadStrideInfo(1, 1, 3, 0))
649 .
set_name(
"Mixed_7a/Branch_1/Conv2d_0b_1x7/Conv2D")
651 get_weights_accessor(data_path, total_path +
"Branch_1_Conv2d_0b_1x7_BatchNorm_moving_variance.npy"),
655 .
set_name(
"Mixed_7a/Branch_1/Conv2d_0b_1x7/BatchNorm")
658 get_weights_accessor(data_path, total_path +
"Branch_1_Conv2d_0c_7x1_weights.npy", weights_layout),
659 std::unique_ptr<arm_compute::graph::ITensorAccessor>(
nullptr),
PadStrideInfo(1, 1, 0, 3))
660 .
set_name(
"Mixed_7a/Branch_1/Conv2d_0c_7x1/Conv2D")
662 get_weights_accessor(data_path, total_path +
"Branch_1_Conv2d_0c_7x1_BatchNorm_moving_variance.npy"),
666 .
set_name(
"Mixed_7a/Branch_1/Conv2d_0c_7x1/BatchNorm")
669 get_weights_accessor(data_path, total_path +
"Branch_1_Conv2d_1a_3x3_weights.npy", weights_layout),
670 std::unique_ptr<arm_compute::graph::ITensorAccessor>(
nullptr),
PadStrideInfo(2, 2, 0, 0))
671 .
set_name(
"Mixed_7a/Branch_1/Conv2d_1a_3x3/Conv2D")
673 get_weights_accessor(data_path, total_path +
"Branch_1_Conv2d_1a_3x3_BatchNorm_moving_variance.npy"),
677 .
set_name(
"Mixed_7a/Branch_1/Conv2d_1a_3x3/BatchNorm")
683 .
set_name(
"Mixed_7a/Branch_2/MaxPool_1a_3x3/MaxPool");
685 return ConcatLayer(std::move(i_a), std::move(i_b), std::move(i_c));
688 ConcatLayer get_inceptionC_block(
const std::string &data_path,
DataLayout weights_layout, std::string &¶m_path)
690 std::string total_path =
"/cnn_data/inceptionv4_model/" + param_path +
"_";
694 get_weights_accessor(data_path, total_path +
"Branch_0_Conv2d_0a_1x1_weights.npy", weights_layout),
695 std::unique_ptr<arm_compute::graph::ITensorAccessor>(
nullptr),
PadStrideInfo(1, 1, 0, 0))
696 .
set_name(param_path +
"/Branch_0/Conv2d_0a_1x1/Conv2D")
698 get_weights_accessor(data_path, total_path +
"Branch_0_Conv2d_0a_1x1_BatchNorm_moving_variance.npy"),
702 .
set_name(param_path +
"/Branch_0/Conv2d_0a_1x1/BatchNorm")
708 get_weights_accessor(data_path, total_path +
"Branch_1_Conv2d_0a_1x1_weights.npy", weights_layout),
709 std::unique_ptr<arm_compute::graph::ITensorAccessor>(
nullptr),
711 .
set_name(param_path +
"/Branch_1/Conv2d_0a_1x1/Conv2D")
713 get_weights_accessor(data_path, total_path +
"Branch_1_Conv2d_0a_1x1_BatchNorm_moving_mean.npy"),
714 get_weights_accessor(data_path, total_path +
"Branch_1_Conv2d_0a_1x1_BatchNorm_moving_variance.npy"),
718 .
set_name(param_path +
"/Branch_1/Conv2d_0a_1x1/BatchNorm")
724 get_weights_accessor(data_path, total_path +
"Branch_1_Conv2d_0b_1x3_weights.npy", weights_layout),
725 std::unique_ptr<arm_compute::graph::ITensorAccessor>(
nullptr),
727 .
set_name(param_path +
"/Branch_1/Conv2d_0b_1x3/Conv2D")
729 get_weights_accessor(data_path, total_path +
"Branch_1_Conv2d_0b_1x3_BatchNorm_moving_mean.npy"),
730 get_weights_accessor(data_path, total_path +
"Branch_1_Conv2d_0b_1x3_BatchNorm_moving_variance.npy"),
734 .
set_name(param_path +
"/Branch_1/Conv2d_0b_1x3/BatchNorm")
740 get_weights_accessor(data_path, total_path +
"Branch_1_Conv2d_0c_3x1_weights.npy", weights_layout),
741 std::unique_ptr<arm_compute::graph::ITensorAccessor>(
nullptr),
743 .
set_name(param_path +
"/Branch_1/Conv2d_0c_3x1/Conv2D")
745 get_weights_accessor(data_path, total_path +
"Branch_1_Conv2d_0c_3x1_BatchNorm_moving_mean.npy"),
746 get_weights_accessor(data_path, total_path +
"Branch_1_Conv2d_0c_3x1_BatchNorm_moving_variance.npy"),
750 .
set_name(param_path +
"/Branch_1/Conv2d_0c_3x1/BatchNorm")
754 i_b <<
ConcatLayer(std::move(i_b1), std::move(i_b2)).
set_name(param_path +
"/Branch_1/concat");
759 get_weights_accessor(data_path, total_path +
"Branch_2_Conv2d_0a_1x1_weights.npy", weights_layout),
760 std::unique_ptr<arm_compute::graph::ITensorAccessor>(
nullptr),
762 .
set_name(param_path +
"/Branch_2/Conv2d_0a_1x1/Conv2D")
764 get_weights_accessor(data_path, total_path +
"Branch_2_Conv2d_0a_1x1_BatchNorm_moving_mean.npy"),
765 get_weights_accessor(data_path, total_path +
"Branch_2_Conv2d_0a_1x1_BatchNorm_moving_variance.npy"),
769 .
set_name(param_path +
"/Branch_2/Conv2d_0a_1x1/BatchNorm")
773 get_weights_accessor(data_path, total_path +
"Branch_2_Conv2d_0b_3x1_weights.npy", weights_layout),
774 std::unique_ptr<arm_compute::graph::ITensorAccessor>(
nullptr),
776 .
set_name(param_path +
"/Branch_2/Conv2d_0b_3x1/Conv2D")
778 get_weights_accessor(data_path, total_path +
"Branch_2_Conv2d_0b_3x1_BatchNorm_moving_mean.npy"),
779 get_weights_accessor(data_path, total_path +
"Branch_2_Conv2d_0b_3x1_BatchNorm_moving_variance.npy"),
783 .
set_name(param_path +
"/Branch_2/Conv2d_0b_3x1/BatchNorm")
787 get_weights_accessor(data_path, total_path +
"Branch_2_Conv2d_0c_1x3_weights.npy", weights_layout),
788 std::unique_ptr<arm_compute::graph::ITensorAccessor>(
nullptr),
790 .
set_name(param_path +
"/Branch_2/Conv2d_0c_1x3/Conv2D")
792 get_weights_accessor(data_path, total_path +
"Branch_2_Conv2d_0c_1x3_BatchNorm_moving_mean.npy"),
793 get_weights_accessor(data_path, total_path +
"Branch_2_Conv2d_0c_1x3_BatchNorm_moving_variance.npy"),
797 .
set_name(param_path +
"/Branch_2/Conv2d_0c_1x3/BatchNorm")
803 get_weights_accessor(data_path, total_path +
"Branch_2_Conv2d_0d_1x3_weights.npy", weights_layout),
804 std::unique_ptr<arm_compute::graph::ITensorAccessor>(
nullptr),
806 .
set_name(param_path +
"/Branch_2/Conv2d_0d_1x3/Conv2D")
808 get_weights_accessor(data_path, total_path +
"Branch_2_Conv2d_0d_1x3_BatchNorm_moving_mean.npy"),
809 get_weights_accessor(data_path, total_path +
"Branch_2_Conv2d_0d_1x3_BatchNorm_moving_variance.npy"),
813 .
set_name(param_path +
"/Branch_2/Conv2d_0d_1x3/BatchNorm")
819 get_weights_accessor(data_path, total_path +
"Branch_2_Conv2d_0e_3x1_weights.npy", weights_layout),
820 std::unique_ptr<arm_compute::graph::ITensorAccessor>(
nullptr),
822 .
set_name(param_path +
"/Branch_2/Conv2d_0e_3x1/Conv2D")
824 get_weights_accessor(data_path, total_path +
"Branch_2_Conv2d_0e_3x1_BatchNorm_moving_mean.npy"),
825 get_weights_accessor(data_path, total_path +
"Branch_2_Conv2d_0e_3x1_BatchNorm_moving_variance.npy"),
829 .
set_name(param_path +
"/Branch_2/Conv2d_0e_3x1/BatchNorm")
833 i_c <<
ConcatLayer(std::move(i_c1), std::move(i_c2)).
set_name(param_path +
"/Branch_2/concat");
838 .
set_name(param_path +
"/Branch_3/AvgPool_0a_3x3/AvgPool")
840 get_weights_accessor(data_path, total_path +
"Branch_3_Conv2d_0b_1x1_weights.npy", weights_layout),
841 std::unique_ptr<arm_compute::graph::ITensorAccessor>(
nullptr),
PadStrideInfo(1, 1, 0, 0))
842 .
set_name(param_path +
"/Branch_3/Conv2d_0b_1x1/Conv2D")
844 get_weights_accessor(data_path, total_path +
"Branch_3_Conv2d_0b_1x1_BatchNorm_moving_variance.npy"),
848 .
set_name(param_path +
"/Branch_3/Conv2d_0b_1x1/BatchNorm")
851 return ConcatLayer(std::move(i_a), std::move(i_b), std::move(i_c), std::move(i_d));
869 int main(
int argc,
char **argv)
871 return arm_compute::utils::run_example<InceptionV4Example>(argc, argv);
Graph configuration structure Device target types.
CLTunerMode tuner_mode
Tuner mode to be used by the CL tuner.
void restore_program_cache_from_file(const std::string &filename="cache.bin")
This function loads prebuilt opencl kernels from a file.
std::unique_ptr< graph::ITensorAccessor > get_input_accessor(const arm_compute::utils::CommonGraphParams &graph_parameters, std::unique_ptr< IPreprocessor > preprocessor=nullptr, bool bgr=true)
Generates appropriate input accessor according to the specified graph parameters. ...
bool convert_to_uint8
Convert graph to a synthetic uint8 graph.
void consume_common_graph_parameters(CommonGraphValidateOptions &options, CommonParams &common_params)
Consumes the consume_common_graph_parameters graph options and creates a structure containing any inf...
Includes all the Graph headers at once.
Common command line options used to configure the graph examples.
Class to parse command line arguments.
arm_compute::DataLayout data_layout
Activation Layer Information class.
Copyright (c) 2017-2021 Arm Limited.
std::string mlgo_file
Filename to load MLGO heuristics from.
std::unique_ptr< graph::ITensorAccessor > get_random_accessor(PixelValue lower, PixelValue upper, const std::random_device::result_type seed=0)
Generates appropriate random accessor.
std::string tuner_file
File to load/store tuning values from.
quantized, asymmetric fixed-point 8-bit number unsigned
int main(int argc, char **argv)
Main program for Inception V4.
Pooling Layer Information struct.
void save_program_cache_to_file(const std::string &filename="cache.bin")
This function saves opencl kernels library to a file.
Padding and stride information class.
Num samples, channels, height, width.
TensorShape permute_shape(TensorShape tensor_shape, DataLayout in_data_layout, DataLayout out_data_layout)
Permutes a given tensor shape given the input and output data layout.
TensorDescriptor & set_layout(DataLayout data_layout)
Sets tensor descriptor data layout.
Structure holding all the common graph parameters.
std::unique_ptr< graph::ITensorAccessor > get_output_accessor(const arm_compute::utils::CommonGraphParams &graph_parameters, size_t top_n=5, bool is_validation=false, std::ostream &output_stream=std::cout)
Generates appropriate output accessor according to the specified graph parameters.
bool use_tuner
Use a tuner in tunable backends.
std::unique_ptr< graph::ITensorAccessor > get_weights_accessor(const std::string &path, const std::string &data_file, DataLayout file_layout=DataLayout::NCHW)
Generates appropriate weights accessor according to the specified path.
int num_threads
Number of threads to use (thread capable backends), if 0 the backend will auto-initialize, if -1 the backend will stay as it is.
Stream frontend class to construct simple graphs in a stream fashion.
Batchnormalization Layer.
DataLayout
[DataLayout enum definition]
ILayer & set_name(std::string name)
Sets the name of the layer.