23
23
24
24
logger = logging .getLogger (__name__ )
25
25
26
+ # Import external loggers
27
+ try :
28
+ from anomalib .loggers import (
29
+ AnomalibCometLogger ,
30
+ AnomalibMLFlowLogger ,
31
+ AnomalibTensorBoardLogger ,
32
+ AnomalibWandbLogger ,
33
+ )
34
+
35
+ LOGGERS_AVAILABLE = True
36
+ logger .info ("Successfully imported logger modules." )
37
+ except ImportError :
38
+ LOGGERS_AVAILABLE = False
39
+ logger .warning ("To use external loggers, install required packages using `anomalib install -v`" )
40
+
26
41
27
42
class BenchmarkJob (Job ):
28
43
"""Benchmarking job.
@@ -69,6 +84,7 @@ def run(
69
84
accelerator = self .accelerator ,
70
85
devices = devices ,
71
86
default_root_dir = temp_dir ,
87
+ logger = self ._initialize_loggers (self .flat_cfg or {}) if LOGGERS_AVAILABLE else None ,
72
88
)
73
89
fit_start_time = time .time ()
74
90
engine .fit (self .model , self .datamodule )
@@ -89,8 +105,49 @@ def run(
89
105
** test_results [0 ],
90
106
}
91
107
logger .info (f"Completed with result { output } " )
108
+
109
+ # Logging metrics to External Loggers
110
+ trainer = engine .trainer ()
111
+ for logger_instance in trainer .loggers :
112
+ if isinstance (logger_instance , AnomalibCometLogger | AnomalibWandbLogger | AnomalibMLFlowLogger ):
113
+ logger_instance .log_metrics (test_results [0 ])
114
+ logger .debug (f"Successfully logged metrics to { logger_instance .__class__ .__name__ } " )
92
115
return output
93
116
117
+ @staticmethod
118
+ def _initialize_loggers (logger_configs : dict [str , dict [str , Any ]]) -> list [Any ]:
119
+ """Initialize configured external loggers.
120
+
121
+ Args:
122
+ logger_configs: Dictionary mapping logger names to their configurations.
123
+
124
+ Returns:
125
+ Dictionary of initialized loggers.
126
+ """
127
+ logger_mapping = {
128
+ "tensorboard" : AnomalibTensorBoardLogger ,
129
+ "comet" : AnomalibCometLogger ,
130
+ "wandb" : AnomalibWandbLogger ,
131
+ "mlflow" : AnomalibMLFlowLogger ,
132
+ }
133
+
134
+ active_loggers = []
135
+ default_configs = {
136
+ "tensorboard" : {"save_dir" : "logs/benchmarks" },
137
+ "comet" : {"project_name" : "anomalib" },
138
+ "wandb" : {"project" : "anomalib" },
139
+ "mlflow" : {"experiment_name" : "anomalib" },
140
+ }
141
+
142
+ for logger_name , logger_class in logger_mapping .items ():
143
+ # Use provided config or fall back to defaults
144
+ config = logger_configs .get (logger_name , default_configs .get (logger_name , {}))
145
+ logger_instance = logger_class (** config )
146
+ active_loggers .append (logger_instance )
147
+ logger .info (f"Successfully initialized { logger_name } logger" )
148
+
149
+ return active_loggers
150
+
94
151
@staticmethod
95
152
def collect (results : list [dict [str , Any ]]) -> pd .DataFrame :
96
153
"""Gather the results returned from run."""
0 commit comments