diff --git a/inference-engine/ie_bridges/python/src/openvino/offline_transformations/offline_transformations_api_impl.cpp b/inference-engine/ie_bridges/python/src/openvino/offline_transformations/offline_transformations_api_impl.cpp index 8b213824a33..ad385b61f0d 100644 --- a/inference-engine/ie_bridges/python/src/openvino/offline_transformations/offline_transformations_api_impl.cpp +++ b/inference-engine/ie_bridges/python/src/openvino/offline_transformations/offline_transformations_api_impl.cpp @@ -5,13 +5,13 @@ #include "offline_transformations_api_impl.hpp" #include -#include #include #include #include #include #include #include +#include #include void InferenceEnginePython::ApplyMOCTransformations(InferenceEnginePython::IENetwork network, bool cf) { diff --git a/inference-engine/src/transformations/include/transformations/common_optimizations/disable_random_uniform_constant_folding.hpp b/inference-engine/src/transformations/include/transformations/common_optimizations/disable_random_uniform_constant_folding.hpp index e9c59587eb6..466bec32e4f 100644 --- a/inference-engine/src/transformations/include/transformations/common_optimizations/disable_random_uniform_constant_folding.hpp +++ b/inference-engine/src/transformations/include/transformations/common_optimizations/disable_random_uniform_constant_folding.hpp @@ -5,12 +5,15 @@ #pragma once #include + +#include + #include namespace ngraph { namespace pass { -class DisableRandomUniformConstantFolding; +class TRANSFORMATIONS_API DisableRandomUniformConstantFolding; } // namespace pass } // namespace ngraph diff --git a/inference-engine/src/offline_transformations/include/disable_shapeof_constant_folding.hpp b/inference-engine/src/transformations/include/transformations/common_optimizations/disable_shapeof_constant_folding.hpp similarity index 80% rename from inference-engine/src/offline_transformations/include/disable_shapeof_constant_folding.hpp rename to inference-engine/src/transformations/include/transformations/common_optimizations/disable_shapeof_constant_folding.hpp index 678b41af0ef..ec56a0e8ecf 100644 --- a/inference-engine/src/offline_transformations/include/disable_shapeof_constant_folding.hpp +++ b/inference-engine/src/transformations/include/transformations/common_optimizations/disable_shapeof_constant_folding.hpp @@ -6,12 +6,14 @@ #include +#include + #include namespace ngraph { namespace pass { -class DisableShapeOfConstantFolding; +class TRANSFORMATIONS_API DisableShapeOfConstantFolding; } // namespace pass } // namespace ngraph diff --git a/inference-engine/src/offline_transformations/include/moc_transformations.hpp b/inference-engine/src/transformations/include/transformations/common_optimizations/moc_transformations.hpp similarity index 52% rename from inference-engine/src/offline_transformations/include/moc_transformations.hpp rename to inference-engine/src/transformations/include/transformations/common_optimizations/moc_transformations.hpp index 1fc54569fdc..b0f66afcb85 100644 --- a/inference-engine/src/offline_transformations/include/moc_transformations.hpp +++ b/inference-engine/src/transformations/include/transformations/common_optimizations/moc_transformations.hpp @@ -6,12 +6,14 @@ #include +#include + #include namespace ngraph { namespace pass { -class MOCTransformations; +class TRANSFORMATIONS_API MOCTransformations; } // namespace pass } // namespace ngraph @@ -23,11 +25,20 @@ class MOCTransformations; */ class ngraph::pass::MOCTransformations: public ngraph::pass::FunctionPass { - bool m_cf; + bool m_use_shapes; + bool m_low_precision_enabled; public: NGRAPH_RTTI_DECLARATION; - explicit MOCTransformations(bool cf) : m_cf(cf) {} + /** + * use_shapes = True enables transformations which are depends on shapes and also it + * enables ConstantFolding for all ShapeOf operations. + * + * low_precision_enabled = True enables preserving mechanisms that helps to keep + * low_precision sub-graphs as is. + */ + explicit MOCTransformations(bool use_shapes, bool low_precision_enabled = true) + : m_use_shapes(use_shapes), m_low_precision_enabled(low_precision_enabled) {} bool run_on_function(std::shared_ptr) override; }; diff --git a/inference-engine/src/transformations/src/transformations/common_optimizations/common_optimizations.cpp b/inference-engine/src/transformations/src/transformations/common_optimizations/common_optimizations.cpp index abaa0261fc5..4f60d75b7f0 100644 --- a/inference-engine/src/transformations/src/transformations/common_optimizations/common_optimizations.cpp +++ b/inference-engine/src/transformations/src/transformations/common_optimizations/common_optimizations.cpp @@ -84,6 +84,7 @@ #include #include #include +#include NGRAPH_RTTI_DEFINITION(ngraph::pass::CommonOptimizations, "CommonOptimizations", 0); @@ -91,63 +92,23 @@ bool ngraph::pass::CommonOptimizations::run_on_function(std::shared_ptr(); - manager.register_pass(); - manager.register_pass(); - manager.register_pass(); - manager.register_pass(); // Resolves dynamism (replaces NonZero), CF needed - manager.register_pass(); // workaround until dynamism in NMS is not supported + // Disable low_precision_enabled as all plugins handle low-precision sub-graph manually + // before CommonOptimization pipeline execution + manager.register_pass(true, false); // TODO: move to KMB - manager.register_pass(); manager.register_pass(); - manager.register_pass(); - manager.register_pass(); // depends on CF - manager.register_pass(); - - auto transpose_sinking = manager.register_pass(); - transpose_sinking->add_matcher(); - // SplitSqueezeConcatFusion should work in same GraphRewrite as TransposesSinking, - // because it replaces pattern that may contain Transposes which must be optimized before - // the transformation and it also inserts Transpose that can be optimized by TransposeSinking - transpose_sinking->add_matcher(); - - auto eliminations = manager.register_pass(); - eliminations->add_matcher(); - eliminations->add_matcher(); // may introduce fake dynamism - eliminations->set_name("ngraph::pass::CommonEliminations"); - - manager.register_pass(); - auto common_fusions = manager.register_pass(); - common_fusions->add_matcher(); common_fusions->add_matcher(); - common_fusions->add_matcher(); - common_fusions->add_matcher(); - common_fusions->add_matcher(); common_fusions->add_matcher(false); - common_fusions->add_matcher(); - common_fusions->add_matcher(); - common_fusions->add_matcher(); - common_fusions->add_matcher(); - common_fusions->add_matcher(); - common_fusions->add_matcher(); - common_fusions->add_matcher(); common_fusions->add_matcher(); common_fusions->add_matcher(); - common_fusions->add_matcher(); - common_fusions->add_matcher(); common_fusions->add_matcher(); - common_fusions->add_matcher(); - common_fusions->add_matcher(); common_fusions->set_name("ngraph::pass::CommonFusions"); manager.register_pass(); manager.register_pass(); - manager.register_pass(); - manager.register_pass(); auto decomp = manager.register_pass(); decomp->add_matcher(); diff --git a/inference-engine/src/offline_transformations/src/disable_shapeof_constant_folding.cpp b/inference-engine/src/transformations/src/transformations/common_optimizations/disable_shapeof_constant_folding.cpp similarity index 89% rename from inference-engine/src/offline_transformations/src/disable_shapeof_constant_folding.cpp rename to inference-engine/src/transformations/src/transformations/common_optimizations/disable_shapeof_constant_folding.cpp index 456ba721647..4365b92583a 100644 --- a/inference-engine/src/offline_transformations/src/disable_shapeof_constant_folding.cpp +++ b/inference-engine/src/transformations/src/transformations/common_optimizations/disable_shapeof_constant_folding.cpp @@ -3,16 +3,13 @@ // #include -#include -#include #include #include #include -#include #include -#include "disable_shapeof_constant_folding.hpp" +#include NGRAPH_RTTI_DEFINITION(ngraph::pass::DisableShapeOfConstantFolding, "DisableShapeOfConstantFolding", 0); diff --git a/inference-engine/src/offline_transformations/src/moc_transformations.cpp b/inference-engine/src/transformations/src/transformations/common_optimizations/moc_transformations.cpp similarity index 73% rename from inference-engine/src/offline_transformations/src/moc_transformations.cpp rename to inference-engine/src/transformations/src/transformations/common_optimizations/moc_transformations.cpp index 1427f229d23..4fdcd5985cb 100644 --- a/inference-engine/src/offline_transformations/src/moc_transformations.cpp +++ b/inference-engine/src/transformations/src/transformations/common_optimizations/moc_transformations.cpp @@ -4,8 +4,8 @@ #include -#include "moc_transformations.hpp" -#include "disable_shapeof_constant_folding.hpp" +#include +#include #include #include @@ -40,7 +40,14 @@ #include #include #include -#include "transformations/common_optimizations/mul_conv_fusion.hpp" +#include +#include +#include +#include +#include +#include +#include +#include NGRAPH_RTTI_DEFINITION(ngraph::pass::MOCTransformations, "MOCTransformations", 0); @@ -48,25 +55,41 @@ bool ngraph::pass::MOCTransformations::run_on_function(std::shared_ptr input_shapes; - for (auto && param : f->get_parameters()) { - input_shapes[param.get()] = param->get_partial_shape(); - param->set_partial_shape(PartialShape::dynamic(param->get_partial_shape().rank())); + if (!m_use_shapes) { + for (auto &¶m : f->get_parameters()) { + input_shapes[param.get()] = param->get_partial_shape(); + param->set_partial_shape(PartialShape::dynamic(param->get_partial_shape().rank())); + } + f->validate_nodes_and_infer_types(); } - f->validate_nodes_and_infer_types(); ngraph::pass::Manager manager(get_pass_config()); manager.register_pass(); - manager.register_pass( - element::TypeVector{ ngraph::element::i8, ngraph::element::u8, ngraph::element::i4, ngraph::element::u4 }); - manager.register_pass(); + if (m_low_precision_enabled) { + manager.register_pass( + element::TypeVector{ ngraph::element::i8, ngraph::element::u8, ngraph::element::i4, ngraph::element::u4 }); + } + if (!m_use_shapes) { + manager.register_pass(); + } + manager.register_pass(); manager.register_pass(); manager.register_pass(); manager.register_pass(); manager.register_pass(); + if (!m_use_shapes) { + manager.register_pass(); + } // workaround until dynamism in NMS is not supported manager.register_pass(); + if (m_use_shapes) { + manager.register_pass(); + } + + manager.register_pass(); + auto transpose_sinking = manager.register_pass(); transpose_sinking->add_matcher(); // SplitSqueezeConcatFusion should work in same GraphRewrite as TransposesSinking, @@ -76,12 +99,13 @@ bool ngraph::pass::MOCTransformations::run_on_function(std::shared_ptr(); eliminations->add_matcher(); - eliminations->add_matcher(false /* do not use shape for elimination */); + eliminations->add_matcher(m_use_shapes /* do not use shape for elimination */); eliminations->set_name("ngraph::pass::CommonEliminations"); + manager.register_pass(); + auto common_fusions = manager.register_pass(); common_fusions->add_matcher(); - common_fusions->add_matcher(); common_fusions->add_matcher(); common_fusions->add_matcher(); common_fusions->add_matcher(); @@ -117,13 +141,17 @@ bool ngraph::pass::MOCTransformations::run_on_function(std::shared_ptradd_matcher(); conv_fusions->set_name("ngraph::pass::ConvFusions"); + manager.register_pass(); + manager.run_passes(f); - // Restore original shapes to the nGraph Function - for (auto && param : f->get_parameters()) { - param->set_partial_shape(input_shapes.at(param.get())); + if (!m_use_shapes) { + // Restore original shapes to the nGraph Function + for (auto &¶m : f->get_parameters()) { + param->set_partial_shape(input_shapes.at(param.get())); + } + f->validate_nodes_and_infer_types(); } - f->validate_nodes_and_infer_types(); return false; } diff --git a/inference-engine/tests/functional/inference_engine/transformations/disable_shapeof_constant_folding_tests.cpp b/inference-engine/tests/functional/inference_engine/transformations/disable_shapeof_constant_folding_tests.cpp index 2e526e4c72d..13ccc254a4a 100644 --- a/inference-engine/tests/functional/inference_engine/transformations/disable_shapeof_constant_folding_tests.cpp +++ b/inference-engine/tests/functional/inference_engine/transformations/disable_shapeof_constant_folding_tests.cpp @@ -13,7 +13,7 @@ #include #include -#include +#include #include #include "common_test_utils/ngraph_test_utils.hpp" diff --git a/model-optimizer/mo/utils/check_ie_bindings.py b/model-optimizer/mo/utils/check_ie_bindings.py index fd4732593c1..a86ee9b7321 100644 --- a/model-optimizer/mo/utils/check_ie_bindings.py +++ b/model-optimizer/mo/utils/check_ie_bindings.py @@ -98,7 +98,7 @@ def import_core_modules(silent: bool, path_to_module: str): return True except Exception as e: # Do not print a warning if module wasn't found or silent mode is on - if "No module named 'openvino'" not in str(e) and not silent: + if "No module named 'openvino'" not in str(e): print("[ WARNING ] Failed to import Inference Engine Python API in: {}".format(path_to_module)) print("[ WARNING ] {}".format(e))