Skip to content

Commit ba08d1c

Browse files
authored
Use subset metrics in all types of evaluators (#3979)
* Update base_evaluator.py * Evaluators get metrics with get_config_metrics method only * Update model evaluator unit tests * Remove trailing-whitespace * Add missing final new line
1 parent 4388b0a commit ba08d1c

File tree

5 files changed

+28
-28
lines changed

5 files changed

+28
-28
lines changed

tools/accuracy_checker/accuracy_checker/evaluators/base_evaluator.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,3 +71,19 @@ def write_results_to_csv(self, csv_file, ignore_results_formatting, metric_inter
7171
write_csv_result(
7272
csv_file, processing_info, metrics_results, metric_interval, metrics_meta
7373
)
74+
75+
# get right metrics from config
76+
@staticmethod
77+
def get_config_metrics(config):
78+
metrics = None
79+
sub_evaluation = config.get('sub_evaluation', False)
80+
if sub_evaluation:
81+
size = config.get('subsample_size')
82+
subset_metrics = config.get('subset_metrics', [])
83+
for item in subset_metrics:
84+
subset_size = item.get('subset_size')
85+
if size is None or subset_size == size:
86+
# first subset_metrics or matching subsample_size
87+
metrics = item.get('metrics')
88+
break
89+
return config.get('metrics', []) if (metrics is None) else metrics

tools/accuracy_checker/accuracy_checker/evaluators/model_evaluator.py

Lines changed: 5 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ def from_configs(cls, model_config, delayed_annotation_loading=False):
106106
postprocessor = PostprocessingExecutor(dataset_config.get('postprocessing'), dataset_name, dataset_metadata)
107107
metric_dispatcher = None
108108
if not delayed_annotation_loading:
109-
metric_dispatcher = MetricsExecutor(get_config_metrics(dataset_config), dataset)
109+
metric_dispatcher = MetricsExecutor(cls.get_config_metrics(dataset_config), dataset)
110110
if metric_dispatcher.profile_metrics:
111111
metric_dispatcher.set_processing_info(ModelEvaluator.get_processing_info(model_config))
112112

@@ -159,7 +159,7 @@ def validate_config(cls, model_config, delayed_annotation_loading=False):
159159
)
160160
config_errors.extend(
161161
MetricsExecutor.validate_config(
162-
get_config_metrics(dataset_config), fetch_only=True,
162+
cls.get_config_metrics(dataset_config), fetch_only=True,
163163
uri_prefix='{}.metrics'.format(current_dataset_uri))
164164
)
165165

@@ -227,7 +227,7 @@ def send_processing_info(self, sender):
227227
adapter_type = None
228228
if adapter:
229229
adapter_type = adapter if isinstance(adapter, str) else adapter.get('type')
230-
metrics = get_config_metrics(dataset_config)
230+
metrics = self.get_config_metrics(dataset_config)
231231
metric_info = [metric['type'] for metric in metrics]
232232
details.update({
233233
'metrics': metric_info,
@@ -773,10 +773,10 @@ def release(self):
773773
def provide_metric_references(cls, conf, return_header=True):
774774
processing_info = cls.get_processing_info(conf)
775775
dataset_config = conf['datasets'][0]
776-
metric_dispatcher = MetricsExecutor(get_config_metrics(dataset_config), postpone_metrics=True)
776+
metric_dispatcher = MetricsExecutor(cls.get_config_metrics(dataset_config), postpone_metrics=True)
777777
extracted_results, extracted_meta = [], []
778778
for result_presenter, metric_result in metric_dispatcher.get_metric_result_template(
779-
get_config_metrics(dataset_config), False):
779+
cls.get_config_metrics(dataset_config), False):
780780
result, metadata = result_presenter.extract_result(metric_result, names_from_refs=True)
781781
if isinstance(result, list):
782782
extracted_results.extend(result)
@@ -788,18 +788,3 @@ def provide_metric_references(cls, conf, return_header=True):
788788
if not return_header:
789789
return report
790790
return header, report
791-
792-
793-
def get_config_metrics(config):
794-
metrics = None
795-
sub_evaluation = config.get('sub_evaluation', False)
796-
if sub_evaluation:
797-
size = config.get('subsample_size')
798-
subset_metrics = config.get('subset_metrics', [])
799-
for item in subset_metrics:
800-
subset_size = item.get('subset_size')
801-
if size is None or subset_size == size:
802-
# first subset_metrics or matching subsample_size
803-
metrics = item.get('metrics')
804-
break
805-
return config.get('metrics', []) if (metrics is None) else metrics

tools/accuracy_checker/accuracy_checker/evaluators/module_evaluator.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -147,10 +147,10 @@ def dataset_size(self):
147147
def provide_metric_references(cls, conf, return_header=True):
148148
processing_info = cls.get_processing_info(conf)
149149
dataset_config = conf['module_config']['datasets'][0]
150-
metric_dispatcher = MetricsExecutor(dataset_config.get('metrics', []), postpone_metrics=True)
150+
metric_dispatcher = MetricsExecutor(cls.get_config_metrics(dataset_config), postpone_metrics=True)
151151
extracted_results, extracted_meta = [], []
152152
for result_presenter, metric_result in metric_dispatcher.get_metric_result_template(
153-
dataset_config.get('metrics', []), False):
153+
cls.get_config_metrics(dataset_config), False):
154154
result, metadata = result_presenter.extract_result(metric_result, names_from_refs=True)
155155
if isinstance(result, list):
156156
extracted_results.extend(result)

tools/accuracy_checker/accuracy_checker/evaluators/quantization_model_evaluator.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -609,6 +609,6 @@ def create_dataset_attributes(config, tag, dumped_annotations=None):
609609
)
610610
postprocessor = PostprocessingExecutor(dataset_config.get('postprocessing'), dataset_name, dataset_meta)
611611
if 'metrics' in dataset_config:
612-
metric_dispatcher = MetricsExecutor(dataset_config.get('metrics', []), annotation_reader)
612+
metric_dispatcher = MetricsExecutor(ModuleEvaluator.get_config_metrics(dataset_config), annotation_reader)
613613

