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:
parent
66c0dcc742
commit
e2a1bd78a4
@ -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
|
||||
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
|
||||
displayName: 'Low Precision Transformations Tests'
|
||||
|
||||
|
@ -320,6 +320,12 @@ jobs:
|
||||
LD_LIBRARY_PATH: $(INSTALL_TEST_DIR)
|
||||
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
|
||||
- script: $(INSTALL_TEST_DIR)/InferenceEngineUnitTests --gtest_print_time=1 --gtest_output=xml:$(INSTALL_TEST_DIR)/TEST-InferenceEngineUnitTests.xml
|
||||
displayName: 'IE UT old'
|
||||
|
@ -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
|
||||
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
|
||||
displayName: 'Low Precision Transformations Tests'
|
||||
|
||||
|
1
.github/CODEOWNERS
vendored
1
.github/CODEOWNERS
vendored
@ -80,6 +80,7 @@
|
||||
/src/frontends/ir/ @openvinotoolkit/openvino-ir-frontend-maintainers
|
||||
/src/frontends/paddle/ @openvinotoolkit/openvino-ie-paddle-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
|
||||
|
||||
# OpenVINO ONNX Frontend:
|
||||
|
1
.github/labeler.yml
vendored
1
.github/labeler.yml
vendored
@ -119,6 +119,7 @@
|
||||
|
||||
'category: TF FE':
|
||||
- 'src/frontends/tensorflow/**/*'
|
||||
- 'src/frontends/tensorflow_common/**/*'
|
||||
- 'tests/layer_tests/tensorflow_tests/**/*'
|
||||
|
||||
'category: PyTorch FE':
|
||||
|
@ -25,5 +25,6 @@ if(ENABLE_OV_IR_FRONTEND)
|
||||
endif()
|
||||
|
||||
if(ENABLE_OV_TF_FRONTEND)
|
||||
add_subdirectory(tensorflow_common)
|
||||
add_subdirectory(tensorflow)
|
||||
endif()
|
||||
|
@ -5,6 +5,8 @@
|
||||
#pragma once
|
||||
|
||||
#include "openvino/core/any.hpp"
|
||||
#include "openvino/frontend/exception.hpp"
|
||||
#include "openvino/frontend/visibility.hpp"
|
||||
|
||||
namespace ov {
|
||||
namespace frontend {
|
||||
@ -44,5 +46,35 @@ public:
|
||||
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 ov
|
||||
|
@ -52,6 +52,10 @@ public:
|
||||
return m_op_type;
|
||||
}
|
||||
|
||||
virtual const std::string& get_name() const {
|
||||
FRONT_END_NOT_IMPLEMENTED(get_name);
|
||||
}
|
||||
|
||||
/// \brief Returns node attribute by name.
|
||||
template <class T>
|
||||
T get_attribute(const std::string& name) const {
|
||||
|
9
src/frontends/common/src/decoder.cpp
Normal file
9
src/frontends/common/src/decoder.cpp
Normal 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;
|
@ -45,6 +45,9 @@ The structure of OpenVINO TensorFlow Frontend sources includes the following dir
|
||||
* [src](./src/) folder contains the sources of the component.
|
||||
* [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
|
||||
|
||||
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
|
||||
|
||||
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.
|
||||
* Two passes consist of [Loaders](./src/op/) and [Internal Transformations](./src/helper_transforms),
|
||||
where the first pass transforms a TF operation into a sub-graph with [Internal Operations](./src/helper_ops),
|
||||
* One pass using [Loaders](../tensorflow_common/src/op/) directly transforms TF operation into a sub-graph of OpenVINO opset.
|
||||
* 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](../tensorflow_common/include/src/helper_ops),
|
||||
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.
|
||||
|
||||
@ -108,7 +111,7 @@ In most cases, it is sufficient to use just one pass for TensorFlow operation co
|
||||
### 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
|
||||
|
||||
@ -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.
|
||||
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:
|
||||
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
|
||||
|
||||
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.
|
||||
|
||||
Here is an example of an implementation for the internal operation `SparseFillEmptyRows` used to convert Wide and Deep models.
|
||||
|
@ -1,45 +1,15 @@
|
||||
// Copyright (C) 2018-2023 Intel Corporation
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
//
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "openvino/core/any.hpp"
|
||||
#include "openvino/frontend/tensorflow/visibility.hpp"
|
||||
#include "openvino/frontend/decoder.hpp"
|
||||
|
||||
namespace ov {
|
||||
namespace frontend {
|
||||
namespace tensorflow {
|
||||
|
||||
class TENSORFLOW_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() = default;
|
||||
};
|
||||
using DecoderBase = ov::frontend::DecoderBase;
|
||||
|
||||
} // namespace tensorflow
|
||||
} // namespace frontend
|
||||
|
@ -6,22 +6,6 @@
|
||||
#include "openvino/frontend/exception.hpp"
|
||||
|
||||
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.
|
||||
/// \param node_context Object of NodeContext class
|
||||
/// \param cond Condition to check
|
||||
@ -29,6 +13,11 @@ private:
|
||||
/// stream-insertion operator. Note that the expressions here will be evaluated lazily,
|
||||
/// i.e., only if the `cond` evalutes to `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
|
||||
|
@ -6,7 +6,7 @@
|
||||
|
||||
#include "openvino/core/any.hpp"
|
||||
#include "openvino/frontend/tensorflow/decoder.hpp"
|
||||
#include "openvino/frontend/visibility.hpp"
|
||||
#include "openvino/frontend/tensorflow/visibility.hpp"
|
||||
|
||||
namespace ov {
|
||||
namespace frontend {
|
||||
|
@ -41,7 +41,7 @@ public:
|
||||
}
|
||||
|
||||
/// \brief Get a node name
|
||||
std::string get_name() const {
|
||||
const std::string& get_name() const override {
|
||||
return m_decoder->get_op_name();
|
||||
}
|
||||
|
||||
|
@ -7,20 +7,5 @@ ov_add_frontend(NAME tensorflow
|
||||
FILEDESCRIPTION "FrontEnd to load and convert TensorFlow file format"
|
||||
LINK_LIBRARIES openvino::util openvino::runtime::dev)
|
||||
|
||||
# add object library used in tests for private transformations
|
||||
|
||||
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>)
|
||||
set(TARGET_NAME "${FRONTEND_NAME_PREFIX}tensorflow${FRONTEND_NAME_SUFFIX}")
|
||||
target_link_libraries(${TARGET_NAME} PRIVATE openvino::frontend::tensorflow_common)
|
||||
|
@ -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
|
@ -4,9 +4,10 @@
|
||||
|
||||
#include "helper_ops/block_lstm.hpp"
|
||||
|
||||
#include "common_op_table.hpp"
|
||||
#include "ngraph/validation_util.hpp"
|
||||
#include "op_table.hpp"
|
||||
#include "openvino/core/validation_util.hpp"
|
||||
#include "openvino/frontend/tensorflow/node_context.hpp"
|
||||
|
||||
using namespace std;
|
||||
|
||||
@ -14,7 +15,7 @@ namespace ov {
|
||||
namespace frontend {
|
||||
namespace tensorflow {
|
||||
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"});
|
||||
auto seq_len_max = node.get_input(0);
|
||||
auto x = node.get_input(1);
|
||||
|
@ -4,7 +4,8 @@
|
||||
|
||||
#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 ov;
|
||||
@ -15,7 +16,7 @@ namespace frontend {
|
||||
namespace tensorflow {
|
||||
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
|
||||
// Inputs:
|
||||
// 0) x: Input to the GRU cell
|
||||
|
@ -2,8 +2,8 @@
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
//
|
||||
|
||||
#include "common_op_table.hpp"
|
||||
#include "input_model.hpp"
|
||||
#include "op_table.hpp"
|
||||
#include "openvino/opsets/opset10.hpp"
|
||||
|
||||
using namespace std;
|
||||
|
@ -2,8 +2,8 @@
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
//
|
||||
|
||||
#include "common_op_table.hpp"
|
||||
#include "input_model.hpp"
|
||||
#include "op_table.hpp"
|
||||
#include "openvino/opsets/opset10.hpp"
|
||||
|
||||
using namespace std;
|
||||
|
@ -2,11 +2,12 @@
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
//
|
||||
|
||||
#include "common_op_table.hpp"
|
||||
#include "helper_ops/sparse_fill_empty_rows.hpp"
|
||||
#include "helper_ops/sparse_segment_ops.hpp"
|
||||
#include "ngraph/validation_util.hpp"
|
||||
#include "op_table.hpp"
|
||||
#include "openvino/core/validation_util.hpp"
|
||||
#include "openvino/frontend/tensorflow/node_context.hpp"
|
||||
#include "openvino/opsets/opset8.hpp"
|
||||
|
||||
using namespace std;
|
||||
@ -17,7 +18,7 @@ namespace ov {
|
||||
namespace frontend {
|
||||
namespace tensorflow {
|
||||
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
|
||||
// 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.
|
||||
@ -71,7 +72,7 @@ OutputVector translate_sparse_reshape_op(const NodeContext& node) {
|
||||
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"});
|
||||
auto input_indices = node.get_input(0);
|
||||
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();
|
||||
}
|
||||
|
||||
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();
|
||||
TENSORFLOW_OP_VALIDATION(node,
|
||||
input_size == 3 || input_size == 4,
|
||||
|
@ -2,8 +2,8 @@
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
//
|
||||
|
||||
#include "common_op_table.hpp"
|
||||
#include "input_model.hpp"
|
||||
#include "op_table.hpp"
|
||||
#include "openvino/opsets/opset10.hpp"
|
||||
|
||||
using namespace std;
|
||||
|
@ -4,6 +4,7 @@
|
||||
|
||||
#include "op_table.hpp"
|
||||
|
||||
#include "common_op_table.hpp"
|
||||
#include "openvino/opsets/opset10.hpp"
|
||||
#include "openvino/opsets/opset9.hpp"
|
||||
|
||||
@ -15,131 +16,17 @@ namespace ov {
|
||||
namespace frontend {
|
||||
namespace tensorflow {
|
||||
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);
|
||||
OP_T_CONVERTER(translate_binary_op);
|
||||
OP_T_CONVERTER(translate_direct_reduce_op);
|
||||
#define TF_OP_CONVERTER(op) OutputVector op(const ov::frontend::tensorflow::NodeContext& node)
|
||||
|
||||
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_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);
|
||||
TF_OP_CONVERTER(translate_if_op);
|
||||
TF_OP_CONVERTER(translate_block_lstm_op);
|
||||
TF_OP_CONVERTER(translate_gru_block_cell_op);
|
||||
TF_OP_CONVERTER(translate_partitioned_call_op);
|
||||
TF_OP_CONVERTER(translate_sparse_fill_empty_rows_op);
|
||||
TF_OP_CONVERTER(translate_sparse_reshape_op);
|
||||
TF_OP_CONVERTER(translate_sparse_segment_sum_op);
|
||||
TF_OP_CONVERTER(translate_while_op);
|
||||
|
||||
const std::map<std::string, CreatorFunction> get_supported_ops() {
|
||||
return {
|
||||
|
@ -14,7 +14,7 @@ ov_add_test_target(
|
||||
gtest_main_manifest
|
||||
frontend_shared_test_classes
|
||||
openvino_tensorflow_frontend
|
||||
openvino_tensorflow_frontend_static_tests
|
||||
openvino_tensorflow_common
|
||||
ADD_CLANG_FORMAT
|
||||
LABELS
|
||||
OV
|
||||
|
9
src/frontends/tensorflow_common/CMakeLists.txt
Normal file
9
src/frontends/tensorflow_common/CMakeLists.txt
Normal 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()
|
146
src/frontends/tensorflow_common/include/common_op_table.hpp
Normal file
146
src/frontends/tensorflow_common/include/common_op_table.hpp
Normal 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
|
@ -7,14 +7,14 @@
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
#include "openvino/frontend/tensorflow/decoder.hpp"
|
||||
#include "openvino/frontend/decoder.hpp"
|
||||
#include "tf_framework_node.hpp"
|
||||
|
||||
namespace ov {
|
||||
namespace frontend {
|
||||
namespace tensorflow {
|
||||
|
||||
class DecoderFake : public ov::frontend::tensorflow::DecoderBase {
|
||||
class DecoderFake : public ov::frontend::DecoderBase {
|
||||
public:
|
||||
explicit DecoderFake() {}
|
||||
|
@ -8,7 +8,7 @@
|
||||
#include <vector>
|
||||
|
||||
#include "helper_ops/internal_operation.hpp"
|
||||
#include "openvino/frontend/tensorflow/decoder.hpp"
|
||||
#include "openvino/frontend/decoder.hpp"
|
||||
|
||||
namespace ov {
|
||||
namespace frontend {
|
@ -7,7 +7,6 @@
|
||||
#include <memory>
|
||||
#include <utility>
|
||||
|
||||
#include "openvino/frontend/tensorflow/visibility.hpp"
|
||||
#include "openvino/pass/graph_rewrite.hpp"
|
||||
#include "openvino/pass/pass.hpp"
|
||||
|
@ -7,7 +7,6 @@
|
||||
#include <memory>
|
||||
#include <utility>
|
||||
|
||||
#include "openvino/frontend/tensorflow/visibility.hpp"
|
||||
#include "openvino/pass/graph_rewrite.hpp"
|
||||
#include "openvino/pass/pass.hpp"
|
||||
|
@ -4,8 +4,8 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "openvino/frontend/decoder.hpp"
|
||||
#include "openvino/frontend/frontend.hpp"
|
||||
#include "openvino/frontend/tensorflow/decoder.hpp"
|
||||
|
||||
namespace ov {
|
||||
namespace frontend {
|
@ -6,7 +6,7 @@
|
||||
|
||||
#include <algorithm>
|
||||
|
||||
#include "openvino/frontend/tensorflow/decoder.hpp"
|
||||
#include "openvino/frontend/decoder.hpp"
|
||||
#include "openvino/op/util/framework_node.hpp"
|
||||
|
||||
namespace ov {
|
@ -5,10 +5,17 @@
|
||||
#pragma once
|
||||
|
||||
#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/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 frontend {
|
||||
namespace tensorflow {
|
26
src/frontends/tensorflow_common/src/CMakeLists.txt
Normal file
26
src/frontends/tensorflow_common/src/CMakeLists.txt
Normal 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})
|
@ -4,7 +4,7 @@
|
||||
|
||||
#include <numeric>
|
||||
|
||||
#include "op_table.hpp"
|
||||
#include "common_op_table.hpp"
|
||||
#include "openvino/opsets/opset8.hpp"
|
||||
|
||||
using namespace std;
|
@ -2,7 +2,7 @@
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
//
|
||||
|
||||
#include "op_table.hpp"
|
||||
#include "common_op_table.hpp"
|
||||
#include "openvino/opsets/opset8.hpp"
|
||||
|
||||
using namespace std;
|
@ -2,7 +2,7 @@
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
//
|
||||
|
||||
#include "op_table.hpp"
|
||||
#include "common_op_table.hpp"
|
||||
#include "openvino/opsets/opset10.hpp"
|
||||
|
||||
using namespace std;
|
@ -4,7 +4,7 @@
|
||||
|
||||
#include <numeric>
|
||||
|
||||
#include "op_table.hpp"
|
||||
#include "common_op_table.hpp"
|
||||
#include "openvino/core/validation_util.hpp"
|
||||
|
||||
using namespace std;
|
@ -2,7 +2,7 @@
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
//
|
||||
|
||||
#include "op_table.hpp"
|
||||
#include "common_op_table.hpp"
|
||||
#include "openvino/opsets/opset8.hpp"
|
||||
|
||||
using namespace std;
|
@ -2,7 +2,7 @@
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
//
|
||||
|
||||
#include "op_table.hpp"
|
||||
#include "common_op_table.hpp"
|
||||
#include "openvino/opsets/opset8.hpp"
|
||||
|
||||
using namespace std;
|
@ -2,7 +2,7 @@
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
//
|
||||
|
||||
#include "op_table.hpp"
|
||||
#include "common_op_table.hpp"
|
||||
#include "openvino/opsets/opset8.hpp"
|
||||
|
||||
using namespace std;
|
@ -2,7 +2,7 @@
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
//
|
||||
|
||||
#include "op_table.hpp"
|
||||
#include "common_op_table.hpp"
|
||||
#include "openvino/opsets/opset8.hpp"
|
||||
|
||||
using namespace std;
|
@ -2,7 +2,7 @@
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
//
|
||||
|
||||
#include "op_table.hpp"
|
||||
#include "common_op_table.hpp"
|
||||
#include "openvino/opsets/opset8.hpp"
|
||||
|
||||
using namespace std;
|
@ -2,7 +2,7 @@
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
//
|
||||
|
||||
#include "op_table.hpp"
|
||||
#include "common_op_table.hpp"
|
||||
#include "openvino/opsets/opset8.hpp"
|
||||
|
||||
using namespace std;
|
@ -2,7 +2,7 @@
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
//
|
||||
|
||||
#include "op_table.hpp"
|
||||
#include "common_op_table.hpp"
|
||||
#include "openvino/opsets/opset8.hpp"
|
||||
|
||||
using namespace std;
|
@ -2,7 +2,7 @@
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
//
|
||||
|
||||
#include "op_table.hpp"
|
||||
#include "common_op_table.hpp"
|
||||
#include "openvino/opsets/opset10.hpp"
|
||||
|
||||
using namespace std;
|
@ -2,7 +2,7 @@
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
//
|
||||
|
||||
#include "op_table.hpp"
|
||||
#include "common_op_table.hpp"
|
||||
#include "openvino/opsets/opset8.hpp"
|
||||
|
||||
using namespace std;
|
@ -2,8 +2,8 @@
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
//
|
||||
|
||||
#include "common_op_table.hpp"
|
||||
#include "helper_ops/unsupported_constant.hpp"
|
||||
#include "op_table.hpp"
|
||||
#include "openvino/opsets/opset8.hpp"
|
||||
|
||||
using namespace std;
|
@ -2,7 +2,7 @@
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
//
|
||||
|
||||
#include "op_table.hpp"
|
||||
#include "common_op_table.hpp"
|
||||
#include "openvino/opsets/opset8.hpp"
|
||||
#include "utils.hpp"
|
||||
|
@ -2,7 +2,7 @@
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
//
|
||||
|
||||
#include "op_table.hpp"
|
||||
#include "common_op_table.hpp"
|
||||
#include "openvino/op/util/attr_types.hpp"
|
||||
#include "openvino/opsets/opset8.hpp"
|
||||
#include "utils.hpp"
|
@ -2,7 +2,7 @@
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
//
|
||||
|
||||
#include "op_table.hpp"
|
||||
#include "common_op_table.hpp"
|
||||
#include "openvino/opsets/opset8.hpp"
|
||||
|
||||
using namespace std;
|
@ -2,7 +2,7 @@
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
//
|
||||
|
||||
#include "op_table.hpp"
|
||||
#include "common_op_table.hpp"
|
||||
#include "openvino/opsets/opset8.hpp"
|
||||
|
||||
using namespace std;
|
@ -2,7 +2,7 @@
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
//
|
||||
|
||||
#include "op_table.hpp"
|
||||
#include "common_op_table.hpp"
|
||||
#include "openvino/opsets/opset8.hpp"
|
||||
|
||||
using namespace std;
|
@ -2,7 +2,7 @@
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
//
|
||||
|
||||
#include "op_table.hpp"
|
||||
#include "common_op_table.hpp"
|
||||
#include "openvino/opsets/opset8.hpp"
|
||||
|
||||
using namespace std;
|
@ -2,7 +2,7 @@
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
//
|
||||
|
||||
#include "op_table.hpp"
|
||||
#include "common_op_table.hpp"
|
||||
#include "openvino/opsets/opset8.hpp"
|
||||
|
||||
using namespace std;
|
@ -2,7 +2,7 @@
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
//
|
||||
|
||||
#include "op_table.hpp"
|
||||
#include "common_op_table.hpp"
|
||||
#include "openvino/opsets/opset8.hpp"
|
||||
|
||||
using namespace std;
|
@ -2,7 +2,7 @@
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
//
|
||||
|
||||
#include "op_table.hpp"
|
||||
#include "common_op_table.hpp"
|
||||
#include "openvino/opsets/opset8.hpp"
|
||||
|
||||
using namespace std;
|
@ -2,7 +2,7 @@
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
//
|
||||
|
||||
#include "op_table.hpp"
|
||||
#include "common_op_table.hpp"
|
||||
#include "openvino/opsets/opset8.hpp"
|
||||
|
||||
using namespace std;
|
@ -4,7 +4,7 @@
|
||||
|
||||
#include <limits>
|
||||
|
||||
#include "op_table.hpp"
|
||||
#include "common_op_table.hpp"
|
||||
#include "openvino/opsets/opset9.hpp"
|
||||
|
||||
using namespace std;
|
@ -2,7 +2,7 @@
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
//
|
||||
|
||||
#include "op_table.hpp"
|
||||
#include "common_op_table.hpp"
|
||||
#include "openvino/opsets/opset8.hpp"
|
||||
|
||||
using namespace std;
|
@ -2,8 +2,7 @@
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
//
|
||||
|
||||
#include "op_table.hpp"
|
||||
#include "openvino/frontend/tensorflow/node_context.hpp"
|
||||
#include "common_op_table.hpp"
|
||||
#include "openvino/opsets/opset8.hpp"
|
||||
|
||||
using namespace std;
|
@ -2,7 +2,7 @@
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
//
|
||||
|
||||
#include "op_table.hpp"
|
||||
#include "common_op_table.hpp"
|
||||
#include "openvino/opsets/opset8.hpp"
|
||||
|
||||
using namespace std;
|
@ -2,7 +2,7 @@
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
//
|
||||
|
||||
#include "op_table.hpp"
|
||||
#include "common_op_table.hpp"
|
||||
#include "openvino/op/util/attr_types.hpp"
|
||||
#include "openvino/opsets/opset8.hpp"
|
||||
#include "utils.hpp"
|
@ -2,7 +2,7 @@
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
//
|
||||
|
||||
#include "op_table.hpp"
|
||||
#include "common_op_table.hpp"
|
||||
#include "openvino/opsets/opset8.hpp"
|
||||
|
||||
using namespace std;
|
@ -2,7 +2,7 @@
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
//
|
||||
|
||||
#include "op_table.hpp"
|
||||
#include "common_op_table.hpp"
|
||||
#include "openvino/opsets/opset8.hpp"
|
||||
|
||||
using namespace std;
|
@ -2,7 +2,7 @@
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
//
|
||||
|
||||
#include "op_table.hpp"
|
||||
#include "common_op_table.hpp"
|
||||
#include "openvino/opsets/opset10.hpp"
|
||||
|
||||
using namespace std;
|
@ -2,7 +2,7 @@
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
//
|
||||
|
||||
#include "op_table.hpp"
|
||||
#include "common_op_table.hpp"
|
||||
#include "openvino/opsets/opset8.hpp"
|
||||
|
||||
using namespace std;
|
@ -2,7 +2,7 @@
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
//
|
||||
|
||||
#include "op_table.hpp"
|
||||
#include "common_op_table.hpp"
|
||||
#include "openvino/opsets/opset8.hpp"
|
||||
|
||||
using namespace std;
|
@ -2,7 +2,7 @@
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
//
|
||||
|
||||
#include "op_table.hpp"
|
||||
#include "common_op_table.hpp"
|
||||
#include "openvino/opsets/opset8.hpp"
|
||||
|
||||
using namespace std;
|
@ -2,7 +2,7 @@
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
//
|
||||
|
||||
#include "op_table.hpp"
|
||||
#include "common_op_table.hpp"
|
||||
#include "openvino/opsets/opset10.hpp"
|
||||
|
||||
using namespace std;
|
@ -2,7 +2,7 @@
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
//
|
||||
|
||||
#include "op_table.hpp"
|
||||
#include "common_op_table.hpp"
|
||||
#include "openvino/opsets/opset8.hpp"
|
||||
|
||||
using namespace std;
|
@ -2,7 +2,7 @@
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
//
|
||||
|
||||
#include "op_table.hpp"
|
||||
#include "common_op_table.hpp"
|
||||
#include "openvino/opsets/opset8.hpp"
|
||||
|
||||
using namespace std;
|
@ -2,7 +2,7 @@
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
//
|
||||
|
||||
#include "op_table.hpp"
|
||||
#include "common_op_table.hpp"
|
||||
#include "openvino/opsets/opset8.hpp"
|
||||
|
||||
using namespace std;
|
@ -2,7 +2,7 @@
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
//
|
||||
|
||||
#include "op_table.hpp"
|
||||
#include "common_op_table.hpp"
|
||||
#include "openvino/opsets/opset8.hpp"
|
||||
|
||||
using namespace std;
|
@ -2,7 +2,7 @@
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
//
|
||||
|
||||
#include "op_table.hpp"
|
||||
#include "common_op_table.hpp"
|
||||
#include "openvino/opsets/opset8.hpp"
|
||||
|
||||
using namespace std;
|
@ -2,7 +2,7 @@
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
//
|
||||
|
||||
#include "op_table.hpp"
|
||||
#include "common_op_table.hpp"
|
||||
#include "openvino/opsets/opset8.hpp"
|
||||
#include "utils.hpp"
|
||||
|
@ -2,7 +2,7 @@
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
//
|
||||
|
||||
#include "op_table.hpp"
|
||||
#include "common_op_table.hpp"
|
||||
#include "openvino/opsets/opset8.hpp"
|
||||
|
||||
using namespace std;
|
@ -2,7 +2,7 @@
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
//
|
||||
|
||||
#include "op_table.hpp"
|
||||
#include "common_op_table.hpp"
|
||||
#include "openvino/op/util/attr_types.hpp"
|
||||
#include "openvino/opsets/opset8.hpp"
|
||||
#include "utils.hpp"
|
@ -2,7 +2,7 @@
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
//
|
||||
|
||||
#include "op_table.hpp"
|
||||
#include "common_op_table.hpp"
|
||||
#include "openvino/opsets/opset8.hpp"
|
||||
#include "utils.hpp"
|
||||
|
@ -2,7 +2,7 @@
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
//
|
||||
|
||||
#include "op_table.hpp"
|
||||
#include "common_op_table.hpp"
|
||||
#include "openvino/opsets/opset8.hpp"
|
||||
|
||||
using namespace std;
|
@ -2,7 +2,7 @@
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
//
|
||||
|
||||
#include "op_table.hpp"
|
||||
#include "common_op_table.hpp"
|
||||
#include "openvino/opsets/opset10.hpp"
|
||||
|
||||
using namespace std;
|
@ -2,7 +2,7 @@
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
//
|
||||
|
||||
#include "op_table.hpp"
|
||||
#include "common_op_table.hpp"
|
||||
#include "openvino/opsets/opset8.hpp"
|
||||
|
||||
using namespace std;
|
@ -2,7 +2,7 @@
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
//
|
||||
|
||||
#include "op_table.hpp"
|
||||
#include "common_op_table.hpp"
|
||||
#include "openvino/opsets/opset8.hpp"
|
||||
|
||||
using namespace std;
|
@ -2,7 +2,7 @@
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
//
|
||||
|
||||
#include "op_table.hpp"
|
||||
#include "common_op_table.hpp"
|
||||
#include "openvino/opsets/opset8.hpp"
|
||||
|
||||
using namespace std;
|
@ -2,7 +2,7 @@
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
//
|
||||
|
||||
#include "op_table.hpp"
|
||||
#include "common_op_table.hpp"
|
||||
#include "openvino/opsets/opset9.hpp"
|
||||
|
||||
using namespace std;
|
@ -2,7 +2,7 @@
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
//
|
||||
|
||||
#include "op_table.hpp"
|
||||
#include "common_op_table.hpp"
|
||||
#include "openvino/opsets/opset9.hpp"
|
||||
|
||||
using namespace std;
|
@ -2,7 +2,7 @@
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
//
|
||||
|
||||
#include "op_table.hpp"
|
||||
#include "common_op_table.hpp"
|
||||
#include "openvino/opsets/opset8.hpp"
|
||||
|
||||
using namespace std;
|
@ -2,7 +2,7 @@
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
//
|
||||
|
||||
#include "op_table.hpp"
|
||||
#include "common_op_table.hpp"
|
||||
#include "openvino/opsets/opset8.hpp"
|
||||
|
||||
using namespace std;
|
@ -2,7 +2,7 @@
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
//
|
||||
|
||||
#include "op_table.hpp"
|
||||
#include "common_op_table.hpp"
|
||||
#include "openvino/opsets/opset8.hpp"
|
||||
|
||||
using namespace std;
|
@ -2,7 +2,7 @@
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
//
|
||||
|
||||
#include "op_table.hpp"
|
||||
#include "common_op_table.hpp"
|
||||
#include "openvino/opsets/opset8.hpp"
|
||||
|
||||
using namespace std;
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user