def apply_offline_transformations(input_model: str,
                                  framework: str,
                                  transforms: list,
                                  compress_fp16=False):
    # This variable is only needed by GenerateMappingFile transformation
    # to produce correct mapping
    extract_names = framework in ['tf', 'mxnet', 'kaldi']

    from openvino.offline_transformations_pybind import generate_mapping_file, serialize  # pylint: disable=import-error,no-name-in-module
    from openvino.frontend import FrontEndManager, FrontEnd  # pylint: disable=no-name-in-module,import-error

    fem = FrontEndManager()

    # We have to separate fe object lifetime from fem to
    # avoid segfault during object destruction. So fe must
    # be destructed before fem object explicitly.
    def read_model(path_to_xml):
        fe = fem.load_by_framework(framework="ir")
        function = fe.convert(fe.load(path_to_xml))
        return function

    func = read_model(input_model + "_tmp.xml")

    apply_user_transformations(func, transforms)
    apply_moc_transformations(func)

    if compress_fp16:
        compress_model(func)

    serialize(func,
              str(input_model + ".xml").encode('utf-8'),
              (input_model + ".bin").encode('utf-8'))
    path_to_mapping = input_model + ".mapping"
    generate_mapping_file(func, path_to_mapping.encode('utf-8'), extract_names)
def base_args_config(use_legacy_fe: bool = None, use_new_fe: bool = None):
    args = argparse.Namespace()
    args.feManager = FrontEndManager()
    args.extensions = None
    args.use_legacy_frontend = use_legacy_fe
    args.use_new_frontend = use_new_fe
    args.framework = 'onnx'
    args.model_name = None
    args.input_model = None
    args.silent = True
    args.transform = []
    args.legacy_ir_generation = False
    args.scale = None
    args.output = None
    args.input = None
    args.input_shape = None
    args.batch = None
    args.mean_values = None
    args.scale_values = None
    args.output_dir = os.getcwd()
    args.freeze_placeholder_with_value = None
    args.transformations_config = None
    args.disable_fusing = None
    args.finegrain_fusing = None
    args.disable_gfusing = None
    args.disable_resnet_optimization = None
    args.enable_concat_optimization = None
    args.static_shape = None
    args.disable_weights_compression = None
    args.reverse_input_channels = None
    args.data_type = None
    args.layout = None
    args.source_layout = None
    args.target_layout = None
    return args
Ejemplo n.º 3
0
def apply_offline_transformations(input_model: str, argv: argparse.Namespace):
    # This variable is only needed by GenerateMappingFile transformation
    # to produce correct mapping
    extract_names = argv.framework in ['tf', 'mxnet', 'kaldi']

    from openvino.offline_transformations import generate_mapping_file, serialize  # pylint: disable=import-error,no-name-in-module
    from openvino.frontend import FrontEndManager  # pylint: disable=no-name-in-module,import-error
    from openvino.tools.mo.back.preprocessing import apply_preprocessing  # pylint: disable=no-name-in-module,import-error

    fem = FrontEndManager()

    # We have to separate fe object lifetime from fem to
    # avoid segfault during object destruction. So fe must
    # be destructed before fem object explicitly.
    def read_model(path_to_xml):
        fe = fem.load_by_framework(framework="ir")
        function = fe.convert(fe.load(path_to_xml))
        return function

    func = read_model(input_model + "_tmp.xml")

    # TODO: use ngraph preprocessing (Mean/Scale/ReverseInputChannels) for legacy frontends
    reverse_input_channels = False
    if 'reverse_input_channels' in argv:
        reverse_input_channels = argv.reverse_input_channels
        argv.reverse_input_channels = False
    mean_scale_values = {}
    if 'mean_scale_values' in argv:
        mean_scale_values = argv.mean_scale_values
        argv.mean_scale_values = {}
    scale = None
    if 'scale' in argv:
        scale = argv.scale
        argv.scale = None

    # Apply preprocessing for layouts only
    apply_preprocessing(ov_function=func, argv=argv)

    if 'reverse_input_channels' in argv:
        argv.reverse_input_channels = reverse_input_channels
    if 'mean_scale_values' in argv:
        argv.mean_scale_values = mean_scale_values
    if 'scale' in argv:
        argv.scale = scale

    apply_moc_transformations(func)

    params_with_custom_types = create_params_with_custom_types(
        argv.packed_user_shapes)
    apply_moc_legacy_transformations(func, params_with_custom_types)
    apply_user_transformations(func, parse_transform(argv.transform))

    if "compress_fp16" in argv and argv.compress_fp16:
        compress_model(func)

    serialize(func,
              str(input_model + ".xml").encode('utf-8'),
              (input_model + ".bin").encode('utf-8'))
    path_to_mapping = input_model + ".mapping"
    generate_mapping_file(func, path_to_mapping.encode('utf-8'), extract_names)
Ejemplo n.º 4
0
        if analysis_results.get_messages() is not None:
            for el in analysis_results.get_messages():
                log.error(el, extra={'analysis_info': True})
        log.error(err)
        log.debug(traceback.format_exc())
    except FrameworkError as err:
        log.error(err, extra={'framework_error': True})
        log.debug(traceback.format_exc())
    except Exception as err:
        log.error("-------------------------------------------------")
        log.error("----------------- INTERNAL ERROR ----------------")
        log.error("Unexpected exception happened.")
        log.error(
            "Please contact Model Optimizer developers and forward the following information:"
        )
        log.error(str(err))
        log.error(traceback.format_exc())
        log.error("---------------- END OF BUG REPORT --------------")
        log.error("-------------------------------------------------")

    telemetry.send_event('mo', 'conversion_result', 'fail')
    telemetry.end_session('mo')
    telemetry.force_shutdown(1.0)
    return 1


if __name__ == "__main__":
    from openvino.tools.mo.utils.cli_parser import get_all_cli_parser
    fe_manager = FrontEndManager()
    sys.exit(main(get_all_cli_parser(fe_manager), fe_manager, None))
    # pylint: disable=no-name-in-module,import-error
    from openvino.runtime import PartialShape
    from openvino.frontend import FrontEndManager
    from openvino.runtime.utils.types import get_element_type

except Exception:
    print("No mock frontend API available, "
          "ensure to use -DENABLE_TESTS=ON option when running these tests")
    mock_available = False

# FrontEndManager shall be initialized and destroyed after all tests finished
# This is because destroy of FrontEndManager will unload all plugins,
# no objects shall exist after this
if mock_available:
    fem = FrontEndManager()

mock_needed = pytest.mark.skipif(not mock_available,
                                 reason="mock MO fe is not available")


def replaceArgsHelper(log_level='DEBUG',
                      silent=False,
                      model_name='abc',
                      input_model='abc.test_mo_mock_mdl',
                      transform=[],
                      legacy_ir_generation=False,
                      scale=None,
                      output=None,
                      _input=None,
                      input_shape=None,
Ejemplo n.º 6
0
# Copyright (C) 2021 Intel Corporation
# SPDX-License-Identifier: Apache-2.0

import sys

from openvino.tools.mo.utils.cli_parser import get_onnx_cli_parser

if __name__ == "__main__":
    from openvino.tools.mo.main import main
    from openvino.frontend import FrontEndManager  # pylint: disable=no-name-in-module,import-error

    sys.exit(main(get_onnx_cli_parser(), FrontEndManager(), 'onnx'))