614614
return dataset, metric_dispatcher, preprocessor, postprocessor

tools/accuracy_checker/tests/test_model_evaluator.py

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
from unittest.mock import Mock, MagicMock
1818

1919
from accuracy_checker.evaluators import ModelEvaluator
20-
from accuracy_checker.evaluators.model_evaluator import get_config_metrics
2120

2221
class TestModelEvaluator:
2322
def setup_method(self):
@@ -150,7 +149,7 @@ def test_model_evaluator_get_config_metrics(self, mocker):
150149
'metrics': [{'type': 'accuracy', 'top_k': 5, 'reference': 0.65}]}]
151150
}
152151
metric = {'type': 'accuracy', 'top_k': 1, 'reference': 0.78}
153-
selected_metric = get_config_metrics(dataset_config)[0]
152+
selected_metric = ModelEvaluator.get_config_metrics(dataset_config)[0]
154153

155154
assert metric['reference'] == selected_metric['reference']
156155
assert metric['top_k'] == selected_metric['top_k']
@@ -163,7 +162,7 @@ def test_model_evaluator_get_config_metrics_is_first_subset_metrics(self, mocker
163162
{'subset_size': '20%', 'metrics': [{'type': 'accuracy', 'top_k': 5, 'reference': 0.72}]}]
164163
}
165164
subset_metric = {'type': 'accuracy', 'top_k': 5, 'reference': 0.65}
166-
selected_metric = get_config_metrics(dataset_config_sub_evaluation)[0]
165+
selected_metric = ModelEvaluator.get_config_metrics(dataset_config_sub_evaluation)[0]
167166

168167
assert subset_metric['reference'] == selected_metric['reference']
169168
assert subset_metric['top_k'] == selected_metric['top_k']
@@ -176,7 +175,7 @@ def test_model_evaluator_get_config_metrics_with_subsample_size_from_subset_metr
176175
{'subset_size': '20%', 'metrics': [{'type': 'accuracy', 'top_k': 5, 'reference': 0.72}]}]
177176
}
178177
subset_metric = {'type': 'accuracy', 'top_k': 5, 'reference': 0.72}
179-
selected_metric = get_config_metrics(dataset_config_sub_evaluation)[0]
178+
selected_metric = ModelEvaluator.get_config_metrics(dataset_config_sub_evaluation)[0]
180179

181180
assert subset_metric['reference'] == selected_metric['reference']
182181
assert subset_metric['top_k'] == selected_metric['top_k']
@@ -189,7 +188,7 @@ def test_model_evaluator_get_config_metrics_from_subset_metrics(self, mocker):
189188
'metrics': [{'type': 'accuracy', 'top_k': 5, 'reference': 0.65}]}]
190189
}
191190
subset_metric = {'type': 'accuracy', 'top_k': 5, 'reference': 0.65}
192-
selected_metric = get_config_metrics(dataset_config_sub_evaluation)[0]
191+
selected_metric = ModelEvaluator.get_config_metrics(dataset_config_sub_evaluation)[0]
193192

194193
assert subset_metric['reference'] == selected_metric['reference']
195194
assert subset_metric['top_k'] == selected_metric['top_k']

0 commit comments

Comments
 (0)