From 5d80bca16e61b45fc26aa7784464ebecf4234cd4 Mon Sep 17 00:00:00 2001 From: Mateusz Tabaka Date: Thu, 13 Apr 2023 10:42:17 +0200 Subject: [PATCH] [TF frontend] Add test for Split->Conv->Concat scenario (#16816) --- .../tensorflow/tests/compilation.cpp | 25 +- .../models_pbtxt/split_conv_concat.pbtxt | 470 ++++++++++++++++++ 2 files changed, 494 insertions(+), 1 deletion(-) create mode 100644 src/frontends/tensorflow/tests/test_models/models_pbtxt/split_conv_concat.pbtxt diff --git a/src/frontends/tensorflow/tests/compilation.cpp b/src/frontends/tensorflow/tests/compilation.cpp index 6fc06b7661f..4c55ed1b100 100644 --- a/src/frontends/tensorflow/tests/compilation.cpp +++ b/src/frontends/tensorflow/tests/compilation.cpp @@ -2,6 +2,7 @@ // SPDX-License-Identifier: Apache-2.0 // +#include #include #include @@ -41,4 +42,26 @@ TEST_F(CompileModelsTests, NgramCompilation) { EXPECT_EQ(runtime_model->get_ordered_ops().size(), 4); EXPECT_EQ(runtime_model->get_parameters().size(), 2); EXPECT_EQ(runtime_model->get_results().size(), 1); -} \ No newline at end of file +} + +TEST_F(CompileModelsTests, ModelWithSplitConvConcat) { + { + auto model = convert_model("split_conv_concat/split_conv_concat.pbtxt"); + ov::Core core; + ov::CompiledModel compiled_model = core.compile_model(model, "CPU"); + const auto runtime_model = compiled_model.get_runtime_model(); + auto get_layer_type = [](const std::shared_ptr& node) { + return node->get_rt_info().at(ExecGraphInfoSerialization::LAYER_TYPE).as(); + }; + const auto ops = runtime_model->get_ops(); + EXPECT_EQ(0, std::count_if(ops.begin(), ops.end(), [&](const std::shared_ptr& node) { + return get_layer_type(node) == "Split"; + })); + EXPECT_EQ(2, std::count_if(ops.begin(), ops.end(), [&](const std::shared_ptr& node) { + return get_layer_type(node) == "Convolution"; + })); + EXPECT_EQ(0, std::count_if(ops.begin(), ops.end(), [&](const std::shared_ptr& node) { + return get_layer_type(node) == "Concat"; + })); + } +} diff --git a/src/frontends/tensorflow/tests/test_models/models_pbtxt/split_conv_concat.pbtxt b/src/frontends/tensorflow/tests/test_models/models_pbtxt/split_conv_concat.pbtxt new file mode 100644 index 00000000000..a87b931677c --- /dev/null +++ b/src/frontends/tensorflow/tests/test_models/models_pbtxt/split_conv_concat.pbtxt @@ -0,0 +1,470 @@ +node { + name: "input" + op: "Placeholder" + attr { + key: "_output_shapes" + value { + list { + shape { + dim { + size: 1 + } + dim { + size: 10 + } + dim { + size: 10 + } + dim { + size: 4 + } + } + } + } + } + attr { + key: "dtype" + value { + type: DT_FLOAT + } + } + attr { + key: "shape" + value { + shape { + dim { + size: 1 + } + dim { + size: 10 + } + dim { + size: 10 + } + dim { + size: 4 + } + } + } + } +} +node { + name: "weights" + op: "Const" + attr { + key: "dtype" + value { + type: DT_FLOAT + } + } + attr { + key: "value" + value { + tensor { + dtype: DT_FLOAT + tensor_shape { + dim { + size: 1 + } + dim { + size: 1 + } + dim { + size: 4 + } + dim { + size: 4 + } + } + tensor_content: "\000\000\200\077\000\000\000\100\000\000\100\100\000\000\200\100\000\000\240\100\000\000\300\100\000\000\340\100\000\000\000\101\000\000\020\101\000\000\040\101\000\000\060\101\000\000\100\101\000\000\120\101\000\000\140\101\000\000\160\101\000\000\200\101" + } + } + } +} +node { + name: "conv" + op: "Conv2D" + input: "input" + input: "weights" + attr { + key: "T" + value { + type: DT_FLOAT + } + } + attr { + key: "_output_shapes" + value { + list { + shape { + dim { + size: 1 + } + dim { + size: 10 + } + dim { + size: 10 + } + dim { + size: 3 + } + } + } + } + } + attr { + key: "data_format" + value { + s: "NHWC" + } + } + attr { + key: "dilations" + value { + list { + i: 1 + i: 1 + i: 1 + i: 1 + } + } + } + attr { + key: "explicit_paddings" + value { + list { + } + } + } + attr { + key: "padding" + value { + s: "VALID" + } + } + attr { + key: "strides" + value { + list { + i: 1 + i: 1 + i: 1 + i: 1 + } + } + } +} + +node { + name: "axis" + op: "Const" + attr { + key: "dtype" + value { + type: DT_INT32 + } + } + attr { + key: "value" + value { + tensor { + dtype: DT_INT32 + tensor_shape { + dim { + size: 1 + } + } + tensor_content: "\003\000\000\000" + } + } + } +} +node { + name: "size_splits" + op: "Const" + attr { + key: "dtype" + value { + type: DT_INT32 + } + } + attr { + key: "value" + value { + tensor { + dtype: DT_INT32 + tensor_shape { + dim { + size: 2 + } + } + tensor_content: "\002\000\000\000\002\000\000\000" + } + } + } +} + +node { + name: "split" + op: "SplitV" + input: "conv" + input: "size_splits" + input: "axis" + attr { + key: "num_split" + value { + i: 2 + } + } +} +node { + name: "weights1" + op: "Const" + attr { + key: "dtype" + value { + type: DT_FLOAT + } + } + attr { + key: "value" + value { + tensor { + dtype: DT_FLOAT + tensor_shape { + dim { + size: 1 + } + dim { + size: 1 + } + dim { + size: 2 + } + dim { + size: 3 + } + } + tensor_content: "\000\000\200\077\000\000\000\100\000\000\100\100\000\000\200\100\000\000\240\100\000\000\300\100" + } + } + } +} +node { + name: "conv1" + op: "Conv2D" + input: "split:0" + input: "weights1" + attr { + key: "T" + value { + type: DT_FLOAT + } + } + attr { + key: "_output_shapes" + value { + list { + shape { + dim { + size: 1 + } + dim { + size: 10 + } + dim { + size: 10 + } + dim { + size: 3 + } + } + } + } + } + attr { + key: "data_format" + value { + s: "NHWC" + } + } + attr { + key: "dilations" + value { + list { + i: 1 + i: 1 + i: 1 + i: 1 + } + } + } + attr { + key: "explicit_paddings" + value { + list { + } + } + } + attr { + key: "padding" + value { + s: "VALID" + } + } + attr { + key: "strides" + value { + list { + i: 1 + i: 1 + i: 1 + i: 1 + } + } + } +} +node { + name: "weights2" + op: "Const" + attr { + key: "dtype" + value { + type: DT_FLOAT + } + } + attr { + key: "value" + value { + tensor { + dtype: DT_FLOAT + tensor_shape { + dim { + size: 1 + } + dim { + size: 1 + } + dim { + size: 2 + } + dim { + size: 3 + } + } + tensor_content: "\000\000\200\077\000\000\000\100\000\000\100\100\000\000\200\100\000\000\240\100\000\000\300\100" + } + } + } +} +node { + name: "conv2" + op: "Conv2D" + input: "split:1" + input: "weights2" + attr { + key: "T" + value { + type: DT_FLOAT + } + } + attr { + key: "_output_shapes" + value { + list { + shape { + dim { + size: 1 + } + dim { + size: 10 + } + dim { + size: 10 + } + dim { + size: 3 + } + } + } + } + } + attr { + key: "data_format" + value { + s: "NHWC" + } + } + attr { + key: "dilations" + value { + list { + i: 1 + i: 1 + i: 1 + i: 1 + } + } + } + attr { + key: "explicit_paddings" + value { + list { + } + } + } + attr { + key: "padding" + value { + s: "VALID" + } + } + attr { + key: "strides" + value { + list { + i: 1 + i: 1 + i: 1 + i: 1 + } + } + } +} +node { + name: "concat" + op: "Concat" + input: "axis" + input: "conv1" + input: "conv2" + attr { + key: "T" + value { + type: DT_FLOAT + } + } + attr { + key: "_output_shapes" + value { + list { + shape { + dim { + size: 1 + } + dim { + size: 10 + } + dim { + size: 10 + } + dim { + size: 6 + } + } + } + } + } +} +library { +}