Skip to content

Commit 9a4f7a8

Browse files
authored
AC: fix input data providing for tensor (#2941)
* AC: fix input data providing for tensor * handle tensor names for tf
1 parent 421b6c5 commit 9a4f7a8

File tree

3 files changed

+36
-17
lines changed

3 files changed

+36
-17
lines changed

tools/accuracy_checker/openvino/tools/accuracy_checker/adapters/adapter.py

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -52,16 +52,18 @@ def configure(self):
5252
pass
5353

5454
@staticmethod
55-
def check_output_name(output_name, outputs, suffix='/sink_port_0'):
55+
def check_output_name(output_name, outputs, suffix=('/sink_port_0', ':0')):
56+
suffixes = [suffix] if isinstance(suffix, str) else suffix
5657
outputs = outputs[0] if isinstance(outputs, list) else outputs
5758
if output_name in outputs:
5859
return output_name
59-
if suffix in output_name:
60-
preprocessed_output_name = output_name.replace(suffix, '')
61-
else:
62-
preprocessed_output_name = '{}{}'.format(output_name, suffix)
63-
if preprocessed_output_name in outputs:
64-
return preprocessed_output_name
60+
for suffix_ in suffixes:
61+
if suffix_ in output_name:
62+
preprocessed_output_name = output_name.replace(suffix_, '')
63+
else:
64+
preprocessed_output_name = '{}{}'.format(output_name, suffix_)
65+
if preprocessed_output_name in outputs:
66+
return preprocessed_output_name
6567
return output_name
6668

6769
@classmethod

tools/accuracy_checker/openvino/tools/accuracy_checker/config/config_reader.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -793,7 +793,7 @@ def merge_entry_paths(keys, value, args, value_id=0):
793793
selected_argument = select_arg_path(args[arg_candidate], value_id, argument)
794794
prefix_path = selected_argument
795795
if not selected_argument.is_dir():
796-
if argument in ALLOW_FILE_OR_DIR:
796+
if arg_candidate in ALLOW_FILE_OR_DIR:
797797
prefix_path = selected_argument.parent
798798
else:
799799
raise ConfigError('argument: {} should be a directory'.format(argument))

tools/accuracy_checker/openvino/tools/accuracy_checker/launcher/openvino_launcher.py

Lines changed: 26 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,6 @@
4343
)
4444
from .launcher import Launcher
4545
from ..logging import print_info
46-
from .input_feeder import PRECISION_TO_DTYPE
4746

4847

