Tensorflow Common new (#15192)

* Moved files to another directory

* Rename header op_table.hpp to common_op_table.hpp for all files in src/frontends/tensorflow_common/src/op/

* Removed visability macroses

* CMake changes

* Unit-test execution in .ci

* Update labeler.yml

* Codeowners

* Style check and fix

* Static Build arrangement

* Addressing the comments

* install common headers to previous place

* New approach with public decoder and graph_iterator

* New approach with public decoder and graph_iterator

* Move GraphIterator back

* Comments addressed

* Comments adressed

* Preliminary TF FE README.md changes

* Added target_compile_definitions OPENVINO_STATIC_LIBRARY for static build
This commit is contained in:
Evgenya Stepyreva 2023-01-23 19:33:21 +04:00 committed by GitHub
parent 66c0dcc742
commit e2a1bd78a4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
141 changed files with 412 additions and 332 deletions

View File

@ -394,6 +394,9 @@ jobs:
- script: $(RUN_PREFIX) $(INSTALL_TEST_DIR)/ov_tensorflow_frontend_tests --gtest_print_time=1 --gtest_output=xml:$(INSTALL_TEST_DIR)/TEST-Tensorflow.xml - script: $(RUN_PREFIX) $(INSTALL_TEST_DIR)/ov_tensorflow_frontend_tests --gtest_print_time=1 --gtest_output=xml:$(INSTALL_TEST_DIR)/TEST-Tensorflow.xml
displayName: 'TensorFlow Frontend Unit Tests' displayName: 'TensorFlow Frontend Unit Tests'
- script: $(RUN_PREFIX) $(INSTALL_TEST_DIR)/ov_tensorflow_common_tests --gtest_print_time=1 --gtest_output=xml:$(INSTALL_TEST_DIR)/TEST-TensorflowCommon.xml
displayName: 'TensorFlow Common Unit Tests'
- script: $(RUN_PREFIX) $(INSTALL_TEST_DIR)/ov_lp_transformations_tests --gtest_print_time=1 --gtest_output=xml:$(INSTALL_TEST_DIR)/TEST-LpTransformations.xml - script: $(RUN_PREFIX) $(INSTALL_TEST_DIR)/ov_lp_transformations_tests --gtest_print_time=1 --gtest_output=xml:$(INSTALL_TEST_DIR)/TEST-LpTransformations.xml
displayName: 'Low Precision Transformations Tests' displayName: 'Low Precision Transformations Tests'

View File

@ -320,6 +320,12 @@ jobs:
LD_LIBRARY_PATH: $(INSTALL_TEST_DIR) LD_LIBRARY_PATH: $(INSTALL_TEST_DIR)
displayName: 'TensorFlow Frontend Unit Tests' displayName: 'TensorFlow Frontend Unit Tests'
- script: |
$(INSTALL_TEST_DIR)/ov_tensorflow_common_tests --gtest_print_time=1 --gtest_output=xml:$(INSTALL_TEST_DIR)/TEST-TensorflowCommon.xml
env:
LD_LIBRARY_PATH: $(INSTALL_TEST_DIR)
displayName: 'TensorFlow Common Unit Tests'
# python3 $(WORK_DIR)/gtest-parallel/gtest_parallel.py $(INSTALL_TEST_DIR)/InferenceEngineUnitTests --workers=16 --dump_json_test_results=InferenceEngineUnitTests.json --gtest_filter=*smoke* -- --gtest_print_time=1 # python3 $(WORK_DIR)/gtest-parallel/gtest_parallel.py $(INSTALL_TEST_DIR)/InferenceEngineUnitTests --workers=16 --dump_json_test_results=InferenceEngineUnitTests.json --gtest_filter=*smoke* -- --gtest_print_time=1
- script: $(INSTALL_TEST_DIR)/InferenceEngineUnitTests --gtest_print_time=1 --gtest_output=xml:$(INSTALL_TEST_DIR)/TEST-InferenceEngineUnitTests.xml - script: $(INSTALL_TEST_DIR)/InferenceEngineUnitTests --gtest_print_time=1 --gtest_output=xml:$(INSTALL_TEST_DIR)/TEST-InferenceEngineUnitTests.xml
displayName: 'IE UT old' displayName: 'IE UT old'

View File

@ -278,6 +278,9 @@ jobs:
- script: call $(SETUPVARS) && $(INSTALL_TEST_DIR)\ov_tensorflow_frontend_tests --gtest_print_time=1 --gtest_output=xml:$(INSTALL_TEST_DIR)\TEST-Tensorflow.xml - script: call $(SETUPVARS) && $(INSTALL_TEST_DIR)\ov_tensorflow_frontend_tests --gtest_print_time=1 --gtest_output=xml:$(INSTALL_TEST_DIR)\TEST-Tensorflow.xml
displayName: 'TensorFlow Frontend Unit Tests' displayName: 'TensorFlow Frontend Unit Tests'
- script: call $(SETUPVARS) && $(INSTALL_TEST_DIR)\ov_tensorflow_common_tests --gtest_print_time=1 --gtest_output=xml:$(INSTALL_TEST_DIR)\TEST-TensorflowCommon.xml
displayName: 'TensorFlow Common Unit Tests'
- script: call $(SETUPVARS) && $(INSTALL_TEST_DIR)\ov_lp_transformations_tests --gtest_print_time=1 --gtest_output=xml:$(INSTALL_TEST_DIR)\LpTransformations.xml - script: call $(SETUPVARS) && $(INSTALL_TEST_DIR)\ov_lp_transformations_tests --gtest_print_time=1 --gtest_output=xml:$(INSTALL_TEST_DIR)\LpTransformations.xml
displayName: 'Low Precision Transformations Tests' displayName: 'Low Precision Transformations Tests'

1
.github/CODEOWNERS vendored
View File

@ -80,6 +80,7 @@
/src/frontends/ir/ @openvinotoolkit/openvino-ir-frontend-maintainers /src/frontends/ir/ @openvinotoolkit/openvino-ir-frontend-maintainers
/src/frontends/paddle/ @openvinotoolkit/openvino-ie-paddle-maintainers /src/frontends/paddle/ @openvinotoolkit/openvino-ie-paddle-maintainers
/src/frontends/tensorflow/ @openvinotoolkit/openvino-tf-frontend-maintainers /src/frontends/tensorflow/ @openvinotoolkit/openvino-tf-frontend-maintainers
/src/frontends/tensorflow_common/ @openvinotoolkit/openvino-tf-frontend-maintainers
/src/frontends/pytorch/ @openvinotoolkit/openvino-pytorch-frontend-maintainers /src/frontends/pytorch/ @openvinotoolkit/openvino-pytorch-frontend-maintainers
# OpenVINO ONNX Frontend: # OpenVINO ONNX Frontend:

1
.github/labeler.yml vendored
View File

@ -119,6 +119,7 @@
'category: TF FE': 'category: TF FE':
- 'src/frontends/tensorflow/**/*' - 'src/frontends/tensorflow/**/*'
- 'src/frontends/tensorflow_common/**/*'
- 'tests/layer_tests/tensorflow_tests/**/*' - 'tests/layer_tests/tensorflow_tests/**/*'
'category: PyTorch FE': 'category: PyTorch FE':

View File

@ -25,5 +25,6 @@ if(ENABLE_OV_IR_FRONTEND)
endif() endif()
if(ENABLE_OV_TF_FRONTEND) if(ENABLE_OV_TF_FRONTEND)
add_subdirectory(tensorflow_common)
add_subdirectory(tensorflow) add_subdirectory(tensorflow)
endif() endif()

View File

@ -5,6 +5,8 @@
#pragma once #pragma once
#include "openvino/core/any.hpp" #include "openvino/core/any.hpp"
#include "openvino/frontend/exception.hpp"
#include "openvino/frontend/visibility.hpp"
namespace ov { namespace ov {
namespace frontend { namespace frontend {
@ -44,5 +46,35 @@ public:
virtual ~IDecoder() = default; virtual ~IDecoder() = default;
}; };
class FRONTEND_API DecoderBase {
public:
/// \brief Get attribute value by name
///
/// \param name Attribute name
/// \return Shared pointer to appropriate value converted to openvino data type if it exists, 'nullptr' otherwise
virtual ov::Any get_attribute(const std::string& name) const = 0;
/// \brief Get a number of inputs
virtual size_t get_input_size() const = 0;
/// \brief Get a producer name and its output port index
///
/// \param input_port_idx Input port index by which data is consumed
/// \param producer_name A producer name
/// \return producer_output_port_index Output port index from which data is generated
virtual void get_input_node(size_t input_port_idx,
std::string& producer_name,
size_t& producer_output_port_index) const = 0;
/// \brief Get operation type
virtual const std::string& get_op_type() const = 0;
/// \brief Get node name
virtual const std::string& get_op_name() const = 0;
/// \brief Destructor
virtual ~DecoderBase();
};
} // namespace frontend } // namespace frontend
} // namespace ov } // namespace ov

View File

@ -52,6 +52,10 @@ public:
return m_op_type; return m_op_type;
} }
virtual const std::string& get_name() const {
FRONT_END_NOT_IMPLEMENTED(get_name);
}
/// \brief Returns node attribute by name. /// \brief Returns node attribute by name.
template <class T> template <class T>
T get_attribute(const std::string& name) const { T get_attribute(const std::string& name) const {

View File

@ -0,0 +1,9 @@
// Copyright (C) 2018-2023 Intel Corporation
// SPDX-License-Identifier: Apache-2.0
//
#include "openvino/frontend/decoder.hpp"
using namespace ov::frontend;
DecoderBase::~DecoderBase() = default;

View File

@ -45,6 +45,9 @@ The structure of OpenVINO TensorFlow Frontend sources includes the following dir
* [src](./src/) folder contains the sources of the component. * [src](./src/) folder contains the sources of the component.
* [tests](./tests) cover internal transformations. * [tests](./tests) cover internal transformations.
Additionally, there is a shared [tensorflow common](../tensorflow_common) directory with same structure and purposes.
Its content depend only on common FrontEnd APIs thus is free to use in other FrontEnds.
## Architecture ## Architecture
OpenVINO TensorFlow Frontend uses [TensorFlow Protobuf files](./src/proto) to read and parse different TensorFlow model formats. OpenVINO TensorFlow Frontend uses [TensorFlow Protobuf files](./src/proto) to read and parse different TensorFlow model formats.
@ -97,9 +100,9 @@ The next extension types are supported:
## How to implement support of a new TensorFlow operation ## How to implement support of a new TensorFlow operation
TensorFlow conversion into the OpenVINO opset operation requires one pass or two passes: TensorFlow conversion into the OpenVINO opset operation requires one pass or two passes:
* One pass using [Loaders](./src/op/) directly transforms TF operation into a sub-graph of OpenVINO opset. * One pass using [Loaders](../tensorflow_common/src/op/) directly transforms TF operation into a sub-graph of OpenVINO opset.
* Two passes consist of [Loaders](./src/op/) and [Internal Transformations](./src/helper_transforms), * Two passes consist of [Loaders](../tensorflow_common/src/op/) and [Internal Transformations](../tensorflow_common/include/helper_transforms),
where the first pass transforms a TF operation into a sub-graph with [Internal Operations](./src/helper_ops), where the first pass transforms a TF operation into a sub-graph with [Internal Operations](../tensorflow_common/include/src/helper_ops),
and the second pass avoids internal operations. Two transformation passes are used when a TensorFlow operation and the second pass avoids internal operations. Two transformation passes are used when a TensorFlow operation
cannot be mapped into a sub-graph of the OpenVINO opset, and the conversion depends on the succeeding operations in the graph. cannot be mapped into a sub-graph of the OpenVINO opset, and the conversion depends on the succeeding operations in the graph.
@ -108,7 +111,7 @@ In most cases, it is sufficient to use just one pass for TensorFlow operation co
### One transformation pass using Loader ### One transformation pass using Loader
Most TensorFlow operations can be converted by one transformation pass using `Loader`. Most TensorFlow operations can be converted by one transformation pass using `Loader`.
The dictionary of `Loaders` is placed in the [op_table.cpp](./src/op_table.cpp) file and loaders are in the [op](./src/op) directory: The dictionary of `Loaders` is placed in the [op_table.cpp](./src/op_table.cpp) file and loaders are in the [op](../tensorflow_common/src/op/) directory:
https://github.com/openvinotoolkit/openvino/blob/7f3c95c161bc78ab2aefa6eab8b008142fb945bc/src/frontends/tensorflow/src/op_table.cpp#L129-L134 https://github.com/openvinotoolkit/openvino/blob/7f3c95c161bc78ab2aefa6eab8b008142fb945bc/src/frontends/tensorflow/src/op_table.cpp#L129-L134
@ -119,7 +122,7 @@ https://github.com/openvinotoolkit/openvino/blob/7f3c95c161bc78ab2aefa6eab8b0081
In this example, the loader checks the consistency of the operation by using `default_op_checks` and retrieves an attribute of the equation by using the `NodeContext::get_attribute()` method. In this example, the loader checks the consistency of the operation by using `default_op_checks` and retrieves an attribute of the equation by using the `NodeContext::get_attribute()` method.
The loader uses [OpenVINO Core API](../../core/README.md) for building the OpenVINO sub-graph to replace the TensorFlow operation. The loader uses [OpenVINO Core API](../../core/README.md) for building the OpenVINO sub-graph to replace the TensorFlow operation.
The support of a new TensorFlow operation requires implementing a new `Loader` in a separate file in the [op](./src/op) directory and registering it into the dictionary of `Loaders`. The support of a new TensorFlow operation requires implementing a new `Loader` in a separate file in the [op](../tensorflow_common/src/op/) directory and registering it into the dictionary of `Loaders`.
The main rules for loaders implementation: The main rules for loaders implementation:
1. Support dynamic shapes and ranks, undefined types, including for the future support of new types, such as strings and complex numbers. 1. Support dynamic shapes and ranks, undefined types, including for the future support of new types, such as strings and complex numbers.
@ -132,7 +135,7 @@ The main rules for loaders implementation:
### Two transformation passes using Loader and Internal Transformation ### Two transformation passes using Loader and Internal Transformation
In rare cases, TensorFlow operation conversion requires two transformations (`Loader` and `Internal Transformation`). In rare cases, TensorFlow operation conversion requires two transformations (`Loader` and `Internal Transformation`).
In the first step, `Loader` must convert a TF operation into [Internal Operation](./src/helper_ops) that is used temporarily by the conversion pipeline. In the first step, `Loader` must convert a TF operation into [Internal Operation](../tensorflow_common/helper_ops) that is used temporarily by the conversion pipeline.
The internal operation implementation must also contain the `validate_and_infer_types()` method as similar to [OpenVINO Core](https://docs.openvino.ai/nightly/groupov_ops_cpp_api.html) operations. The internal operation implementation must also contain the `validate_and_infer_types()` method as similar to [OpenVINO Core](https://docs.openvino.ai/nightly/groupov_ops_cpp_api.html) operations.
Here is an example of an implementation for the internal operation `SparseFillEmptyRows` used to convert Wide and Deep models. Here is an example of an implementation for the internal operation `SparseFillEmptyRows` used to convert Wide and Deep models.

View File

@ -1,45 +1,15 @@
// Copyright (C) 2018-2023 Intel Corporation // Copyright (C) 2018-2023 Intel Corporation
// SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: Apache-2.0
// //
#pragma once #pragma once
#include "openvino/core/any.hpp" #include "openvino/frontend/decoder.hpp"
#include "openvino/frontend/tensorflow/visibility.hpp"
namespace ov { namespace ov {
namespace frontend { namespace frontend {
namespace tensorflow { namespace tensorflow {
class TENSORFLOW_API DecoderBase { using DecoderBase = ov::frontend::DecoderBase;
public:
/// \brief Get attribute value by name
///
/// \param name Attribute name
/// \return Shared pointer to appropriate value converted to openvino data type if it exists, 'nullptr' otherwise
virtual ov::Any get_attribute(const std::string& name) const = 0;
/// \brief Get a number of inputs
virtual size_t get_input_size() const = 0;
/// \brief Get a producer name and its output port index
///
/// \param input_port_idx Input port index by which data is consumed
/// \param producer_name A producer name
/// \return producer_output_port_index Output port index from which data is generated
virtual void get_input_node(size_t input_port_idx,
std::string& producer_name,
size_t& producer_output_port_index) const = 0;
/// \brief Get operation type
virtual const std::string& get_op_type() const = 0;
/// \brief Get node name
virtual const std::string& get_op_name() const = 0;
/// \brief Destructor
virtual ~DecoderBase() = default;
};
} // namespace tensorflow } // namespace tensorflow
} // namespace frontend } // namespace frontend

View File

@ -6,22 +6,6 @@
#include "openvino/frontend/exception.hpp" #include "openvino/frontend/exception.hpp"
namespace ov { namespace ov {
namespace frontend {
namespace tensorflow {
class NodeContext;
class OpValidationFailure : public ov::frontend::OpValidationFailure {
public:
OpValidationFailure(const CheckLocInfo& check_loc_info, const NodeContext& node, const std::string& explanation)
: ov::frontend::OpValidationFailure(check_loc_info, get_error_msg_prefix_tf(node), explanation) {}
private:
static std::string get_error_msg_prefix_tf(const NodeContext& node);
};
} // namespace tensorflow
} // namespace frontend
/// \brief Macro to check whether a boolean condition holds. /// \brief Macro to check whether a boolean condition holds.
/// \param node_context Object of NodeContext class /// \param node_context Object of NodeContext class
/// \param cond Condition to check /// \param cond Condition to check
@ -29,6 +13,11 @@ private:
/// stream-insertion operator. Note that the expressions here will be evaluated lazily, /// stream-insertion operator. Note that the expressions here will be evaluated lazily,
/// i.e., only if the `cond` evalutes to `false`. /// i.e., only if the `cond` evalutes to `false`.
/// \throws ::ov::OpValidationFailure if `cond` is false. /// \throws ::ov::OpValidationFailure if `cond` is false.
#define TENSORFLOW_OP_VALIDATION(node_context, ...) \
OPENVINO_ASSERT_HELPER(::ov::frontend::tensorflow::OpValidationFailure, (node_context), __VA_ARGS__) #ifndef TENSORFLOW_OP_VALIDATION
# define TENSORFLOW_OP_VALIDATION(node_context, ...) \
OPENVINO_ASSERT_HELPER(::ov::frontend::OpValidationFailure, \
("While validating node '" + node_context.get_op_type() + "'"), \
__VA_ARGS__)
#endif
} // namespace ov } // namespace ov

View File

@ -6,7 +6,7 @@
#include "openvino/core/any.hpp" #include "openvino/core/any.hpp"
#include "openvino/frontend/tensorflow/decoder.hpp" #include "openvino/frontend/tensorflow/decoder.hpp"
#include "openvino/frontend/visibility.hpp" #include "openvino/frontend/tensorflow/visibility.hpp"
namespace ov { namespace ov {
namespace frontend { namespace frontend {

View File

@ -41,7 +41,7 @@ public:
} }
/// \brief Get a node name /// \brief Get a node name
std::string get_name() const { const std::string& get_name() const override {
return m_decoder->get_op_name(); return m_decoder->get_op_name();
} }

View File

@ -7,20 +7,5 @@ ov_add_frontend(NAME tensorflow
FILEDESCRIPTION "FrontEnd to load and convert TensorFlow file format" FILEDESCRIPTION "FrontEnd to load and convert TensorFlow file format"
LINK_LIBRARIES openvino::util openvino::runtime::dev) LINK_LIBRARIES openvino::util openvino::runtime::dev)
# add object library used in tests for private transformations set(TARGET_NAME "${FRONTEND_NAME_PREFIX}tensorflow${FRONTEND_NAME_SUFFIX}")
target_link_libraries(${TARGET_NAME} PRIVATE openvino::frontend::tensorflow_common)
add_library(openvino_tensorflow_frontend_static_tests STATIC EXCLUDE_FROM_ALL
helper_transforms/block_lstm_replacer.cpp
helper_transforms/embedding_segments_feature_fusing.cpp
helper_transforms/gru_block_cell_replacer.cpp
pass/transpose_sinking.cpp
exception.cpp
openvino_conversions.cpp
utils.cpp)
target_include_directories(openvino_tensorflow_frontend_static_tests
PUBLIC
${CMAKE_CURRENT_SOURCE_DIR}
PRIVATE
$<TARGET_PROPERTY:openvino::runtime::dev,INTERFACE_INCLUDE_DIRECTORIES>
$<TARGET_PROPERTY:openvino::frontend::tensorflow,INTERFACE_INCLUDE_DIRECTORIES>)

View File

@ -1,19 +0,0 @@
// Copyright (C) 2018-2023 Intel Corporation
// SPDX-License-Identifier: Apache-2.0
//
#include "openvino/frontend/tensorflow/exception.hpp"
#include "openvino/frontend/tensorflow/node_context.hpp"
namespace ov {
namespace frontend {
namespace tensorflow {
std::string OpValidationFailure::get_error_msg_prefix_tf(const NodeContext& node) {
std::stringstream ss;
ss << "While validating node '" << node.get_op_type() << '\'';
return ss.str();
}
} // namespace tensorflow
} // namespace frontend
} // namespace ov

View File

@ -4,9 +4,10 @@
#include "helper_ops/block_lstm.hpp" #include "helper_ops/block_lstm.hpp"
#include "common_op_table.hpp"
#include "ngraph/validation_util.hpp" #include "ngraph/validation_util.hpp"
#include "op_table.hpp"
#include "openvino/core/validation_util.hpp" #include "openvino/core/validation_util.hpp"
#include "openvino/frontend/tensorflow/node_context.hpp"
using namespace std; using namespace std;
@ -14,7 +15,7 @@ namespace ov {
namespace frontend { namespace frontend {
namespace tensorflow { namespace tensorflow {
namespace op { namespace op {
OutputVector translate_block_lstm_op(const NodeContext& node) { OutputVector translate_block_lstm_op(const ov::frontend::tensorflow::NodeContext& node) {
default_op_checks(node, 9, {"BlockLSTM"}); default_op_checks(node, 9, {"BlockLSTM"});
auto seq_len_max = node.get_input(0); auto seq_len_max = node.get_input(0);
auto x = node.get_input(1); auto x = node.get_input(1);

View File

@ -4,7 +4,8 @@
#include "helper_ops/gru_block_cell.hpp" #include "helper_ops/gru_block_cell.hpp"
#include "op_table.hpp" #include "common_op_table.hpp"
#include "openvino/frontend/tensorflow/node_context.hpp"
using namespace std; using namespace std;
using namespace ov; using namespace ov;
@ -15,7 +16,7 @@ namespace frontend {
namespace tensorflow { namespace tensorflow {
namespace op { namespace op {
OutputVector translate_gru_block_cell_op(const NodeContext& node) { OutputVector translate_gru_block_cell_op(const ov::frontend::tensorflow::NodeContext& node) {
// GRUBlockCell computes the GRU cell forward propagation for 1 time step // GRUBlockCell computes the GRU cell forward propagation for 1 time step
// Inputs: // Inputs:
// 0) x: Input to the GRU cell // 0) x: Input to the GRU cell

View File

@ -2,8 +2,8 @@
// SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: Apache-2.0
// //
#include "common_op_table.hpp"
#include "input_model.hpp" #include "input_model.hpp"
#include "op_table.hpp"
#include "openvino/opsets/opset10.hpp" #include "openvino/opsets/opset10.hpp"
using namespace std; using namespace std;

View File

@ -2,8 +2,8 @@
// SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: Apache-2.0
// //
#include "common_op_table.hpp"
#include "input_model.hpp" #include "input_model.hpp"
#include "op_table.hpp"
#include "openvino/opsets/opset10.hpp" #include "openvino/opsets/opset10.hpp"
using namespace std; using namespace std;

View File

@ -2,11 +2,12 @@
// SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: Apache-2.0
// //
#include "common_op_table.hpp"
#include "helper_ops/sparse_fill_empty_rows.hpp" #include "helper_ops/sparse_fill_empty_rows.hpp"
#include "helper_ops/sparse_segment_ops.hpp" #include "helper_ops/sparse_segment_ops.hpp"
#include "ngraph/validation_util.hpp" #include "ngraph/validation_util.hpp"
#include "op_table.hpp"
#include "openvino/core/validation_util.hpp" #include "openvino/core/validation_util.hpp"
#include "openvino/frontend/tensorflow/node_context.hpp"
#include "openvino/opsets/opset8.hpp" #include "openvino/opsets/opset8.hpp"
using namespace std; using namespace std;
@ -17,7 +18,7 @@ namespace ov {
namespace frontend { namespace frontend {
namespace tensorflow { namespace tensorflow {
namespace op { namespace op {
OutputVector translate_sparse_reshape_op(const NodeContext& node) { OutputVector translate_sparse_reshape_op(const ov::frontend::tensorflow::NodeContext& node) {
// Currently, the translation for SparseReshape is possible only if new shape value is the same as the input shape // Currently, the translation for SparseReshape is possible only if new shape value is the same as the input shape
// value or it is different just by one dynamic dimension of the new shape that can be replace with the // value or it is different just by one dynamic dimension of the new shape that can be replace with the
// corresponding static dimension of the input shape. // corresponding static dimension of the input shape.
@ -71,7 +72,7 @@ OutputVector translate_sparse_reshape_op(const NodeContext& node) {
return {input_indices, input_shape}; return {input_indices, input_shape};
} }
OutputVector translate_sparse_fill_empty_rows_op(const NodeContext& node) { OutputVector translate_sparse_fill_empty_rows_op(const ov::frontend::tensorflow::NodeContext& node) {
default_op_checks(node, 3, {"SparseFillEmptyRows"}); default_op_checks(node, 3, {"SparseFillEmptyRows"});
auto input_indices = node.get_input(0); auto input_indices = node.get_input(0);
auto input_values = node.get_input(1); auto input_values = node.get_input(1);
@ -87,7 +88,7 @@ OutputVector translate_sparse_fill_empty_rows_op(const NodeContext& node) {
return sparse_fill_empty_rows->outputs(); return sparse_fill_empty_rows->outputs();
} }
OutputVector translate_sparse_segment_sum_op(const NodeContext& node) { OutputVector translate_sparse_segment_sum_op(const ov::frontend::tensorflow::NodeContext& node) {
auto input_size = node.get_input_size(); auto input_size = node.get_input_size();
TENSORFLOW_OP_VALIDATION(node, TENSORFLOW_OP_VALIDATION(node,
input_size == 3 || input_size == 4, input_size == 3 || input_size == 4,

View File

@ -2,8 +2,8 @@
// SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: Apache-2.0
// //
#include "common_op_table.hpp"
#include "input_model.hpp" #include "input_model.hpp"
#include "op_table.hpp"
#include "openvino/opsets/opset10.hpp" #include "openvino/opsets/opset10.hpp"
using namespace std; using namespace std;

View File

@ -4,6 +4,7 @@
#include "op_table.hpp" #include "op_table.hpp"
#include "common_op_table.hpp"
#include "openvino/opsets/opset10.hpp" #include "openvino/opsets/opset10.hpp"
#include "openvino/opsets/opset9.hpp" #include "openvino/opsets/opset9.hpp"
@ -15,131 +16,17 @@ namespace ov {
namespace frontend { namespace frontend {
namespace tensorflow { namespace tensorflow {
namespace op { namespace op {
#define OP_CONVERTER(op) OutputVector op(const NodeContext& node)
#define OP_T_CONVERTER(op) \
template <class T> \
OutputVector op(const NodeContext& node)
OP_T_CONVERTER(translate_unary_op); #define TF_OP_CONVERTER(op) OutputVector op(const ov::frontend::tensorflow::NodeContext& node)
OP_T_CONVERTER(translate_binary_op);
OP_T_CONVERTER(translate_direct_reduce_op);
OP_CONVERTER(translate_add_n_op); TF_OP_CONVERTER(translate_if_op);
OP_CONVERTER(translate_arg_max_op); TF_OP_CONVERTER(translate_block_lstm_op);
OP_CONVERTER(translate_arg_min_op); TF_OP_CONVERTER(translate_gru_block_cell_op);
OP_CONVERTER(translate_assert_op); TF_OP_CONVERTER(translate_partitioned_call_op);
OP_CONVERTER(translate_avg_pool_op); TF_OP_CONVERTER(translate_sparse_fill_empty_rows_op);
OP_CONVERTER(translate_batch_mat_mul_op); TF_OP_CONVERTER(translate_sparse_reshape_op);
OP_CONVERTER(translate_batch_to_space_nd_op); TF_OP_CONVERTER(translate_sparse_segment_sum_op);
OP_CONVERTER(translate_bias_add_op); TF_OP_CONVERTER(translate_while_op);
OP_CONVERTER(translate_block_lstm_op);
OP_CONVERTER(translate_broadcast_args_op);
OP_CONVERTER(translate_broadcast_to_op);
OP_CONVERTER(translate_bucketize_op);
OP_CONVERTER(translate_cast_op);
OP_CONVERTER(translate_clip_by_value_op);
OP_CONVERTER(translate_concat_op);
OP_CONVERTER(translate_const_op);
OP_CONVERTER(translate_conv_2d_op);
OP_CONVERTER(translate_conv_2d_backprop_input_op);
OP_CONVERTER(translate_conv_3d_op);
OP_CONVERTER(translate_conv_3d_backprop_input_v2_op);
OP_CONVERTER(translate_ctc_greedy_decoder_op);
OP_CONVERTER(translate_ctc_loss_op);
OP_CONVERTER(translate_cumsum_op);
OP_CONVERTER(translate_crop_and_resize_op);
OP_CONVERTER(translate_depth_to_space_op);
OP_CONVERTER(translate_depthwise_conv_2d_native_op);
OP_CONVERTER(translate_dynamic_partition_op);
OP_CONVERTER(translate_einsum_op);
OP_CONVERTER(translate_elu_op);
OP_CONVERTER(translate_expand_dims_op);
OP_CONVERTER(translate_extract_image_patches_op);
OP_CONVERTER(translate_fake_quant_op);
OP_CONVERTER(translate_fill_op);
OP_CONVERTER(translate_floor_div_op);
OP_CONVERTER(translate_fused_batch_norm_op);
OP_CONVERTER(translate_gather_op);
OP_CONVERTER(translate_gather_v2_op);
OP_CONVERTER(translate_gather_nd_op);
OP_CONVERTER(translate_gru_block_cell_op);
OP_CONVERTER(translate_identity_op);
OP_CONVERTER(translate_identity_n_op);
OP_CONVERTER(translate_input_arg_op);
OP_CONVERTER(translate_output_arg_op);
OP_CONVERTER(translate_if_op);
OP_CONVERTER(translate_interpolate_op);
OP_CONVERTER(translate_is_finite_op);
OP_CONVERTER(translate_is_inf_op);
OP_CONVERTER(translate_is_nan_op);
OP_CONVERTER(translate_l2_loss_op);
OP_CONVERTER(translate_linspace_op);
OP_CONVERTER(translate_list_diff_op);
OP_CONVERTER(translate_leaky_relu_op);
OP_CONVERTER(translate_log_softmax_op);
OP_CONVERTER(translate_log_1p_op);
OP_CONVERTER(translate_lrn_op);
OP_CONVERTER(translate_mat_mul_op);
OP_CONVERTER(translate_matrix_diag_op);
OP_CONVERTER(translate_max_pool_op);
OP_CONVERTER(translate_mirror_pad_op);
OP_CONVERTER(translate_non_max_suppression_op);
OP_CONVERTER(translate_normalize_l2_op);
OP_CONVERTER(translate_parallel_dynamic_stitch_op);
OP_CONVERTER(translate_partitioned_call_op);
OP_CONVERTER(translate_placeholder_op);
OP_CONVERTER(translate_placeholder_with_default_op);
OP_CONVERTER(translate_no_op);
OP_CONVERTER(translate_one_hot_op);
OP_CONVERTER(translate_pack_op);
OP_CONVERTER(translate_pad_op);
OP_CONVERTER(translate_padv2_op);
OP_CONVERTER(translate_range_op);
OP_CONVERTER(translate_rank_op);
OP_CONVERTER(translate_random_uniform_op);
OP_CONVERTER(translate_random_uniform_int_op);
OP_CONVERTER(translate_relu_6_op);
OP_CONVERTER(translate_reciprocal_op);
OP_CONVERTER(translate_reshape_op);
OP_CONVERTER(translate_resource_gather_op);
OP_CONVERTER(translate_reverse_op);
OP_CONVERTER(translate_reverse_v2_op);
OP_CONVERTER(translate_reverse_sequence_op);
OP_CONVERTER(translate_roll_op);
OP_CONVERTER(translate_round_op);
OP_CONVERTER(translate_rsqrt_op);
OP_CONVERTER(translate_scatter_nd_op);
OP_CONVERTER(translate_segment_sum_op);
OP_CONVERTER(translate_space_to_batch_nd_op);
OP_CONVERTER(translate_sparse_to_dense_op);
OP_CONVERTER(translate_select_op);
OP_CONVERTER(translate_select_v2_op);
OP_CONVERTER(translate_shape_op);
OP_CONVERTER(translate_size_op);
OP_CONVERTER(translate_slice_op);
OP_CONVERTER(translate_softmax_op);
OP_CONVERTER(translate_space_to_depth_op);
OP_CONVERTER(translate_sparse_reshape_op);
OP_CONVERTER(translate_split_op);
OP_CONVERTER(translate_split_v_op);
OP_CONVERTER(translate_square_op);
OP_CONVERTER(translate_squeeze_op);
OP_CONVERTER(translate_strided_slice_op);
OP_CONVERTER(translate_sqrt_op);
OP_CONVERTER(translate_tile_op);
OP_CONVERTER(translate_top_k_op);
OP_CONVERTER(translate_top_k_v2_op);
OP_CONVERTER(translate_transpose_op);
OP_CONVERTER(translate_unpack_op);
OP_CONVERTER(translate_where_op);
OP_CONVERTER(translate_while_op);
OP_CONVERTER(translate_x_div_y_op);
OP_CONVERTER(translate_zeros_like_op);
// Translators for internal operations
OP_CONVERTER(translate_sparse_fill_empty_rows_op);
OP_CONVERTER(translate_sparse_segment_sum_op);
OP_CONVERTER(translate_unique_op);
const std::map<std::string, CreatorFunction> get_supported_ops() { const std::map<std::string, CreatorFunction> get_supported_ops() {
return { return {

View File

@ -14,7 +14,7 @@ ov_add_test_target(
gtest_main_manifest gtest_main_manifest
frontend_shared_test_classes frontend_shared_test_classes
openvino_tensorflow_frontend openvino_tensorflow_frontend
openvino_tensorflow_frontend_static_tests openvino_tensorflow_common
ADD_CLANG_FORMAT ADD_CLANG_FORMAT
LABELS LABELS
OV OV

View File

@ -0,0 +1,9 @@
# Copyright (C) 2018-2022 Intel Corporation
# SPDX-License-Identifier: Apache-2.0
#
add_subdirectory(src)
if(ENABLE_TESTS)
add_subdirectory(tests)
endif()

View File

@ -0,0 +1,146 @@
// Copyright (C) 2018-2023 Intel Corporation
// SPDX-License-Identifier: Apache-2.0
//
#pragma once
#include <functional>
#include <map>
#include <string>
#include "openvino/core/node_vector.hpp"
#include "openvino/frontend/node_context.hpp"
#include "openvino_conversions.hpp"
#include "utils.hpp"
#define TENSORFLOW_OP_VALIDATION(node_context, ...) \
OPENVINO_ASSERT_HELPER(::ov::frontend::OpValidationFailure, \
("While validating node '" + node_context.get_op_type() + "'"), \
__VA_ARGS__)
namespace ov {
namespace frontend {
namespace tensorflow {
namespace op {
#define OP_CONVERTER(op) OutputVector op(const ov::frontend::NodeContext& node)
#define OP_T_CONVERTER(op) \
template <class T> \
OutputVector op(const ov::frontend::NodeContext& node)
OP_T_CONVERTER(translate_unary_op);
OP_T_CONVERTER(translate_binary_op);
OP_T_CONVERTER(translate_direct_reduce_op);
OP_CONVERTER(translate_add_n_op);
OP_CONVERTER(translate_arg_max_op);
OP_CONVERTER(translate_arg_min_op);
OP_CONVERTER(translate_assert_op);
OP_CONVERTER(translate_avg_pool_op);
OP_CONVERTER(translate_batch_mat_mul_op);
OP_CONVERTER(translate_batch_to_space_nd_op);
OP_CONVERTER(translate_bias_add_op);
OP_CONVERTER(translate_broadcast_args_op);
OP_CONVERTER(translate_broadcast_to_op);
OP_CONVERTER(translate_bucketize_op);
OP_CONVERTER(translate_cast_op);
OP_CONVERTER(translate_clip_by_value_op);
OP_CONVERTER(translate_concat_op);
OP_CONVERTER(translate_const_op);
OP_CONVERTER(translate_conv_2d_op);
OP_CONVERTER(translate_conv_2d_backprop_input_op);
OP_CONVERTER(translate_conv_3d_op);
OP_CONVERTER(translate_conv_3d_backprop_input_v2_op);
OP_CONVERTER(translate_ctc_greedy_decoder_op);
OP_CONVERTER(translate_ctc_loss_op);
OP_CONVERTER(translate_cumsum_op);
OP_CONVERTER(translate_crop_and_resize_op);
OP_CONVERTER(translate_depth_to_space_op);
OP_CONVERTER(translate_depthwise_conv_2d_native_op);
OP_CONVERTER(translate_dynamic_partition_op);
OP_CONVERTER(translate_einsum_op);
OP_CONVERTER(translate_elu_op);
OP_CONVERTER(translate_expand_dims_op);
OP_CONVERTER(translate_extract_image_patches_op);
OP_CONVERTER(translate_fake_quant_op);
OP_CONVERTER(translate_fill_op);
OP_CONVERTER(translate_floor_div_op);
OP_CONVERTER(translate_fused_batch_norm_op);
OP_CONVERTER(translate_gather_op);
OP_CONVERTER(translate_gather_v2_op);
OP_CONVERTER(translate_gather_nd_op);
OP_CONVERTER(translate_identity_op);
OP_CONVERTER(translate_identity_n_op);
OP_CONVERTER(translate_input_arg_op);
OP_CONVERTER(translate_output_arg_op);
OP_CONVERTER(translate_interpolate_op);
OP_CONVERTER(translate_is_finite_op);
OP_CONVERTER(translate_is_inf_op);
OP_CONVERTER(translate_is_nan_op);
OP_CONVERTER(translate_l2_loss_op);
OP_CONVERTER(translate_linspace_op);
OP_CONVERTER(translate_list_diff_op);
OP_CONVERTER(translate_leaky_relu_op);
OP_CONVERTER(translate_log_softmax_op);
OP_CONVERTER(translate_log_1p_op);
OP_CONVERTER(translate_lrn_op);
OP_CONVERTER(translate_mat_mul_op);
OP_CONVERTER(translate_matrix_diag_op);
OP_CONVERTER(translate_max_pool_op);
OP_CONVERTER(translate_mirror_pad_op);
OP_CONVERTER(translate_non_max_suppression_op);
OP_CONVERTER(translate_normalize_l2_op);
OP_CONVERTER(translate_parallel_dynamic_stitch_op);
OP_CONVERTER(translate_placeholder_op);
OP_CONVERTER(translate_placeholder_with_default_op);
OP_CONVERTER(translate_no_op);
OP_CONVERTER(translate_one_hot_op);
OP_CONVERTER(translate_pack_op);
OP_CONVERTER(translate_pad_op);
OP_CONVERTER(translate_padv2_op);
OP_CONVERTER(translate_range_op);
OP_CONVERTER(translate_rank_op);
OP_CONVERTER(translate_random_uniform_op);
OP_CONVERTER(translate_random_uniform_int_op);
OP_CONVERTER(translate_relu_6_op);
OP_CONVERTER(translate_reciprocal_op);
OP_CONVERTER(translate_reshape_op);
OP_CONVERTER(translate_resource_gather_op);
OP_CONVERTER(translate_reverse_op);
OP_CONVERTER(translate_reverse_v2_op);
OP_CONVERTER(translate_reverse_sequence_op);
OP_CONVERTER(translate_roll_op);
OP_CONVERTER(translate_round_op);
OP_CONVERTER(translate_rsqrt_op);
OP_CONVERTER(translate_scatter_nd_op);
OP_CONVERTER(translate_segment_sum_op);
OP_CONVERTER(translate_space_to_batch_nd_op);
OP_CONVERTER(translate_sparse_to_dense_op);
OP_CONVERTER(translate_select_op);
OP_CONVERTER(translate_select_v2_op);
OP_CONVERTER(translate_shape_op);
OP_CONVERTER(translate_size_op);
OP_CONVERTER(translate_slice_op);
OP_CONVERTER(translate_softmax_op);
OP_CONVERTER(translate_space_to_depth_op);
OP_CONVERTER(translate_split_op);
OP_CONVERTER(translate_split_v_op);
OP_CONVERTER(translate_square_op);
OP_CONVERTER(translate_squeeze_op);
OP_CONVERTER(translate_strided_slice_op);
OP_CONVERTER(translate_sqrt_op);
OP_CONVERTER(translate_tile_op);
OP_CONVERTER(translate_top_k_op);
OP_CONVERTER(translate_top_k_v2_op);
OP_CONVERTER(translate_transpose_op);
OP_CONVERTER(translate_unpack_op);
OP_CONVERTER(translate_where_op);
OP_CONVERTER(translate_x_div_y_op);
OP_CONVERTER(translate_zeros_like_op);
// Translators for internal operations
OP_CONVERTER(translate_unique_op);
} // namespace op
} // namespace tensorflow
} // namespace frontend
} // namespace ov

View File

@ -7,14 +7,14 @@
#include <string> #include <string>
#include <vector> #include <vector>
#include "openvino/frontend/tensorflow/decoder.hpp" #include "openvino/frontend/decoder.hpp"
#include "tf_framework_node.hpp" #include "tf_framework_node.hpp"
namespace ov { namespace ov {
namespace frontend { namespace frontend {
namespace tensorflow { namespace tensorflow {
class DecoderFake : public ov::frontend::tensorflow::DecoderBase { class DecoderFake : public ov::frontend::DecoderBase {
public: public:
explicit DecoderFake() {} explicit DecoderFake() {}

View File

@ -8,7 +8,7 @@
#include <vector> #include <vector>
#include "helper_ops/internal_operation.hpp" #include "helper_ops/internal_operation.hpp"
#include "openvino/frontend/tensorflow/decoder.hpp" #include "openvino/frontend/decoder.hpp"
namespace ov { namespace ov {
namespace frontend { namespace frontend {

View File

@ -7,7 +7,6 @@
#include <memory> #include <memory>
#include <utility> #include <utility>
#include "openvino/frontend/tensorflow/visibility.hpp"
#include "openvino/pass/graph_rewrite.hpp" #include "openvino/pass/graph_rewrite.hpp"
#include "openvino/pass/pass.hpp" #include "openvino/pass/pass.hpp"

View File

@ -7,7 +7,6 @@
#include <memory> #include <memory>
#include <utility> #include <utility>
#include "openvino/frontend/tensorflow/visibility.hpp"
#include "openvino/pass/graph_rewrite.hpp" #include "openvino/pass/graph_rewrite.hpp"
#include "openvino/pass/pass.hpp" #include "openvino/pass/pass.hpp"

View File

@ -4,8 +4,8 @@
#pragma once #pragma once
#include "openvino/frontend/decoder.hpp"
#include "openvino/frontend/frontend.hpp" #include "openvino/frontend/frontend.hpp"
#include "openvino/frontend/tensorflow/decoder.hpp"
namespace ov { namespace ov {
namespace frontend { namespace frontend {

View File

@ -6,7 +6,7 @@
#include <algorithm> #include <algorithm>
#include "openvino/frontend/tensorflow/decoder.hpp" #include "openvino/frontend/decoder.hpp"
#include "openvino/op/util/framework_node.hpp" #include "openvino/op/util/framework_node.hpp"
namespace ov { namespace ov {

View File

@ -5,10 +5,17 @@
#pragma once #pragma once
#include "openvino/core/validation_util.hpp" #include "openvino/core/validation_util.hpp"
#include "openvino/frontend/tensorflow/node_context.hpp" #include "openvino/frontend/node_context.hpp"
#include "openvino/opsets/opset8.hpp" #include "openvino/opsets/opset8.hpp"
#include "openvino/pass/graph_rewrite.hpp" #include "openvino/pass/graph_rewrite.hpp"
#ifndef TENSORFLOW_OP_VALIDATION
# define TENSORFLOW_OP_VALIDATION(node_context, ...) \
OPENVINO_ASSERT_HELPER(::ov::frontend::OpValidationFailure, \
("While validating node '" + node_context.get_op_type() + "'"), \
__VA_ARGS__)
#endif
namespace ov { namespace ov {
namespace frontend { namespace frontend {
namespace tensorflow { namespace tensorflow {

View File

@ -0,0 +1,26 @@
# Copyright (C) 2018-2022 Intel Corporation
# SPDX-License-Identifier: Apache-2.0
#
set(TARGET_NAME "openvino_tensorflow_common")
get_filename_component(root_dir "${CMAKE_CURRENT_SOURCE_DIR}" DIRECTORY)
file(GLOB_RECURSE LIBRARY_SRC ${root_dir}/src/*.cpp)
file(GLOB_RECURSE LIBRARY_HEADERS ${root_dir}/include/*.hpp)
add_library(${TARGET_NAME} STATIC ${LIBRARY_SRC} ${LIBRARY_HEADERS})
if(NOT BUILD_SHARED_LIBS)
target_compile_definitions(${TARGET_NAME} PRIVATE OPENVINO_STATIC_LIBRARY)
endif()
target_link_libraries(${TARGET_NAME} PRIVATE openvino::util)
add_library(openvino::frontend::tensorflow_common ALIAS ${TARGET_NAME})
target_include_directories(${TARGET_NAME}
PUBLIC
$<BUILD_INTERFACE:${root_dir}/include>
PRIVATE
${root_dir}/src
$<TARGET_PROPERTY:openvino::runtime::dev,INTERFACE_INCLUDE_DIRECTORIES>)
add_clang_format_target(${TARGET_NAME}_clang FOR_TARGETS ${TARGET_NAME})
ov_install_static_lib(${TARGET_NAME} ${OV_CPACK_COMP_CORE})

View File

@ -4,7 +4,7 @@
#include <numeric> #include <numeric>
#include "op_table.hpp" #include "common_op_table.hpp"
#include "openvino/opsets/opset8.hpp" #include "openvino/opsets/opset8.hpp"
using namespace std; using namespace std;

View File

@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: Apache-2.0
// //
#include "op_table.hpp" #include "common_op_table.hpp"
#include "openvino/opsets/opset8.hpp" #include "openvino/opsets/opset8.hpp"
using namespace std; using namespace std;

View File

@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: Apache-2.0
// //
#include "op_table.hpp" #include "common_op_table.hpp"
#include "openvino/opsets/opset10.hpp" #include "openvino/opsets/opset10.hpp"
using namespace std; using namespace std;

View File

@ -4,7 +4,7 @@
#include <numeric> #include <numeric>
#include "op_table.hpp" #include "common_op_table.hpp"
#include "openvino/core/validation_util.hpp" #include "openvino/core/validation_util.hpp"
using namespace std; using namespace std;

View File

@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: Apache-2.0
// //
#include "op_table.hpp" #include "common_op_table.hpp"
#include "openvino/opsets/opset8.hpp" #include "openvino/opsets/opset8.hpp"
using namespace std; using namespace std;

View File

@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: Apache-2.0
// //
#include "op_table.hpp" #include "common_op_table.hpp"
#include "openvino/opsets/opset8.hpp" #include "openvino/opsets/opset8.hpp"
using namespace std; using namespace std;

View File

@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: Apache-2.0
// //
#include "op_table.hpp" #include "common_op_table.hpp"
#include "openvino/opsets/opset8.hpp" #include "openvino/opsets/opset8.hpp"
using namespace std; using namespace std;

View File

@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: Apache-2.0
// //
#include "op_table.hpp" #include "common_op_table.hpp"
#include "openvino/opsets/opset8.hpp" #include "openvino/opsets/opset8.hpp"
using namespace std; using namespace std;

View File

@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: Apache-2.0
// //
#include "op_table.hpp" #include "common_op_table.hpp"
#include "openvino/opsets/opset8.hpp" #include "openvino/opsets/opset8.hpp"
using namespace std; using namespace std;

View File

@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: Apache-2.0
// //
#include "op_table.hpp" #include "common_op_table.hpp"
#include "openvino/opsets/opset8.hpp" #include "openvino/opsets/opset8.hpp"
using namespace std; using namespace std;

View File

@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: Apache-2.0
// //
#include "op_table.hpp" #include "common_op_table.hpp"
#include "openvino/opsets/opset8.hpp" #include "openvino/opsets/opset8.hpp"
using namespace std; using namespace std;

View File

@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: Apache-2.0
// //
#include "op_table.hpp" #include "common_op_table.hpp"
#include "openvino/opsets/opset10.hpp" #include "openvino/opsets/opset10.hpp"
using namespace std; using namespace std;

View File

@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: Apache-2.0
// //
#include "op_table.hpp" #include "common_op_table.hpp"
#include "openvino/opsets/opset8.hpp" #include "openvino/opsets/opset8.hpp"
using namespace std; using namespace std;

View File

@ -2,8 +2,8 @@
// SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: Apache-2.0
// //
#include "common_op_table.hpp"
#include "helper_ops/unsupported_constant.hpp" #include "helper_ops/unsupported_constant.hpp"
#include "op_table.hpp"
#include "openvino/opsets/opset8.hpp" #include "openvino/opsets/opset8.hpp"
using namespace std; using namespace std;

View File

@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: Apache-2.0
// //
#include "op_table.hpp" #include "common_op_table.hpp"
#include "openvino/opsets/opset8.hpp" #include "openvino/opsets/opset8.hpp"
#include "utils.hpp" #include "utils.hpp"

View File

@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: Apache-2.0
// //
#include "op_table.hpp" #include "common_op_table.hpp"
#include "openvino/op/util/attr_types.hpp" #include "openvino/op/util/attr_types.hpp"
#include "openvino/opsets/opset8.hpp" #include "openvino/opsets/opset8.hpp"
#include "utils.hpp" #include "utils.hpp"

View File

@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: Apache-2.0
// //
#include "op_table.hpp" #include "common_op_table.hpp"
#include "openvino/opsets/opset8.hpp" #include "openvino/opsets/opset8.hpp"
using namespace std; using namespace std;

View File

@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: Apache-2.0
// //
#include "op_table.hpp" #include "common_op_table.hpp"
#include "openvino/opsets/opset8.hpp" #include "openvino/opsets/opset8.hpp"
using namespace std; using namespace std;

View File

@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: Apache-2.0
// //
#include "op_table.hpp" #include "common_op_table.hpp"
#include "openvino/opsets/opset8.hpp" #include "openvino/opsets/opset8.hpp"
using namespace std; using namespace std;

View File

@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: Apache-2.0
// //
#include "op_table.hpp" #include "common_op_table.hpp"
#include "openvino/opsets/opset8.hpp" #include "openvino/opsets/opset8.hpp"
using namespace std; using namespace std;

View File

@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: Apache-2.0
// //
#include "op_table.hpp" #include "common_op_table.hpp"
#include "openvino/opsets/opset8.hpp" #include "openvino/opsets/opset8.hpp"
using namespace std; using namespace std;

View File

@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: Apache-2.0
// //
#include "op_table.hpp" #include "common_op_table.hpp"
#include "openvino/opsets/opset8.hpp" #include "openvino/opsets/opset8.hpp"
using namespace std; using namespace std;

View File

@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: Apache-2.0
// //
#include "op_table.hpp" #include "common_op_table.hpp"
#include "openvino/opsets/opset8.hpp" #include "openvino/opsets/opset8.hpp"
using namespace std; using namespace std;

View File

@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: Apache-2.0
// //
#include "op_table.hpp" #include "common_op_table.hpp"
#include "openvino/opsets/opset8.hpp" #include "openvino/opsets/opset8.hpp"
using namespace std; using namespace std;

View File

@ -4,7 +4,7 @@
#include <limits> #include <limits>
#include "op_table.hpp" #include "common_op_table.hpp"
#include "openvino/opsets/opset9.hpp" #include "openvino/opsets/opset9.hpp"
using namespace std; using namespace std;

View File

@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: Apache-2.0
// //
#include "op_table.hpp" #include "common_op_table.hpp"
#include "openvino/opsets/opset8.hpp" #include "openvino/opsets/opset8.hpp"
using namespace std; using namespace std;

View File

@ -2,8 +2,7 @@
// SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: Apache-2.0
// //
#include "op_table.hpp" #include "common_op_table.hpp"
#include "openvino/frontend/tensorflow/node_context.hpp"
#include "openvino/opsets/opset8.hpp" #include "openvino/opsets/opset8.hpp"
using namespace std; using namespace std;

View File

@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: Apache-2.0
// //
#include "op_table.hpp" #include "common_op_table.hpp"
#include "openvino/opsets/opset8.hpp" #include "openvino/opsets/opset8.hpp"
using namespace std; using namespace std;

View File

@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: Apache-2.0
// //
#include "op_table.hpp" #include "common_op_table.hpp"
#include "openvino/op/util/attr_types.hpp" #include "openvino/op/util/attr_types.hpp"
#include "openvino/opsets/opset8.hpp" #include "openvino/opsets/opset8.hpp"
#include "utils.hpp" #include "utils.hpp"

View File

@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: Apache-2.0
// //
#include "op_table.hpp" #include "common_op_table.hpp"
#include "openvino/opsets/opset8.hpp" #include "openvino/opsets/opset8.hpp"
using namespace std; using namespace std;

View File

@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: Apache-2.0
// //
#include "op_table.hpp" #include "common_op_table.hpp"
#include "openvino/opsets/opset8.hpp" #include "openvino/opsets/opset8.hpp"
using namespace std; using namespace std;

View File

@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: Apache-2.0
// //
#include "op_table.hpp" #include "common_op_table.hpp"
#include "openvino/opsets/opset10.hpp" #include "openvino/opsets/opset10.hpp"
using namespace std; using namespace std;

View File

@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: Apache-2.0
// //
#include "op_table.hpp" #include "common_op_table.hpp"
#include "openvino/opsets/opset8.hpp" #include "openvino/opsets/opset8.hpp"
using namespace std; using namespace std;

View File

@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: Apache-2.0
// //
#include "op_table.hpp" #include "common_op_table.hpp"
#include "openvino/opsets/opset8.hpp" #include "openvino/opsets/opset8.hpp"
using namespace std; using namespace std;

View File

@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: Apache-2.0
// //
#include "op_table.hpp" #include "common_op_table.hpp"
#include "openvino/opsets/opset8.hpp" #include "openvino/opsets/opset8.hpp"
using namespace std; using namespace std;

View File

@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: Apache-2.0
// //
#include "op_table.hpp" #include "common_op_table.hpp"
#include "openvino/opsets/opset10.hpp" #include "openvino/opsets/opset10.hpp"
using namespace std; using namespace std;

View File

@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: Apache-2.0
// //
#include "op_table.hpp" #include "common_op_table.hpp"
#include "openvino/opsets/opset8.hpp" #include "openvino/opsets/opset8.hpp"
using namespace std; using namespace std;

View File

@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: Apache-2.0
// //
#include "op_table.hpp" #include "common_op_table.hpp"
#include "openvino/opsets/opset8.hpp" #include "openvino/opsets/opset8.hpp"
using namespace std; using namespace std;

View File

@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: Apache-2.0
// //
#include "op_table.hpp" #include "common_op_table.hpp"
#include "openvino/opsets/opset8.hpp" #include "openvino/opsets/opset8.hpp"
using namespace std; using namespace std;

View File

@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: Apache-2.0
// //
#include "op_table.hpp" #include "common_op_table.hpp"
#include "openvino/opsets/opset8.hpp" #include "openvino/opsets/opset8.hpp"
using namespace std; using namespace std;

View File

@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: Apache-2.0
// //
#include "op_table.hpp" #include "common_op_table.hpp"
#include "openvino/opsets/opset8.hpp" #include "openvino/opsets/opset8.hpp"
using namespace std; using namespace std;

View File

@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: Apache-2.0
// //
#include "op_table.hpp" #include "common_op_table.hpp"
#include "openvino/opsets/opset8.hpp" #include "openvino/opsets/opset8.hpp"
#include "utils.hpp" #include "utils.hpp"

View File

@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: Apache-2.0
// //
#include "op_table.hpp" #include "common_op_table.hpp"
#include "openvino/opsets/opset8.hpp" #include "openvino/opsets/opset8.hpp"
using namespace std; using namespace std;

View File

@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: Apache-2.0
// //
#include "op_table.hpp" #include "common_op_table.hpp"
#include "openvino/op/util/attr_types.hpp" #include "openvino/op/util/attr_types.hpp"
#include "openvino/opsets/opset8.hpp" #include "openvino/opsets/opset8.hpp"
#include "utils.hpp" #include "utils.hpp"

View File

@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: Apache-2.0
// //
#include "op_table.hpp" #include "common_op_table.hpp"
#include "openvino/opsets/opset8.hpp" #include "openvino/opsets/opset8.hpp"
#include "utils.hpp" #include "utils.hpp"

View File

@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: Apache-2.0
// //
#include "op_table.hpp" #include "common_op_table.hpp"
#include "openvino/opsets/opset8.hpp" #include "openvino/opsets/opset8.hpp"
using namespace std; using namespace std;

View File

@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: Apache-2.0
// //
#include "op_table.hpp" #include "common_op_table.hpp"
#include "openvino/opsets/opset10.hpp" #include "openvino/opsets/opset10.hpp"
using namespace std; using namespace std;

View File

@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: Apache-2.0
// //
#include "op_table.hpp" #include "common_op_table.hpp"
#include "openvino/opsets/opset8.hpp" #include "openvino/opsets/opset8.hpp"
using namespace std; using namespace std;

View File

@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: Apache-2.0
// //
#include "op_table.hpp" #include "common_op_table.hpp"
#include "openvino/opsets/opset8.hpp" #include "openvino/opsets/opset8.hpp"
using namespace std; using namespace std;

View File

@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: Apache-2.0
// //
#include "op_table.hpp" #include "common_op_table.hpp"
#include "openvino/opsets/opset8.hpp" #include "openvino/opsets/opset8.hpp"
using namespace std; using namespace std;

View File

@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: Apache-2.0
// //
#include "op_table.hpp" #include "common_op_table.hpp"
#include "openvino/opsets/opset9.hpp" #include "openvino/opsets/opset9.hpp"
using namespace std; using namespace std;

View File

@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: Apache-2.0
// //
#include "op_table.hpp" #include "common_op_table.hpp"
#include "openvino/opsets/opset9.hpp" #include "openvino/opsets/opset9.hpp"
using namespace std; using namespace std;

View File

@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: Apache-2.0
// //
#include "op_table.hpp" #include "common_op_table.hpp"
#include "openvino/opsets/opset8.hpp" #include "openvino/opsets/opset8.hpp"
using namespace std; using namespace std;

View File

@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: Apache-2.0
// //
#include "op_table.hpp" #include "common_op_table.hpp"
#include "openvino/opsets/opset8.hpp" #include "openvino/opsets/opset8.hpp"
using namespace std; using namespace std;

View File

@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: Apache-2.0
// //
#include "op_table.hpp" #include "common_op_table.hpp"
#include "openvino/opsets/opset8.hpp" #include "openvino/opsets/opset8.hpp"
using namespace std; using namespace std;

View File

@ -2,7 +2,7 @@
// SPDX-License-Identifier: Apache-2.0 // SPDX-License-Identifier: Apache-2.0
// //
#include "op_table.hpp" #include "common_op_table.hpp"
#include "openvino/opsets/opset8.hpp" #include "openvino/opsets/opset8.hpp"
using namespace std; using namespace std;

Some files were not shown because too many files have changed in this diff Show More