From e29a98ef50aa64c9a911d2f2f1bdf7ec800325de Mon Sep 17 00:00:00 2001 From: Martin Kozlovsky Date: Wed, 27 May 2026 07:33:54 +0200 Subject: [PATCH 1/2] Hotfix for no dependency config loading --- .../base_predefined_model.py | 54 ++++++++++--------- 1 file changed, 28 insertions(+), 26 deletions(-) diff --git a/luxonis_train/config/predefined_models/base_predefined_model.py b/luxonis_train/config/predefined_models/base_predefined_model.py index f8a820e7..01866ebf 100644 --- a/luxonis_train/config/predefined_models/base_predefined_model.py +++ b/luxonis_train/config/predefined_models/base_predefined_model.py @@ -1,4 +1,5 @@ from abc import abstractmethod +from contextlib import suppress from typing import Literal from loguru import logger @@ -218,32 +219,33 @@ def _generate_metrics(self) -> list[MetricModuleConfig]: for metric in self._metrics ] - task = NODES.get(self._head).task - metrics = [] - applied_per_class_override = False - - for metric in self._metrics: - metric_params = dict(self._metrics_params) - metric_cls = METRICS.get(metric) - aliases = metric_cls.get_predefined_model_params_aliases(task) - param_name = aliases.get("per_class_metrics") - if param_name is not None: - metric_params[param_name] = self._per_class_metrics - applied_per_class_override = True - - metrics.append( - MetricModuleConfig( - name=metric, - params=metric_params, - is_main_metric=metric == self._main_metric, + with suppress(Exception): + task = NODES.get(self._head).task + metrics = [] + applied_per_class_override = False + + for metric in self._metrics: + metric_params = dict(self._metrics_params) + metric_cls = METRICS.get(metric) + aliases = metric_cls.get_predefined_model_params_aliases(task) + param_name = aliases.get("per_class_metrics") + if param_name is not None: + metric_params[param_name] = self._per_class_metrics + applied_per_class_override = True + + metrics.append( + MetricModuleConfig( + name=metric, + params=metric_params, + is_main_metric=metric == self._main_metric, + ) ) - ) - if self._metrics and not applied_per_class_override: - logger.warning( - "Ignoring `per_class_metrics` for predefined model metrics " - f"{self._metrics} because none of them support a per-class " - "override." - ) + if self._metrics and not applied_per_class_override: + logger.warning( + "Ignoring `per_class_metrics` for predefined model metrics " + f"{self._metrics} because none of them support a per-class " + "override." + ) - return metrics + return metrics From 614d5b0d4437ddb64c911d2287b8d2e6051e5795 Mon Sep 17 00:00:00 2001 From: Martin Kozlovsky Date: Wed, 27 May 2026 09:59:06 +0200 Subject: [PATCH 2/2] More robust fix --- .../base_predefined_model.py | 78 ++++++++++--------- 1 file changed, 41 insertions(+), 37 deletions(-) diff --git a/luxonis_train/config/predefined_models/base_predefined_model.py b/luxonis_train/config/predefined_models/base_predefined_model.py index 01866ebf..3adf676d 100644 --- a/luxonis_train/config/predefined_models/base_predefined_model.py +++ b/luxonis_train/config/predefined_models/base_predefined_model.py @@ -209,43 +209,47 @@ def nodes(self) -> list[NodeConfig]: return nodes def _generate_metrics(self) -> list[MetricModuleConfig]: - if self._per_class_metrics is None: - return [ - MetricModuleConfig( - name=metric, - params=self._metrics_params, - is_main_metric=metric == self._main_metric, - ) - for metric in self._metrics - ] - - with suppress(Exception): - task = NODES.get(self._head).task - metrics = [] - applied_per_class_override = False - - for metric in self._metrics: - metric_params = dict(self._metrics_params) - metric_cls = METRICS.get(metric) - aliases = metric_cls.get_predefined_model_params_aliases(task) - param_name = aliases.get("per_class_metrics") - if param_name is not None: - metric_params[param_name] = self._per_class_metrics - applied_per_class_override = True - - metrics.append( - MetricModuleConfig( - name=metric, - params=metric_params, - is_main_metric=metric == self._main_metric, + if self._per_class_metrics is not None: + try: + task = NODES.get(self._head).task + metrics = [] + applied_per_class_override = False + + for metric in self._metrics: + metric_params = dict(self._metrics_params) + metric_cls = METRICS.get(metric) + aliases = metric_cls.get_predefined_model_params_aliases( + task ) - ) + param_name = aliases.get("per_class_metrics") + if param_name is not None: + metric_params[param_name] = self._per_class_metrics + applied_per_class_override = True - if self._metrics and not applied_per_class_override: - logger.warning( - "Ignoring `per_class_metrics` for predefined model metrics " - f"{self._metrics} because none of them support a per-class " - "override." - ) + metrics.append( + MetricModuleConfig( + name=metric, + params=metric_params, + is_main_metric=metric == self._main_metric, + ) + ) - return metrics + if self._metrics and not applied_per_class_override: + logger.warning( + "Ignoring `per_class_metrics` for predefined model metrics " + f"{self._metrics} because none of them support a per-class " + "override." + ) + return metrics # noqa: TRY300 + + except Exception: + logger.warning("Unable to ") + + return [ + MetricModuleConfig( + name=metric, + params=self._metrics_params, + is_main_metric=metric == self._main_metric, + ) + for metric in self._metrics + ]