Skip to content

Commit 4012f2d

Browse files
authored
Update reference collection according to feedback (#2925)
1 parent 0529f4e commit 4012f2d

23 files changed

+297
-155
lines changed

tools/accuracy_checker/openvino/tools/accuracy_checker/evaluators/model_evaluator.py

Lines changed: 6 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -761,31 +761,21 @@ def release(self):
761761
self.adapter.release()
762762

763763
@classmethod
764-
def provide_metric_references(cls, conf, subset, return_header=True):
764+
def provide_metric_references(cls, conf, return_header=True):
765765
processing_info = cls.get_processing_info(conf)
766766
dataset_config = conf['datasets'][0]
767-
dataset = Dataset(dataset_config, log=False)
768-
dataset_size = len(dataset)
769-
ignore_config_refs = False
770-
if subset is not None:
771-
dataset_config['subsample_size'] = subset
772-
new_dataset = Dataset(dataset_config, log=False)
773-
if len(new_dataset) != len(dataset):
774-
ignore_config_refs = True
775-
warning('Subset is not matched with configuration. Reference values will be ignored')
776-
dataset_size = len(new_dataset)
777-
dataset = new_dataset
778-
metric_dispatcher = MetricsExecutor(dataset_config.get('metrics', []), dataset)
767+
metric_dispatcher = MetricsExecutor(dataset_config.get('metrics', []), postpone_metrics=True)
779768
extracted_results, extracted_meta = [], []
780-
for result_presenter, metric_result in metric_dispatcher.get_metric_result_template(ignore_config_refs):
781-
result, metadata = result_presenter.extract_result(metric_result)
769+
for result_presenter, metric_result in metric_dispatcher.get_metric_result_template(
770+
dataset_config.get('metrics', []), False):
771+
result, metadata = result_presenter.extract_result(metric_result, names_from_refs=True)
782772
if isinstance(result, list):
783773
extracted_results.extend(result)
784774
extracted_meta.extend(metadata)
785775
else:
786776
extracted_results.append(result)
787777
extracted_meta.append(metadata)
788-
header, report = generate_csv_report(processing_info, extracted_results, dataset_size, extracted_meta)
778+
header, report = generate_csv_report(processing_info, extracted_results, 0, extracted_meta)
789779
if not return_header:
790780
return report
791781
return header, report

tools/accuracy_checker/openvino/tools/accuracy_checker/evaluators/module_evaluator.py

Lines changed: 6 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,6 @@
2020
import importlib
2121
from pathlib import Path
2222
from .base_evaluator import BaseEvaluator
23-
from ..logging import warning
24-
from ..dataset import Dataset
2523
from ..presenters import generate_csv_report
2624
from ..metrics import MetricsExecutor
2725

@@ -147,31 +145,21 @@ def dataset_size(self):
147145
return self._internal_module.dataset_size
148146

149147
@classmethod
150-
def provide_metric_references(cls, conf, subset, return_header=True):
148+
def provide_metric_references(cls, conf, return_header=True):
151149
processing_info = cls.get_processing_info(conf)
152150
dataset_config = conf['module_config']['datasets'][0]
153-
dataset = Dataset(dataset_config)
154-
dataset_size = len(dataset)
155-
ignore_config_refs = False
156-
if subset is not None:
157-
dataset_config['subsample_size'] = subset
158-
new_dataset = Dataset(dataset_config)
159-
if len(new_dataset) != len(dataset):
160-
ignore_config_refs = True
161-
warning('Subset is not matched with configuration. Reference values will be ignored')
162-
dataset_size = len(new_dataset)
163-
dataset = new_dataset
164-
metric_dispatcher = MetricsExecutor(dataset_config.get('metrics', []), dataset)
151+
metric_dispatcher = MetricsExecutor(dataset_config.get('metrics', []), postpone_metrics=True)
165152
extracted_results, extracted_meta = [], []
166-
for result_presenter, metric_result in metric_dispatcher.get_metric_result_template(ignore_config_refs):
167-
result, metadata = result_presenter.extract_result(metric_result)
153+
for result_presenter, metric_result in metric_dispatcher.get_metric_result_template(
154+
dataset_config.get('metrics', []), False):
155+
result, metadata = result_presenter.extract_result(metric_result, names_from_refs=True)
168156
if isinstance(result, list):
169157
extracted_results.extend(result)
170158
extracted_meta.extend(metadata)
171159
else:
172160
extracted_results.append(result)
173161
extracted_meta.append(metadata)
174-
header, report = generate_csv_report(processing_info, extracted_results, dataset_size, extracted_meta)
162+
header, report = generate_csv_report(processing_info, extracted_results, 0, extracted_meta)
175163
if not return_header:
176164
return report
177165
return header, report

tools/accuracy_checker/openvino/tools/accuracy_checker/metrics/audio_processing.py

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,7 @@ def parameters(cls):
3838
def configure(self):
3939
self.delay = self.get_value_from_config('delay')
4040
self.buffer = []
41-
self.meta.update({'scale': 1, 'postfix': 'Db', 'calculate_mean': False, 'names': ['mean', 'std']})
42-
self.meta['target_per_value'] = {'mean': 'higher-better', 'std': 'higher-worse'}
41+
self.meta = self.get_common_meta()
4342

4443
def reset(self):
4544
del self.buffer
@@ -67,3 +66,12 @@ def update(self, annotation, prediction):
6766

6867
def evaluate(self, annotations, predictions):
6968
return [np.mean(self.buffer), np.std(self.buffer)]
69+
70+
@classmethod
71+
def get_common_meta(cls):
72+
meta = super().get_common_meta()
73+
meta.update({
74+
'scale': 1, 'postfix': 'Db', 'calculate_mean': False, 'names': ['mean', 'std'],
75+
'target_per_value': {'mean': 'higher-better', 'std': 'higher-worse'}
76+
})
77+
return meta

tools/accuracy_checker/openvino/tools/accuracy_checker/metrics/classification.py

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -371,7 +371,6 @@ def __init__(self, *args, **kwargs):
371371
self.video_avg_prob = AverageProbMeter()
372372
self.previous_video_id = None
373373
self.previous_video_label = None
374-
self.meta['names'] = ['clip_accuracy', 'video_accuracy']
375374

376375
def update(self, annotation, prediction):
377376
if isinstance(annotation.identifier, list):
@@ -407,6 +406,10 @@ def reset(self):
407406
if self.profiler:
408407
self.profiler.reset()
409408

409+
@classmethod
410+
def get_common_meta(cls):
411+
return {'target': 'higher-better', 'names': ['clip_accuracy', 'video_accuracy']}
412+
410413

411414
class ClassificationF1Score(PerImageEvaluationMetric):
412415
__provider__ = 'classification_f1-score'
@@ -553,9 +556,6 @@ class AcerScore(PerImageEvaluationMetric):
553556
def configure(self):
554557
if isinstance(confusion_matrix, UnsupportedPackage):
555558
confusion_matrix.raise_error(self.__provider__)
556-
self.meta.update({
557-
'target': 'higher-worse'
558-
})
559559
self.reset()
560560

561561
def update(self, annotation, prediction):
@@ -579,3 +579,7 @@ def evaluate(self, annotations, predictions):
579579
def reset(self):
580580
self.targets = []
581581
self.results = []
582+
583+
@classmethod
584+
def get_common_meta(cls):
585+
return {'target': 'higher-worse'}

tools/accuracy_checker/openvino/tools/accuracy_checker/metrics/dna_seq_accuracy.py

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,10 +36,6 @@ def configure(self):
3636
self.balanced = self.get_value_from_config('balanced')
3737
self.min_coverage = self.get_value_from_config('min_coverage')
3838
self.accuracy = []
39-
self.meta.update({
40-
'names': ['mean', 'median'],
41-
'calculate_mean': False
42-
})
4339

4440
def update(self, annotation, prediction):
4541
alignment = parasail.sw_trace_striped_32(prediction.label, annotation.label, 8, 4, parasail.dnafull)
@@ -94,3 +90,12 @@ def evaluate(self, annotations, predictions):
9490

9591
def reset(self):
9692
self.accuracy = []
93+
94+
@classmethod
95+
def get_common_meta(cls):
96+
meta = super().get_common_meta()
97+
meta.update({
98+
'names': ['mean', 'median'],
99+
'calculate_mean': False
100+
})
101+
return meta

tools/accuracy_checker/openvino/tools/accuracy_checker/metrics/gan_metrics.py

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -52,9 +52,6 @@ def parameters(cls):
5252
return parameters
5353

5454
def configure(self):
55-
self.meta.update({
56-
'scale': 1, 'postfix': ' ', 'target': 'higher-worse'
57-
})
5855
self.eps = self.get_value_from_config('eps')
5956
self.length = self.get_value_from_config('length')
6057

@@ -71,6 +68,14 @@ def evaluate(self, annotations, predictions):
7168
generated = np.stack(generated)
7269
return self.score_calc(real, generated)
7370

71+
@classmethod
72+
def get_common_meta(cls):
73+
meta = super().get_common_meta()
74+
meta.update({
75+
'scale': 1, 'postfix': ' ', 'target': 'higher-worse'
76+
})
77+
return meta
78+
7479

7580
class InceptionScore(BaseGanMetric):
7681
"""

tools/accuracy_checker/openvino/tools/accuracy_checker/metrics/hit_ratio.py

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -119,13 +119,6 @@ class LogLoss(PerImageEvaluationMetric):
119119

120120
def configure(self):
121121
self.losses = []
122-
self.meta.update({
123-
'scale': 1,
124-
'postfix': ' ',
125-
'calculate_mean': False,
126-
'target': 'higher-worse',
127-
'names': ['mean', 'std'],
128-
})
129122

130123
def update(self, annotation, prediction):
131124
score = np.clip(prediction.scores, 1e-15, 1 - 1e-15)
@@ -138,3 +131,13 @@ def evaluate(self, annotations, predictions):
138131

139132
def reset(self):
140133
self.losses = []
134+
135+
@classmethod
136+
def get_common_meta(cls):
137+
return {
138+
'scale': 1,
139+
'postfix': ' ',
140+
'calculate_mean': False,
141+
'target': 'higher-worse',
142+
'names': ['mean', 'std'],
143+
}

tools/accuracy_checker/openvino/tools/accuracy_checker/metrics/image_quality_assessment.py

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -62,8 +62,13 @@ class StructuralSimilarity(BaseRegressionMetric):
6262

6363
def __init__(self, *args, **kwargs):
6464
super().__init__(_ssim, *args, **kwargs)
65-
self.meta['target'] = 'higher-better'
66-
self.meta['target_per_value'] = {'mean': 'higher-better', 'std': 'higher-worse', 'max_error': 'higher-worse'}
65+
66+
@classmethod
67+
def get_common_meta(cls):
68+
meta = super().get_common_meta()
69+
meta['target'] = 'higher-better'
70+
meta['target_per_value'] = {'mean': 'higher-better', 'std': 'higher-worse', 'max_error': 'higher-worse'}
71+
return meta
6772

6873

6974
class PeakSignalToNoiseRatio(BaseRegressionMetric):
@@ -92,8 +97,6 @@ def parameters(cls):
9297

9398
def __init__(self, *args, **kwargs):
9499
super().__init__(self._psnr_differ, *args, **kwargs)
95-
self.meta['target'] = 'higher-better'
96-
self.meta['target_per_value'] = {'mean': 'higher-better', 'std': 'higher-worse', 'max_error': 'higher-worse'}
97100

98101
def configure(self):
99102
super().configure()
@@ -103,7 +106,6 @@ def configure(self):
103106
'BGR': [2, 1, 0],
104107
'RGB': [0, 1, 2],
105108
}
106-
self.meta['postfix'] = 'Db'
107109
self.channel_order = channel_order[self.color_order]
108110
self.normalized_images = self.get_value_from_config('normalized_images')
109111
self.color_scale = 255 if not self.normalized_images else 1
@@ -137,6 +139,14 @@ def _psnr_differ(self, annotation_image, prediction_image):
137139

138140
return -10 * math.log10(mse)
139141

142+
@classmethod
143+
def get_common_meta(cls):
144+
meta = super().get_common_meta()
145+
meta['target'] = 'higher-better'
146+
meta['target_per_value'] = {'mean': 'higher-better', 'std': 'higher-worse', 'max_error': 'higher-worse'}
147+
meta['postfix'] = 'Db'
148+
return meta
149+
140150

141151
class PeakSignalToNoiseRatioWithBlockingEffectFactor(PeakSignalToNoiseRatio):
142152
__provider__ = 'psnr-b'
@@ -280,8 +290,6 @@ def parameters(cls):
280290

281291
def __init__(self, *args, **kwargs):
282292
super().__init__(self._vif_diff, *args, **kwargs)
283-
self.meta['target'] = 'higher-better'
284-
self.meta['target_per_value'] = {'mean': 'higher-better', 'std': 'higher-worse', 'max_error': 'higher-worse'}
285293
if isinstance(convolve2d, UnsupportedPackage):
286294
convolve2d.raise_error(self.__provider__)
287295

@@ -335,6 +343,13 @@ def _vifp_single(gt, p, sigma_nsq):
335343

336344
return num / den
337345

346+
@classmethod
347+
def get_common_meta(cls):
348+
meta = super().get_common_meta()
349+
meta['target'] = 'higher-better'
350+
meta['target_per_value'] = {'mean': 'higher-better', 'std': 'higher-worse', 'max_error': 'higher-worse'}
351+
return meta
352+
338353

339354
def gaussian_filter(ws, sigma):
340355
x, y = np.mgrid[-ws // 2 + 1:ws // 2 + 1, -ws // 2 + 1:ws // 2 + 1]

tools/accuracy_checker/openvino/tools/accuracy_checker/metrics/language_modeling.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@ def __init__(self, *args, **kwargs):
3030
super().__init__(*args, **kwargs)
3131
self.loss = 0
3232
self.total = 0
33-
self.meta['target'] = 'higher-worse'
3433

3534
def update(self, annotation, prediction):
3635
def cross_entropy(logits, target):
@@ -59,3 +58,8 @@ def evaluate(self, annotations, predictions):
5958
def reset(self):
6059
self.loss = 0
6160
self.total = 0
61+
62+
@classmethod
63+
def get_common_meta(cls):
64+
meta = super().get_common_meta()
65+
meta['target'] = 'higher-worse'

tools/accuracy_checker/openvino/tools/accuracy_checker/metrics/machine_translation.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@ def __call__(self, line):
8282
'none': None, # No value is required
8383
}
8484

85+
8586
class BilingualEvaluationUnderstudy(PerImageEvaluationMetric):
8687
__provider__ = 'bleu'
8788
annotation_types = (MachineTranslationAnnotation, )

0 commit comments

Comments
 (0)