35 class InceptionV3Example :
public Example 39 : cmd_parser(), common_opts(cmd_parser), common_params(), graph(0,
"InceptionV3")
42 bool do_setup(
int argc,
char **argv)
override 45 cmd_parser.parse(argc, argv);
46 cmd_parser.validate();
52 if(common_params.help)
54 cmd_parser.print_help(argv[0]);
59 std::cout << common_params << std::endl;
62 std::string data_path = common_params.data_path;
65 std::unique_ptr<IPreprocessor> preprocessor = std::make_unique<TFPreproccessor>();
68 const auto operation_layout = common_params.data_layout;
75 graph << common_params.target
76 << common_params.fast_math_hint
79 get_weights_accessor(data_path,
"/cnn_data/inceptionv3_model/Conv2d_1a_3x3_weights.npy", weights_layout),
80 std::unique_ptr<arm_compute::graph::ITensorAccessor>(
nullptr), PadStrideInfo(2, 2, 0, 0))
81 .
set_name(
"Conv2d_1a_3x3/convolution")
83 "/cnn_data/inceptionv3_model/Conv2d_1a_3x3_BatchNorm_moving_mean.npy"),
85 "/cnn_data/inceptionv3_model/Conv2d_1a_3x3_BatchNorm_moving_variance.npy"),
87 "/cnn_data/inceptionv3_model/Conv2d_1a_3x3_BatchNorm_beta.npy"),
89 .
set_name(
"Conv2d_1a_3x3/BatchNorm/batchnorm")
92 get_weights_accessor(data_path,
"/cnn_data/inceptionv3_model/Conv2d_2a_3x3_weights.npy", weights_layout),
93 std::unique_ptr<arm_compute::graph::ITensorAccessor>(
nullptr), PadStrideInfo(1, 1, 0, 0))
94 .
set_name(
"Conv2d_2a_3x3/convolution")
96 "/cnn_data/inceptionv3_model/Conv2d_2a_3x3_BatchNorm_moving_mean.npy"),
98 "/cnn_data/inceptionv3_model/Conv2d_2a_3x3_BatchNorm_moving_variance.npy"),
100 "/cnn_data/inceptionv3_model/Conv2d_2a_3x3_BatchNorm_beta.npy"),
102 .
set_name(
"Conv2d_2a_3x3/BatchNorm/batchnorm")
106 get_weights_accessor(data_path,
"/cnn_data/inceptionv3_model/Conv2d_2b_3x3_weights.npy", weights_layout),
107 std::unique_ptr<arm_compute::graph::ITensorAccessor>(
nullptr), PadStrideInfo(1, 1, 1, 1))
108 .
set_name(
"Conv2d_2b_3x3/convolution")
110 "/cnn_data/inceptionv3_model/Conv2d_2b_3x3_BatchNorm_moving_mean.npy"),
112 "/cnn_data/inceptionv3_model/Conv2d_2b_3x3_BatchNorm_moving_variance.npy"),
114 "/cnn_data/inceptionv3_model/Conv2d_2b_3x3_BatchNorm_beta.npy"),
116 .
set_name(
"Conv2d_2b_3x3/BatchNorm/batchnorm")
122 get_weights_accessor(data_path,
"/cnn_data/inceptionv3_model/Conv2d_3b_1x1_weights.npy", weights_layout),
123 std::unique_ptr<arm_compute::graph::ITensorAccessor>(
nullptr), PadStrideInfo(1, 1, 0, 0))
124 .
set_name(
"Conv2d_3b_1x1/convolution")
126 "/cnn_data/inceptionv3_model/Conv2d_3b_1x1_BatchNorm_moving_mean.npy"),
128 "/cnn_data/inceptionv3_model/Conv2d_3b_1x1_BatchNorm_moving_variance.npy"),
130 "/cnn_data/inceptionv3_model/Conv2d_3b_1x1_BatchNorm_beta.npy"),
132 .
set_name(
"Conv2d_3b_1x1/BatchNorm/batchnorm")
136 get_weights_accessor(data_path,
"/cnn_data/inceptionv3_model/Conv2d_4a_3x3_weights.npy", weights_layout),
137 std::unique_ptr<arm_compute::graph::ITensorAccessor>(
nullptr), PadStrideInfo(1, 1, 0, 0))
138 .
set_name(
"Conv2d_4a_3x3/convolution")
140 "/cnn_data/inceptionv3_model/Conv2d_4a_3x3_BatchNorm_moving_mean.npy"),
142 "/cnn_data/inceptionv3_model/Conv2d_4a_3x3_BatchNorm_moving_variance.npy"),
144 "/cnn_data/inceptionv3_model/Conv2d_4a_3x3_BatchNorm_beta.npy"),
146 .
set_name(
"Conv2d_4a_3x3/BatchNorm/batchnorm")
151 graph << get_inception_node_A(data_path,
"Mixed_5b", weights_layout, 64U, std::make_tuple(48U, 64U), std::make_tuple(64U, 96U, 96U),
154 graph << get_inception_node_A(data_path,
"Mixed_5c", weights_layout, 64U, std::make_tuple(48U, 64U), std::make_tuple(64U, 96U, 96U),
157 graph << get_inception_node_A(data_path,
"Mixed_5d", weights_layout, 64U, std::make_tuple(48U, 64U), std::make_tuple(64U, 96U, 96U),
161 graph << get_inception_node_B(data_path,
"Mixed_6a", weights_layout, 384U, std::make_tuple(64U, 96U, 96U)).
set_name(
"Mixed_6a/concat");
163 graph << get_inception_node_C(data_path,
"Mixed_6b", weights_layout, 192U, std::make_tuple(128U, 128U, 192U),
164 std::make_tuple(128U, 128U, 128U, 128U, 192U), 192U)
166 graph << get_inception_node_C(data_path,
"Mixed_6c", weights_layout, 192U, std::make_tuple(160U, 160U, 192U),
167 std::make_tuple(160U, 160U, 160U, 160U, 192U), 192U)
169 graph << get_inception_node_C(data_path,
"Mixed_6d", weights_layout, 192U, std::make_tuple(160U, 160U, 192U),
170 std::make_tuple(160U, 160U, 160U, 160U, 192U), 192U)
172 graph << get_inception_node_C(data_path,
"Mixed_6e", weights_layout, 192U, std::make_tuple(192U, 192U, 192U),
173 std::make_tuple(192U, 192U, 192U, 192U, 192U), 192U)
176 graph << get_inception_node_D(data_path,
"Mixed_7a", weights_layout, std::make_tuple(192U, 320U),
177 std::make_tuple(192U, 192U, 192U, 192U))
180 graph << get_inception_node_E(data_path,
"Mixed_7b", weights_layout, 320U, std::make_tuple(384U, 384U, 384U),
181 std::make_tuple(448U, 384U, 384U, 384U), 192U)
183 graph << get_inception_node_E(data_path,
"Mixed_7c", weights_layout, 320U, std::make_tuple(384U, 384U, 384U),
184 std::make_tuple(448U, 384U, 384U, 384U), 192U,
true)
189 "/cnn_data/inceptionv3_model/Logits_Conv2d_1c_1x1_weights.npy", weights_layout),
191 "/cnn_data/inceptionv3_model/Logits_Conv2d_1c_1x1_biases.npy"),
192 PadStrideInfo(1, 1, 0, 0))
193 .
set_name(
"Logits/Conv2d_1c_1x1/convolution")
201 config.
use_tuner = common_params.enable_tuner;
204 config.
mlgo_file = common_params.mlgo_file;
207 graph.finalize(common_params.target, config);
212 void do_run()
override 224 ConcatLayer get_inception_node_A(
const std::string &data_path, std::string &¶m_path,
DataLayout weights_layout,
226 std::tuple<unsigned int, unsigned int> b_filters,
227 std::tuple<unsigned int, unsigned int, unsigned int> c_filters,
229 bool is_name_different =
false)
231 std::string total_path =
"/cnn_data/inceptionv3_model/" + param_path +
"_";
234 std::string conv_id0 =
"_0a_";
235 std::string conv_id1 =
"2d_0b_";
236 if(is_name_different)
245 get_weights_accessor(data_path, total_path +
"Branch_0_Conv2d_0a_1x1_weights.npy", weights_layout),
246 std::unique_ptr<arm_compute::graph::ITensorAccessor>(
nullptr),
247 PadStrideInfo(1, 1, 0, 0))
248 .
set_name(param_path +
"/Branch_0/Conv2d_0a_1x1/convolution")
250 get_weights_accessor(data_path, total_path +
"Branch_0_Conv2d_0a_1x1_BatchNorm_moving_mean.npy"),
251 get_weights_accessor(data_path, total_path +
"Branch_0_Conv2d_0a_1x1_BatchNorm_moving_variance.npy"),
255 .
set_name(param_path +
"/Branch_0/Conv2d_0a_1x1/BatchNorm/batchnorm")
260 1U, 1U, std::get<0>(b_filters),
261 get_weights_accessor(data_path, total_path +
"Branch_1_Conv2d" + conv_id0 +
"1x1_weights.npy", weights_layout),
262 std::unique_ptr<arm_compute::graph::ITensorAccessor>(
nullptr),
263 PadStrideInfo(1, 1, 0, 0))
264 .
set_name(param_path +
"/Branch_1/Conv2d" + conv_id0 +
"1x1/convolution")
266 get_weights_accessor(data_path, total_path +
"Branch_1_Conv2d" + conv_id0 +
"1x1_BatchNorm_moving_mean.npy"),
267 get_weights_accessor(data_path, total_path +
"Branch_1_Conv2d" + conv_id0 +
"1x1_BatchNorm_moving_variance.npy"),
269 get_weights_accessor(data_path, total_path +
"Branch_1_Conv2d" + conv_id0 +
"1x1_BatchNorm_beta.npy"),
271 .
set_name(param_path +
"/Branch_1/Conv2d" + conv_id0 +
"1x1/BatchNorm/batchnorm")
274 5U, 5U, std::get<1>(b_filters),
275 get_weights_accessor(data_path, total_path +
"Branch_1_Conv" + conv_id1 +
"5x5_weights.npy", weights_layout),
276 std::unique_ptr<arm_compute::graph::ITensorAccessor>(
nullptr),
277 PadStrideInfo(1, 1, 2, 2))
278 .
set_name(param_path +
"/Branch_1/Conv2d" + conv_id1 +
"5x5/convolution")
280 get_weights_accessor(data_path, total_path +
"Branch_1_Conv" + conv_id1 +
"5x5_BatchNorm_moving_mean.npy"),
281 get_weights_accessor(data_path, total_path +
"Branch_1_Conv" + conv_id1 +
"5x5_BatchNorm_moving_variance.npy"),
283 get_weights_accessor(data_path, total_path +
"Branch_1_Conv" + conv_id1 +
"5x5_BatchNorm_beta.npy"),
285 .
set_name(param_path +
"/Branch_1/Conv2d" + conv_id1 +
"5x5/BatchNorm/batchnorm")
290 1U, 1U, std::get<0>(c_filters),
291 get_weights_accessor(data_path, total_path +
"Branch_2_Conv2d_0a_1x1_weights.npy", weights_layout),
292 std::unique_ptr<arm_compute::graph::ITensorAccessor>(
nullptr),
293 PadStrideInfo(1, 1, 0, 0))
294 .
set_name(param_path +
"/Branch_2/Conv2d_0a_1x1/convolution")
296 get_weights_accessor(data_path, total_path +
"Branch_2_Conv2d_0a_1x1_BatchNorm_moving_mean.npy"),
297 get_weights_accessor(data_path, total_path +
"Branch_2_Conv2d_0a_1x1_BatchNorm_moving_variance.npy"),
301 .
set_name(param_path +
"/Branch_2/Conv2d_0a_1x1/BatchNorm/batchnorm")
304 3U, 3U, std::get<1>(c_filters),
305 get_weights_accessor(data_path, total_path +
"Branch_2_Conv2d_0b_3x3_weights.npy", weights_layout),
306 std::unique_ptr<arm_compute::graph::ITensorAccessor>(
nullptr),
307 PadStrideInfo(1, 1, 1, 1))
308 .
set_name(param_path +
"/Branch_2/Conv2d_0b_3x3/convolution")
310 get_weights_accessor(data_path, total_path +
"Branch_2_Conv2d_0b_3x3_BatchNorm_moving_mean.npy"),
311 get_weights_accessor(data_path, total_path +
"Branch_2_Conv2d_0b_3x3_BatchNorm_moving_variance.npy"),
315 .
set_name(param_path +
"/Branch_2/Conv2d_0b_3x3/BatchNorm/batchnorm")
318 3U, 3U, std::get<2>(c_filters),
319 get_weights_accessor(data_path, total_path +
"Branch_2_Conv2d_0c_3x3_weights.npy", weights_layout),
320 std::unique_ptr<arm_compute::graph::ITensorAccessor>(
nullptr),
321 PadStrideInfo(1, 1, 1, 1))
322 .
set_name(param_path +
"/Branch_2/Conv2d_0c_3x3/convolution")
324 get_weights_accessor(data_path, total_path +
"Branch_2_Conv2d_0c_3x3_BatchNorm_moving_mean.npy"),
325 get_weights_accessor(data_path, total_path +
"Branch_2_Conv2d_0c_3x3_BatchNorm_moving_variance.npy"),
329 .
set_name(param_path +
"/Branch_2/Conv2d_0c_3x3/BatchNorm/batcnorm")
335 .
set_name(param_path +
"/Branch_3/AvgPool_0a_3x3/AvgPool")
338 get_weights_accessor(data_path, total_path +
"Branch_3_Conv2d_0b_1x1_weights.npy", weights_layout),
339 std::unique_ptr<arm_compute::graph::ITensorAccessor>(
nullptr),
340 PadStrideInfo(1, 1, 0, 0))
341 .
set_name(param_path +
"/Branch_3/Conv2d_0b_1x1/convolution")
343 get_weights_accessor(data_path, total_path +
"Branch_3_Conv2d_0b_1x1_BatchNorm_moving_mean.npy"),
344 get_weights_accessor(data_path, total_path +
"Branch_3_Conv2d_0b_1x1_BatchNorm_moving_variance.npy"),
348 .
set_name(param_path +
"/Branch_3/Conv2d_0b_1x1/BatchNorm/batchnorm")
351 return ConcatLayer(std::move(i_a), std::move(i_b), std::move(i_c), std::move(i_d));
354 ConcatLayer get_inception_node_B(
const std::string &data_path, std::string &¶m_path,
DataLayout weights_layout,
356 std::tuple<unsigned int, unsigned int, unsigned int> b_filters)
358 std::string total_path =
"/cnn_data/inceptionv3_model/" + param_path +
"_";
362 get_weights_accessor(data_path, total_path +
"Branch_0_Conv2d_1a_1x1_weights.npy", weights_layout),
363 std::unique_ptr<arm_compute::graph::ITensorAccessor>(
nullptr),
364 PadStrideInfo(2, 2, 0, 0))
365 .
set_name(param_path +
"/Branch_0/Conv2d_1a_1x1/convolution")
367 get_weights_accessor(data_path, total_path +
"Branch_0_Conv2d_1a_1x1_BatchNorm_moving_mean.npy"),
368 get_weights_accessor(data_path, total_path +
"Branch_0_Conv2d_1a_1x1_BatchNorm_moving_variance.npy"),
372 .
set_name(param_path +
"/Branch_0/Conv2d_1a_1x1/BatchNorm/batchnorm")
377 1U, 1U, std::get<0>(b_filters),
378 get_weights_accessor(data_path, total_path +
"Branch_1_Conv2d_0a_1x1_weights.npy", weights_layout),
379 std::unique_ptr<arm_compute::graph::ITensorAccessor>(
nullptr),
380 PadStrideInfo(1, 1, 0, 0))
381 .
set_name(param_path +
"/Branch_1/Conv2d_0a_1x1/convolution")
383 get_weights_accessor(data_path, total_path +
"Branch_1_Conv2d_0a_1x1_BatchNorm_moving_mean.npy"),
384 get_weights_accessor(data_path, total_path +
"Branch_1_Conv2d_0a_1x1_BatchNorm_moving_variance.npy"),
388 .
set_name(param_path +
"/Branch_1/Conv2d_0a_1x1/BatchNorm/batchnorm")
391 3U, 3U, std::get<1>(b_filters),
392 get_weights_accessor(data_path, total_path +
"Branch_1_Conv2d_0b_3x3_weights.npy", weights_layout),
393 std::unique_ptr<arm_compute::graph::ITensorAccessor>(
nullptr),
394 PadStrideInfo(1, 1, 1, 1))
395 .
set_name(param_path +
"/Branch_1/Conv2d_0b_3x3/convolution")
397 get_weights_accessor(data_path, total_path +
"Branch_1_Conv2d_0b_3x3_BatchNorm_moving_mean.npy"),
398 get_weights_accessor(data_path, total_path +
"Branch_1_Conv2d_0b_3x3_BatchNorm_moving_variance.npy"),
402 .
set_name(param_path +
"/Branch_1/Conv2d_0b_3x3/BatchNorm/batchnorm")
405 3U, 3U, std::get<2>(b_filters),
406 get_weights_accessor(data_path, total_path +
"Branch_1_Conv2d_1a_1x1_weights.npy", weights_layout),
407 std::unique_ptr<arm_compute::graph::ITensorAccessor>(
nullptr),
408 PadStrideInfo(2, 2, 0, 0))
409 .
set_name(param_path +
"/Branch_1/Conv2d_1a_1x1/convolution")
411 get_weights_accessor(data_path, total_path +
"Branch_1_Conv2d_1a_1x1_BatchNorm_moving_mean.npy"),
412 get_weights_accessor(data_path, total_path +
"Branch_1_Conv2d_1a_1x1_BatchNorm_moving_variance.npy"),
416 .
set_name(param_path +
"/Branch_1/Conv2d_1a_1x1/BatchNorm/batchnorm")
422 return ConcatLayer(std::move(i_a), std::move(i_b), std::move(i_c));
425 ConcatLayer get_inception_node_C(
const std::string &data_path, std::string &¶m_path,
DataLayout weights_layout,
427 std::tuple<unsigned int, unsigned int, unsigned int> b_filters,
428 std::tuple<unsigned int, unsigned int, unsigned int, unsigned int, unsigned int> c_filters,
431 std::string total_path =
"/cnn_data/inceptionv3_model/" + param_path +
"_";
435 get_weights_accessor(data_path, total_path +
"Branch_0_Conv2d_0a_1x1_weights.npy", weights_layout),
436 std::unique_ptr<arm_compute::graph::ITensorAccessor>(
nullptr),
437 PadStrideInfo(1, 1, 0, 0))
438 .
set_name(param_path +
"/Branch_0/Conv2d_0a_1x1/convolution")
440 get_weights_accessor(data_path, total_path +
"Branch_0_Conv2d_0a_1x1_BatchNorm_moving_mean.npy"),
441 get_weights_accessor(data_path, total_path +
"Branch_0_Conv2d_0a_1x1_BatchNorm_moving_variance.npy"),
445 .
set_name(param_path +
"/Branch_0/Conv2d_0a_1x1/BatchNorm/batchnorm")
450 1U, 1U, std::get<0>(b_filters),
451 get_weights_accessor(data_path, total_path +
"Branch_1_Conv2d_0a_1x1_weights.npy", weights_layout),
452 std::unique_ptr<arm_compute::graph::ITensorAccessor>(
nullptr),
453 PadStrideInfo(1, 1, 0, 0))
454 .
set_name(param_path +
"/Branch_1/Conv2d_0a_1x1/convolution")
456 get_weights_accessor(data_path, total_path +
"Branch_1_Conv2d_0a_1x1_BatchNorm_moving_mean.npy"),
457 get_weights_accessor(data_path, total_path +
"Branch_1_Conv2d_0a_1x1_BatchNorm_moving_variance.npy"),
461 .
set_name(param_path +
"/Branch_1/Conv2d_0a_1x1/BatchNorm/batchnorm")
464 7U, 1U, std::get<1>(b_filters),
465 get_weights_accessor(data_path, total_path +
"Branch_1_Conv2d_0b_1x7_weights.npy", weights_layout),
466 std::unique_ptr<arm_compute::graph::ITensorAccessor>(
nullptr),
467 PadStrideInfo(1, 1, 3, 0))
468 .
set_name(param_path +
"/Branch_1/Conv2d_0b_1x7/convolution")
470 get_weights_accessor(data_path, total_path +
"Branch_1_Conv2d_0b_1x7_BatchNorm_moving_mean.npy"),
471 get_weights_accessor(data_path, total_path +
"Branch_1_Conv2d_0b_1x7_BatchNorm_moving_variance.npy"),
475 .
set_name(param_path +
"/Branch_1/Conv2d_0b_1x7/BatchNorm/batchnorm")
478 1U, 7U, std::get<2>(b_filters),
479 get_weights_accessor(data_path, total_path +
"Branch_1_Conv2d_0c_7x1_weights.npy", weights_layout),
480 std::unique_ptr<arm_compute::graph::ITensorAccessor>(
nullptr),
481 PadStrideInfo(1, 1, 0, 3))
482 .
set_name(param_path +
"/Branch_1/Conv2d_0c_7x1/convolution")
484 get_weights_accessor(data_path, total_path +
"Branch_1_Conv2d_0c_7x1_BatchNorm_moving_mean.npy"),
485 get_weights_accessor(data_path, total_path +
"Branch_1_Conv2d_0c_7x1_BatchNorm_moving_variance.npy"),
489 .
set_name(param_path +
"/Branch_1/Conv2d_0c_7x1/BatchNorm/batchnorm")
494 1U, 1U, std::get<0>(c_filters),
495 get_weights_accessor(data_path, total_path +
"Branch_2_Conv2d_0a_1x1_weights.npy", weights_layout),
496 std::unique_ptr<arm_compute::graph::ITensorAccessor>(
nullptr),
497 PadStrideInfo(1, 1, 0, 0))
498 .
set_name(param_path +
"/Branch_2/Conv2d_0a_1x1/convolution")
500 get_weights_accessor(data_path, total_path +
"Branch_2_Conv2d_0a_1x1_BatchNorm_moving_mean.npy"),
501 get_weights_accessor(data_path, total_path +
"Branch_2_Conv2d_0a_1x1_BatchNorm_moving_variance.npy"),
505 .
set_name(param_path +
"/Branch_2/Conv2d_0a_1x1/BatchNorm/batchnorm")
508 1U, 7U, std::get<1>(c_filters),
509 get_weights_accessor(data_path, total_path +
"Branch_2_Conv2d_0b_7x1_weights.npy", weights_layout),
510 std::unique_ptr<arm_compute::graph::ITensorAccessor>(
nullptr),
511 PadStrideInfo(1, 1, 0, 3))
512 .
set_name(param_path +
"/Branch_2/Conv2d_0b_7x1/convolution")
514 get_weights_accessor(data_path, total_path +
"Branch_2_Conv2d_0b_7x1_BatchNorm_moving_mean.npy"),
515 get_weights_accessor(data_path, total_path +
"Branch_2_Conv2d_0b_7x1_BatchNorm_moving_variance.npy"),
519 .
set_name(param_path +
"/Branch_2/Conv2d_0b_7x1/BatchNorm/batchnorm")
522 7U, 1U, std::get<2>(c_filters),
523 get_weights_accessor(data_path, total_path +
"Branch_2_Conv2d_0c_1x7_weights.npy", weights_layout),
524 std::unique_ptr<arm_compute::graph::ITensorAccessor>(
nullptr),
525 PadStrideInfo(1, 1, 3, 0))
526 .
set_name(param_path +
"/Branch_2/Conv2d_0c_1x7/convolution")
528 get_weights_accessor(data_path, total_path +
"Branch_2_Conv2d_0c_1x7_BatchNorm_moving_mean.npy"),
529 get_weights_accessor(data_path, total_path +
"Branch_2_Conv2d_0c_1x7_BatchNorm_moving_variance.npy"),
533 .
set_name(param_path +
"/Branch_2/Conv2d_0c_1x7/BatchNorm/batchnorm")
536 1U, 7U, std::get<3>(c_filters),
537 get_weights_accessor(data_path, total_path +
"Branch_2_Conv2d_0d_7x1_weights.npy", weights_layout),
538 std::unique_ptr<arm_compute::graph::ITensorAccessor>(
nullptr),
539 PadStrideInfo(1, 1, 0, 3))
540 .
set_name(param_path +
"/Branch_2/Conv2d_0d_7x1/convolution")
542 get_weights_accessor(data_path, total_path +
"Branch_2_Conv2d_0d_7x1_BatchNorm_moving_mean.npy"),
543 get_weights_accessor(data_path, total_path +
"Branch_2_Conv2d_0d_7x1_BatchNorm_moving_variance.npy"),
547 .
set_name(param_path +
"/Branch_2/Conv2d_0d_7x1/BatchNorm/batchnorm")
550 7U, 1U, std::get<4>(c_filters),
551 get_weights_accessor(data_path, total_path +
"Branch_2_Conv2d_0e_1x7_weights.npy", weights_layout),
552 std::unique_ptr<arm_compute::graph::ITensorAccessor>(
nullptr),
553 PadStrideInfo(1, 1, 3, 0))
554 .
set_name(param_path +
"/Branch_2/Conv2d_0e_1x7/convolution")
556 get_weights_accessor(data_path, total_path +
"Branch_2_Conv2d_0e_1x7_BatchNorm_moving_mean.npy"),
557 get_weights_accessor(data_path, total_path +
"Branch_2_Conv2d_0e_1x7_BatchNorm_moving_variance.npy"),
561 .
set_name(param_path +
"/Branch_2/Conv2d_0e_1x7/BatchNorm/batchnorm")
567 .
set_name(param_path +
"/Branch_3/AvgPool_0a_3x3/AvgPool")
570 get_weights_accessor(data_path, total_path +
"Branch_3_Conv2d_0b_1x1_weights.npy", weights_layout),
571 std::unique_ptr<arm_compute::graph::ITensorAccessor>(
nullptr),
572 PadStrideInfo(1, 1, 0, 0))
573 .
set_name(param_path +
"/Branch_3/Conv2d_0b_1x1/convolution")
575 get_weights_accessor(data_path, total_path +
"Branch_3_Conv2d_0b_1x1_BatchNorm_moving_mean.npy"),
576 get_weights_accessor(data_path, total_path +
"Branch_3_Conv2d_0b_1x1_BatchNorm_moving_variance.npy"),
580 .
set_name(param_path +
"/Branch_3/Conv2d_0b_1x1/BatchNorm/batchnorm")
583 return ConcatLayer(std::move(i_a), std::move(i_b), std::move(i_c), std::move(i_d));
586 ConcatLayer get_inception_node_D(
const std::string &data_path, std::string &¶m_path,
DataLayout weights_layout,
587 std::tuple<unsigned int, unsigned int> a_filters,
588 std::tuple<unsigned int, unsigned int, unsigned int, unsigned int> b_filters)
590 std::string total_path =
"/cnn_data/inceptionv3_model/" + param_path +
"_";
593 1U, 1U, std::get<0>(a_filters),
594 get_weights_accessor(data_path, total_path +
"Branch_0_Conv2d_0a_1x1_weights.npy", weights_layout),
595 std::unique_ptr<arm_compute::graph::ITensorAccessor>(
nullptr),
596 PadStrideInfo(1, 1, 0, 0))
597 .
set_name(param_path +
"/Branch_0/Conv2d_0a_1x1/convolution")
599 get_weights_accessor(data_path, total_path +
"Branch_0_Conv2d_0a_1x1_BatchNorm_moving_mean.npy"),
600 get_weights_accessor(data_path, total_path +
"Branch_0_Conv2d_0a_1x1_BatchNorm_moving_variance.npy"),
604 .
set_name(param_path +
"/Branch_0/Conv2d_0a_1x1/BatchNorm/batchnorm")
607 3U, 3U, std::get<1>(a_filters),
608 get_weights_accessor(data_path, total_path +
"Branch_0_Conv2d_1a_3x3_weights.npy", weights_layout),
609 std::unique_ptr<arm_compute::graph::ITensorAccessor>(
nullptr),
610 PadStrideInfo(2, 2, 0, 0))
611 .
set_name(param_path +
"/Branch_0/Conv2d_1a_3x3/convolution")
613 get_weights_accessor(data_path, total_path +
"Branch_0_Conv2d_1a_3x3_BatchNorm_moving_mean.npy"),
614 get_weights_accessor(data_path, total_path +
"Branch_0_Conv2d_1a_3x3_BatchNorm_moving_variance.npy"),
618 .
set_name(param_path +
"/Branch_0/Conv2d_1a_3x3/BatchNorm/batchnorm")
623 1U, 1U, std::get<0>(b_filters),
624 get_weights_accessor(data_path, total_path +
"Branch_1_Conv2d_0a_1x1_weights.npy", weights_layout),
625 std::unique_ptr<arm_compute::graph::ITensorAccessor>(
nullptr),
626 PadStrideInfo(1, 1, 0, 0))
627 .
set_name(param_path +
"/Branch_1/Conv2d_0a_1x1/convolution")
629 get_weights_accessor(data_path, total_path +
"Branch_1_Conv2d_0a_1x1_BatchNorm_moving_mean.npy"),
630 get_weights_accessor(data_path, total_path +
"Branch_1_Conv2d_0a_1x1_BatchNorm_moving_variance.npy"),
634 .
set_name(param_path +
"/Branch_1/Conv2d_0a_1x1/BatchNorm/batchnorm")
637 7U, 1U, std::get<1>(b_filters),
638 get_weights_accessor(data_path, total_path +
"Branch_1_Conv2d_0b_1x7_weights.npy", weights_layout),
639 std::unique_ptr<arm_compute::graph::ITensorAccessor>(
nullptr),
640 PadStrideInfo(1, 1, 3, 0))
641 .
set_name(param_path +
"/Branch_1/Conv2d_0b_1x7/convolution")
643 get_weights_accessor(data_path, total_path +
"Branch_1_Conv2d_0b_1x7_BatchNorm_moving_mean.npy"),
644 get_weights_accessor(data_path, total_path +
"Branch_1_Conv2d_0b_1x7_BatchNorm_moving_variance.npy"),
648 .
set_name(param_path +
"/Branch_1/Conv2d_0b_1x7/BatchNorm/batchnorm")
651 1U, 7U, std::get<2>(b_filters),
652 get_weights_accessor(data_path, total_path +
"Branch_1_Conv2d_0c_7x1_weights.npy", weights_layout),
653 std::unique_ptr<arm_compute::graph::ITensorAccessor>(
nullptr),
654 PadStrideInfo(1, 1, 0, 3))
655 .
set_name(param_path +
"/Branch_1/Conv2d_0c_7x1/convolution")
657 get_weights_accessor(data_path, total_path +
"Branch_1_Conv2d_0c_7x1_BatchNorm_moving_mean.npy"),
658 get_weights_accessor(data_path, total_path +
"Branch_1_Conv2d_0c_7x1_BatchNorm_moving_variance.npy"),
662 .
set_name(param_path +
"/Branch_1/Conv2d_0c_7x1/BatchNorm/batchnorm")
665 3U, 3U, std::get<3>(b_filters),
666 get_weights_accessor(data_path, total_path +
"Branch_1_Conv2d_1a_3x3_weights.npy", weights_layout),
667 std::unique_ptr<arm_compute::graph::ITensorAccessor>(
nullptr),
668 PadStrideInfo(2, 2, 0, 0))
669 .
set_name(param_path +
"/Branch_1/Conv2d_1a_3x3/convolution")
671 get_weights_accessor(data_path, total_path +
"Branch_1_Conv2d_1a_3x3_BatchNorm_moving_mean.npy"),
672 get_weights_accessor(data_path, total_path +
"Branch_1_Conv2d_1a_3x3_BatchNorm_moving_variance.npy"),
676 .
set_name(param_path +
"/Branch_1/Conv2d_1a_3x3/BatchNorm/batchnorm")
682 return ConcatLayer(std::move(i_a), std::move(i_b), std::move(i_c));
685 ConcatLayer get_inception_node_E(
const std::string &data_path, std::string &¶m_path,
DataLayout weights_layout,
687 std::tuple<unsigned int, unsigned int, unsigned int> b_filters,
688 std::tuple<unsigned int, unsigned int, unsigned int, unsigned int> c_filters,
690 bool is_name_different =
false)
693 std::string conv_id =
"_0b_";
694 if(is_name_different)
699 std::string total_path =
"/cnn_data/inceptionv3_model/" + param_path +
"_";
703 get_weights_accessor(data_path, total_path +
"Branch_0_Conv2d_0a_1x1_weights.npy", weights_layout),
704 std::unique_ptr<arm_compute::graph::ITensorAccessor>(
nullptr),
705 PadStrideInfo(1, 1, 0, 0))
706 .
set_name(param_path +
"/Branch_0/Conv2d_0a_1x1/convolution")
708 get_weights_accessor(data_path, total_path +
"Branch_0_Conv2d_0a_1x1_BatchNorm_moving_mean.npy"),
709 get_weights_accessor(data_path, total_path +
"Branch_0_Conv2d_0a_1x1_BatchNorm_moving_variance.npy"),
713 .
set_name(param_path +
"/Branch_0/Conv2d_0a_1x1/BatchNorm/batchnorm")
718 1U, 1U, std::get<0>(b_filters),
719 get_weights_accessor(data_path, total_path +
"Branch_1_Conv2d_0a_1x1_weights.npy", weights_layout),
720 std::unique_ptr<arm_compute::graph::ITensorAccessor>(
nullptr),
721 PadStrideInfo(1, 1, 0, 0))
722 .
set_name(param_path +
"/Branch_1/Conv2d_0a_1x1/convolution")
724 get_weights_accessor(data_path, total_path +
"Branch_1_Conv2d_0a_1x1_BatchNorm_moving_mean.npy"),
725 get_weights_accessor(data_path, total_path +
"Branch_1_Conv2d_0a_1x1_BatchNorm_moving_variance.npy"),
729 .
set_name(param_path +
"/Branch_1/Conv2d_0a_1x1/BatchNorm/batchnorm")
734 3U, 1U, std::get<1>(b_filters),
735 get_weights_accessor(data_path, total_path +
"Branch_1_Conv2d_0b_1x3_weights.npy", weights_layout),
736 std::unique_ptr<arm_compute::graph::ITensorAccessor>(
nullptr),
737 PadStrideInfo(1, 1, 1, 0))
738 .
set_name(param_path +
"/Branch_1/Conv2d_0b_1x3/convolution")
740 get_weights_accessor(data_path, total_path +
"Branch_1_Conv2d_0b_1x3_BatchNorm_moving_mean.npy"),
741 get_weights_accessor(data_path, total_path +
"Branch_1_Conv2d_0b_1x3_BatchNorm_moving_variance.npy"),
745 .
set_name(param_path +
"/Branch_1/Conv2d_0b_1x3/BatchNorm/batchnorm")
750 1U, 3U, std::get<2>(b_filters),
751 get_weights_accessor(data_path, total_path +
"Branch_1_Conv2d" + conv_id +
"3x1_weights.npy", weights_layout),
752 std::unique_ptr<arm_compute::graph::ITensorAccessor>(
nullptr),
753 PadStrideInfo(1, 1, 0, 1))
754 .
set_name(param_path +
"/Branch_1/Conv2d" + conv_id +
"3x1/convolution")
756 get_weights_accessor(data_path, total_path +
"Branch_1_Conv2d" + conv_id +
"3x1_BatchNorm_moving_mean.npy"),
757 get_weights_accessor(data_path, total_path +
"Branch_1_Conv2d" + conv_id +
"3x1_BatchNorm_moving_variance.npy"),
759 get_weights_accessor(data_path, total_path +
"Branch_1_Conv2d" + conv_id +
"3x1_BatchNorm_beta.npy"),
761 .
set_name(param_path +
"/Branch_1/Conv2d" + conv_id +
"3x1/BatchNorm/batchnorm")
765 i_b <<
ConcatLayer(std::move(i_b1), std::move(i_b2)).
set_name(param_path +
"/Branch_1/concat");
769 1U, 1U, std::get<0>(c_filters),
770 get_weights_accessor(data_path, total_path +
"Branch_2_Conv2d_0a_1x1_weights.npy", weights_layout),
771 std::unique_ptr<arm_compute::graph::ITensorAccessor>(
nullptr),
772 PadStrideInfo(1, 1, 0, 0))
773 .
set_name(param_path +
"/Branch_2/Conv2d_0a_1x1/convolution")
775 get_weights_accessor(data_path, total_path +
"Branch_2_Conv2d_0a_1x1_BatchNorm_moving_mean.npy"),
776 get_weights_accessor(data_path, total_path +
"Branch_2_Conv2d_0a_1x1_BatchNorm_moving_variance.npy"),
780 .
set_name(param_path +
"/Branch_2/Conv2d_0a_1x1/BatchNorm/batchnorm")
783 3U, 3U, std::get<1>(c_filters),
784 get_weights_accessor(data_path, total_path +
"Branch_2_Conv2d_0b_3x3_weights.npy", weights_layout),
785 std::unique_ptr<arm_compute::graph::ITensorAccessor>(
nullptr),
786 PadStrideInfo(1, 1, 1, 1))
787 .
set_name(param_path +
"/Branch_2/Conv2d_0b_3x3/convolution")
789 get_weights_accessor(data_path, total_path +
"Branch_2_Conv2d_0b_3x3_BatchNorm_moving_mean.npy"),
790 get_weights_accessor(data_path, total_path +
"Branch_2_Conv2d_0b_3x3_BatchNorm_moving_variance.npy"),
794 .
set_name(param_path +
"/Branch_2/Conv2d_0b_3x3/BatchNorm/batchnorm")
799 3U, 1U, std::get<2>(c_filters),
800 get_weights_accessor(data_path, total_path +
"Branch_2_Conv2d_0c_1x3_weights.npy", weights_layout),
801 std::unique_ptr<arm_compute::graph::ITensorAccessor>(
nullptr),
802 PadStrideInfo(1, 1, 1, 0))
803 .
set_name(param_path +
"/Branch_2/Conv2d_0c_1x3/convolution")
805 get_weights_accessor(data_path, total_path +
"Branch_2_Conv2d_0c_1x3_BatchNorm_moving_mean.npy"),
806 get_weights_accessor(data_path, total_path +
"Branch_2_Conv2d_0c_1x3_BatchNorm_moving_variance.npy"),
810 .
set_name(param_path +
"/Branch_2/Conv2d_0c_1x3/BatchNorm/batchnorm")
815 1U, 3U, std::get<3>(c_filters),
816 get_weights_accessor(data_path, total_path +
"Branch_2_Conv2d_0d_3x1_weights.npy", weights_layout),
817 std::unique_ptr<arm_compute::graph::ITensorAccessor>(
nullptr),
818 PadStrideInfo(1, 1, 0, 1))
819 .
set_name(param_path +
"/Branch_2/Conv2d_0d_3x1/convolution")
821 get_weights_accessor(data_path, total_path +
"Branch_2_Conv2d_0d_3x1_BatchNorm_moving_mean.npy"),
822 get_weights_accessor(data_path, total_path +
"Branch_2_Conv2d_0d_3x1_BatchNorm_moving_variance.npy"),
826 .
set_name(param_path +
"/Branch_2/Conv2d_0d_3x1/BatchNorm/batchnorm")
830 i_c <<
ConcatLayer(std::move(i_c1), std::move(i_c2)).
set_name(param_path +
"/Branch_2/concat");
835 .
set_name(param_path +
"/Branch_3/AvgPool_0a_3x3/AvgPool")
838 get_weights_accessor(data_path, total_path +
"Branch_3_Conv2d_0b_1x1_weights.npy", weights_layout),
839 std::unique_ptr<arm_compute::graph::ITensorAccessor>(
nullptr),
840 PadStrideInfo(1, 1, 0, 0))
841 .
set_name(param_path +
"/Branch_3/Conv2d_0b_1x1/convolution")
843 get_weights_accessor(data_path, total_path +
"Branch_3_Conv2d_0b_1x1_BatchNorm_moving_mean.npy"),
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/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<InceptionV3Example>(argc, argv);
Graph configuration structure Device target types.
CLTunerMode tuner_mode
Tuner mode to be used by the CL tuner.
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.
int main(int argc, char **argv)
Main program for Inception V3.
Class to parse command line arguments.
arm_compute::DataLayout data_layout
std::string mlgo_file
Filename to load MLGO heuristics from.
std::string tuner_file
File to load/store tuning values from.
quantized, asymmetric fixed-point 8-bit number unsigned
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.