Skip to content

Commit 915f070

Browse files
eaidovaAnna Grebneva
andauthored
AC: fix processing tf action detection (#3148)
* AC: fix processing tf action detection * Update tools/accuracy_checker/openvino/tools/accuracy_checker/adapters/action_recognition.py Co-authored-by: Anna Grebneva <[email protected]> Co-authored-by: Anna Grebneva <[email protected]>
1 parent 6356d94 commit 915f070

File tree

1 file changed

+20
-14
lines changed

1 file changed

+20
-14
lines changed

tools/accuracy_checker/openvino/tools/accuracy_checker/adapters/action_recognition.py

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -145,14 +145,17 @@ def process(self, raw, identifiers, frame_meta):
145145
raw_outputs = self._extract_predictions(raw, frame_meta)
146146
if not self.outputs_verified:
147147
self._get_output_names(raw_outputs)
148+
input_shape = list(frame_meta[0].get('input_shape', {'data': (1, 3, 416, 416)}).values())[0]
149+
nchw_layout = input_shape[1] == 3
148150
prior_boxes = raw_outputs[self.priorbox_out][0][0].reshape(-1, 4) if not self.multihead else None
149151
prior_variances = raw_outputs[self.priorbox_out][0][1].reshape(-1, 4) if not self.multihead else None
150152

151-
head_shifts = self.estimate_head_shifts(raw_outputs, self. head_sizes, self.add_conf_outs, self.multihead)
153+
head_shifts = self.estimate_head_shifts(
154+
raw_outputs, self. head_sizes, self.add_conf_outs, self.multihead, nchw_layout)
152155

153156
for batch_id, identifier in enumerate(identifiers):
154157
labels, class_scores, x_mins, y_mins, x_maxs, y_maxs, main_scores = self.prepare_detection_for_id(
155-
batch_id, raw_outputs, prior_boxes, prior_variances, head_shifts
158+
batch_id, raw_outputs, prior_boxes, prior_variances, head_shifts, nchw=nchw_layout
156159
)
157160
action_prediction = ActionDetectionPrediction(
158161
identifier, labels, class_scores, main_scores, x_mins, y_mins, x_maxs, y_maxs
@@ -167,12 +170,15 @@ def process(self, raw, identifiers, frame_meta):
167170
return result
168171

169172
def prepare_detection_for_id(self, batch_id, raw_outputs, prior_boxes, prior_variances, head_shifts,
170-
default_label=0):
173+
default_label=0, nchw=True):
171174
num_detections = raw_outputs[self.loc_out][batch_id].size // 4
172175
locs = raw_outputs[self.loc_out][batch_id].reshape(-1, 4)
173176
main_conf = raw_outputs[self.main_conf_out][batch_id].reshape(num_detections, -1)
174177

175178
add_confs = [raw_outputs[layer][batch_id] for layer in self.add_conf_outs]
179+
if not nchw:
180+
add_confs = [np.transpose(conf_l, (2, 0, 1)) for conf_l in add_confs]
181+
176182
if self.multihead:
177183
spatial_sizes = [layer.shape[1:] for layer in add_confs]
178184
add_confs = [layer.reshape(self.num_action_classes, -1) for layer in add_confs]
@@ -238,14 +244,16 @@ def decode_box(prior, var, deltas):
238244
return decoded_xmin, decoded_ymin, decoded_xmax, decoded_ymax
239245

240246
@staticmethod
241-
def estimate_head_shifts(raw_outputs, head_sizes, add_conf_outs, multihead_net):
247+
def estimate_head_shifts(raw_outputs, head_sizes, add_conf_outs, multihead_net, nchw=True):
242248
layer_id = 0
243249
head_shift = 0
244250
head_shifts = [0]
245251
for head_size in head_sizes:
246252
for _ in range(head_size):
247253
layer = add_conf_outs[layer_id]
248254
layer_shape = raw_outputs[layer][0].shape
255+
if len(layer_shape) == 3 and not nchw:
256+
layer_shape = layer_shape[::-1]
249257
layer_size = np.prod(layer_shape[1:]) if multihead_net else np.prod(layer_shape[:2])
250258
head_shift += layer_size
251259
layer_id += 1
@@ -297,19 +305,17 @@ def find_layer(regex, output_name, all_outputs):
297305

298306
self.loc_out = find_layer(loc_out_regex, 'loc', raw_outputs)
299307
self.main_conf_out = find_layer(main_conf_out_regex, 'main confidence', raw_outputs)
300-
self.priorbox_out = self.check_output_name(self.priorbox_out, raw_outputs)
308+
if hasattr(self, 'priorbox_out'):
309+
self.priorbox_out = self.check_output_name(self.priorbox_out, raw_outputs)
301310
self.outputs_verified = True
302-
if contains_all(raw_outputs, self.add_conf_outs):
303-
return
304-
add_conf_result = [layer_name + '/sink_port_0' for layer_name in self.add_conf_outs]
305-
if contains_all(raw_outputs, add_conf_result):
306-
self.add_conf_outs = add_conf_result
311+
add_conf_outs = [self.check_output_name(layer, raw_outputs) for layer in self.add_conf_outs]
312+
if contains_all(add_conf_outs):
313+
self.add_conf_outs = add_conf_outs
307314
return
308-
add_conf_with_bias = [layer_name + '/add_' for layer_name in self.add_conf_outs]
315+
316+
add_conf_with_bias = [self.check_output_name(layer_name + '/add_', raw_outputs)
317+
for layer_name in self.add_conf_outs]
309318
if contains_all(raw_outputs, add_conf_with_bias):
310319
self.add_conf_outs = add_conf_with_bias
311320
return
312-
add_conf_with_bias_result = [layer_name + '/add_/sink_port_0' for layer_name in self.add_conf_outs]
313-
if contains_all(raw_outputs, add_conf_with_bias_result):
314-
self.add_conf_outs = add_conf_with_bias_result
315321
return

0 commit comments

Comments
 (0)