[TF frontend] Add test for Split->Conv->Concat scenario (#16816)

This commit is contained in:
Mateusz Tabaka
2023-04-13 10:42:17 +02:00
committed by GitHub
parent 63c5be3ed2
commit 5d80bca16e
2 changed files with 494 additions and 1 deletions

View File

@@ -2,6 +2,7 @@
// SPDX-License-Identifier: Apache-2.0
//
#include <exec_graph_info.hpp>
#include <openvino/frontend/manager.hpp>
#include <openvino/openvino.hpp>
@@ -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);
}
}
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<ov::Node>& node) {
return node->get_rt_info().at(ExecGraphInfoSerialization::LAYER_TYPE).as<std::string>();
};
const auto ops = runtime_model->get_ops();
EXPECT_EQ(0, std::count_if(ops.begin(), ops.end(), [&](const std::shared_ptr<ov::Node>& node) {
return get_layer_type(node) == "Split";
}));
EXPECT_EQ(2, std::count_if(ops.begin(), ops.end(), [&](const std::shared_ptr<ov::Node>& node) {
return get_layer_type(node) == "Convolution";
}));
EXPECT_EQ(0, std::count_if(ops.begin(), ops.end(), [&](const std::shared_ptr<ov::Node>& node) {
return get_layer_type(node) == "Concat";
}));
}
}

View File

@@ -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 {
}