From ac1803c3ad49950ea7de2b40388344c651ee2353 Mon Sep 17 00:00:00 2001 From: Nadezhda Ageeva Date: Wed, 2 Jun 2021 22:01:20 +0300 Subject: [PATCH] Fix python benchmark_app hanging on faster rcnn (#6003) --- tools/benchmark/benchmark.py | 2 +- tools/benchmark/parameters.py | 6 +++--- tools/benchmark/utils/utils.py | 17 ++++++++++++++--- 3 files changed, 18 insertions(+), 7 deletions(-) diff --git a/tools/benchmark/benchmark.py b/tools/benchmark/benchmark.py index c73477acfc2..6f3333afdfa 100644 --- a/tools/benchmark/benchmark.py +++ b/tools/benchmark/benchmark.py @@ -93,7 +93,7 @@ class Benchmark: infer_request.infer() else: infer_request.async_infer() - status = exe_network.wait() + status = infer_request.wait() if status != StatusCode.OK: raise Exception(f"Wait for all requests is failed with status code {status}!") return infer_request.latency diff --git a/tools/benchmark/parameters.py b/tools/benchmark/parameters.py index 73e1a931928..6e4a1464d4e 100644 --- a/tools/benchmark/parameters.py +++ b/tools/benchmark/parameters.py @@ -95,7 +95,7 @@ def parse_args(): help='Optional. Enable threads->cores (\'YES\' which is OpenVINO runtime\'s default for conventional CPUs), ' 'threads->(NUMA)nodes (\'NUMA\'), ' 'threads->appropriate core types (\'HYBRID_AWARE\', which is OpenVINO runtime\'s default for Hybrid CPUs)' - 'or completely disable (\'NO\')' + 'or completely disable (\'NO\')' 'CPU threads pinning for CPU-involved inference.') args.add_argument('-exec_graph_path', '--exec_graph_path', type=str, required=False, help='Optional. Path to a file where to store executable graph information serialized.') @@ -118,9 +118,9 @@ def parse_args(): " Please note, command line parameters have higher priority then parameters from configuration file.") args.add_argument('-qb', '--quantization_bits', type=int, required=False, default=None, choices=[8, 16], help="Optional. Weight bits for quantization: 8 (I8) or 16 (I16) ") - args.add_argument('-ip', '--input_precision', type=str, required=False, default='U8', choices=['U8', 'FP16', 'FP32'], + args.add_argument('-ip', '--input_precision', type=str, required=False, choices=['U8', 'FP16', 'FP32'], help='Optional. Specifies precision for all input layers of the network.') - args.add_argument('-op', '--output_precision', type=str, required=False, default='FP32', choices=['U8', 'FP16', 'FP32'], + args.add_argument('-op', '--output_precision', type=str, required=False, choices=['U8', 'FP16', 'FP32'], help='Optional. Specifies precision for all output layers of the network.') args.add_argument('-iop', '--input_output_precision', type=str, required=False, help='Optional. Specifies precision for input and output layers by name. Example: -iop "input:FP16, output:FP16". Notice that quotes are required. Overwrites precision from ip and op options for specified layers.') diff --git a/tools/benchmark/utils/utils.py b/tools/benchmark/utils/utils.py index 758147fec0e..422bc9e26e4 100644 --- a/tools/benchmark/utils/utils.py +++ b/tools/benchmark/utils/utils.py @@ -48,10 +48,21 @@ def next_step(additional_info='', step_id=0): print(step_info_template) def process_precision(ie_network: IENetwork, app_inputs_info, input_precision: str, output_precision: str, input_output_precision: str): - _configure_network_inputs(ie_network, app_inputs_info, input_precision) - _configure_network_outputs(ie_network, output_precision) + if input_precision: + _configure_network_inputs(ie_network, app_inputs_info, input_precision) + if output_precision: + _configure_network_outputs(ie_network, output_precision) if input_output_precision: _configure_network_inputs_and_outputs(ie_network, input_output_precision) + input_info = ie_network.input_info + for key in app_inputs_info.keys(): + ## if precision for input set by user, then set it to app_inputs + ## if it an image, set U8 + if input_precision or (input_output_precision and key in input_output_precision.keys()): + app_inputs_info[key].precision = input_info[key].precision + elif app_inputs_info[key].is_image: + app_inputs_info[key].precision = 'U8' + input_info[key].precision = 'U8' def _configure_network_inputs(ie_network: IENetwork, app_inputs_info, input_precision: str): input_info = ie_network.input_info @@ -74,7 +85,7 @@ def _configure_network_inputs_and_outputs(ie_network: IENetwork, input_output_pr input_info = ie_network.input_info output_info = ie_network.outputs - + for key, value in user_precision_map.items(): if key in input_info: input_info[key].precision = value