4948
format_map = {
@@ -193,11 +192,14 @@ def predict(self, inputs, metadata=None, **kwargs):
193192
results = []
194193
for infer_inputs in inputs:
195194
if self._do_reshape:
196-
input_shapes = {layer_name: data.shape for layer_name, data in infer_inputs.items()}
195+
input_shapes = {
196+
layer_name: data.shape for layer_name, data in infer_inputs.items()
197+
}
197198
self._reshape_input(input_shapes)
198199
if self.infer_request is None:
199200
self.infer_request = self.exec_network.create_infer_request()
200-
outputs = self.infer_request.infer(inputs=infer_inputs)
201+
feed_dict = {self.input_to_tensor_name[layer_name]: data for layer_name, data in infer_inputs.items()}
202+
outputs = self.infer_request.infer(inputs=feed_dict)
201203
results.append({
202204
out_node.get_node().friendly_name: out_res
203205
for out_node, out_res in zip(self.exec_network.outputs, outputs)
@@ -214,10 +216,13 @@ def predict(self, inputs, metadata=None, **kwargs):
214216

215217
def _predict_sequential(self, inputs, metadata=None, **kwargs):
216218
lstm_inputs_feed = self._fill_lstm_inputs()
219+
if not self.infer_request:
220+
self.infer_request = self.exec_network.create_infer_request()
217221
results = []
218222
for feed_dict in inputs:
219223
feed_dict.update(lstm_inputs_feed)
220-
out_tensors = self.exec_network.infer_new_request(feed_dict)
224+
infer_inputs = {self.input_to_tensor_name[layer_name]: data for layer_name, data in feed_dict.items()}
225+
out_tensors = self.infer_request.infer(infer_inputs)
221226
output_result = {
222227
out_node.get_node().friendly_name: out_tensor
223228
for out_node, out_tensor in zip(self.exec_network.outputs, out_tensors)
@@ -236,9 +241,10 @@ def _predict_sequential(self, inputs, metadata=None, **kwargs):
236241

237242
def predict_async(self, ir, inputs, metadata=None, context=None, **kwargs):
238243
infer_inputs = inputs[0]
244+
feed_dict = {self.input_to_tensor_name[name]: data for name, data in infer_inputs.items()}
239245
if metadata is not None:
240246
self._fill_meta(metadata)
241-
ir.infer(infer_inputs, metadata, context)
247+
ir.infer(feed_dict, metadata, context)
242248

243249
def _fill_meta(self, metadata):
244250
for meta_ in metadata:
@@ -319,7 +325,7 @@ def _reshape_input(self, shapes, make_dynamic=False):
319325
del self.exec_network
320326
if self.infer_request is not None:
321327
self.infer_request = None
322-
self.network.reshape({k: PartialShape(shape) for k, shape in shapes.items()})
328+
self.network.reshape({self.input_to_tensor_name[k]: PartialShape(shape) for k, shape in shapes.items()})
323329
self.dyn_input_layers, self._partial_shapes = self.get_dynamic_inputs(self.network)
324330
if self.dyn_input_layers and make_dynamic:
325331
return
@@ -523,6 +529,7 @@ def load_network(self, network=None, log=False, preprocessing=None):
523529
self.network = network
524530
if self.network is not None:
525531
self.dyn_input_layers, self._partial_shapes = self.get_dynamic_inputs(self.network)
532+
self.input_to_tensor_name = self.get_input_tensor_name_mapping(self.network)
526533

527534
if not self._postpone_input_configuration:
528535
self._set_precision()
@@ -572,6 +579,13 @@ def is_dynamic(data_info):
572579

573580
return inputs_with_undefined_shapes, partial_shapes
574581

582+
@staticmethod
583+
def get_input_tensor_name_mapping(network):
584+
inputs_mapping = {}
585+
for input_node in network.inputs:
586+
inputs_mapping[input_node.get_node().friendly_name] = input_node.get_tensor().get_any_name()
587+
return inputs_mapping
588+
575589
@property
576590
def dyn_batch_only(self):
577591
if not self.dyn_input_layers:
@@ -772,9 +786,11 @@ def _configure_lstm_inputs(self):
772786
def _fill_lstm_inputs(self, infer_outputs=None):
773787
feed_dict = {}
774788
for lstm_var, output_layer in self._lstm_inputs.items():
775-
layer_shape = self.inputs[lstm_var].shape
789+
layer_shape = parse_partial_shape(self.inputs[lstm_var].partial_shape)
790+
if infer_outputs and output_layer not in infer_outputs:
791+
raise 'Output node with name {} not found'.format(output_layer)
776792
input_data = infer_outputs[output_layer].reshape(layer_shape) if infer_outputs else np.zeros(
777-
layer_shape, dtype=PRECISION_TO_DTYPE[self.inputs[lstm_var].precision]
793+
layer_shape, dtype=format_map[self.inputs[lstm_var].element_type.get_type_name()]
778794
)
779795
feed_dict[lstm_var] = input_data
780796
return feed_dict
@@ -856,10 +872,11 @@ def prepare_data_for_request(self,
856872
inputs, batch_meta, batch_id, batch_input_ids,
857873
batch_annotation, batch_identifiers):
858874
infer_inputs = inputs[0]
875+
feed_dict = {self.input_to_tensor_name[name]: data for name, data in infer_inputs.items()}
859876
if batch_meta is not None:
860877
self._fill_meta(batch_meta)
861878
context = (batch_id, batch_input_ids, batch_annotation, batch_identifiers, batch_meta)
862-
return infer_inputs, context
879+
return feed_dict, context
863880

864881
def get_result_from_request(self, request):
865882
return [{

0 commit comments

Comments
 (0)