|
|
@@ -8,43 +8,21 @@ Pipeline stages (see ai/ARCHITECTURE.md):
|
|
|
1. load_data -> implemented
|
|
|
2. train_regular -> implemented
|
|
|
3. train_bayesian -> implemented
|
|
|
- 4. evaluate_regular -> PLANNED (placeholder)
|
|
|
- 5. evaluate_bayesian-> PLANNED (placeholder)
|
|
|
- 6. evaluate_noisy -> PLANNED (placeholder)
|
|
|
- load_models -> PLANNED (placeholder); loads saved .pt ensembles from
|
|
|
- disk into ``state`` so evaluation is decoupled from
|
|
|
- training (training deletes models from VRAM after saving).
|
|
|
+ 4. evaluate_regular -> implemented
|
|
|
+ 5. evaluate_bayesian-> implemented
|
|
|
+ 6. evaluate_noisy -> implemented
|
|
|
+ load_models -> implemented; discovers saved .pt ensembles on disk and
|
|
|
+ records their paths in ``state`` so evaluation is
|
|
|
+ decoupled from training (training frees models from VRAM
|
|
|
+ after saving). Evaluation loads one model at a time.
|
|
|
"""
|
|
|
|
|
|
-from typing import Any, Dict
|
|
|
-
|
|
|
-from util.progress import ProgressTracker
|
|
|
-from util.ui_logger import PipelineLogger
|
|
|
-
|
|
|
+from . import evaluate
|
|
|
from . import load_data
|
|
|
+from . import load_models
|
|
|
from . import train_bayesian
|
|
|
from . import train_normal
|
|
|
|
|
|
-
|
|
|
-def _placeholder_task(planned: str):
|
|
|
- """Build a no-op task for a pipeline stage that is not implemented yet.
|
|
|
-
|
|
|
- It logs a clear warning and returns cleanly (advancing the pipeline) instead
|
|
|
- of crashing, so the scenario wiring can be exercised before the real
|
|
|
- evaluation logic lands.
|
|
|
- """
|
|
|
-
|
|
|
- def _task(
|
|
|
- tracker: ProgressTracker,
|
|
|
- logger: PipelineLogger,
|
|
|
- config: Dict[str, Any],
|
|
|
- state: Dict[str, Any],
|
|
|
- ) -> None:
|
|
|
- logger.info(f"[NOT IMPLEMENTED] {planned} — skipping (placeholder).")
|
|
|
-
|
|
|
- return _task
|
|
|
-
|
|
|
-
|
|
|
PIPELINE_TASKS = {
|
|
|
"load_data": {
|
|
|
"task_name": "Load Image and ADNIMERGE",
|
|
|
@@ -60,27 +38,19 @@ PIPELINE_TASKS = {
|
|
|
},
|
|
|
"load_models": {
|
|
|
"task_name": "Load Saved Models",
|
|
|
- "task_func": _placeholder_task(
|
|
|
- "Load trained normal/Bayesian ensembles from work_dir into state"
|
|
|
- ),
|
|
|
+ "task_func": load_models.load_models_task,
|
|
|
},
|
|
|
"evaluate_regular": {
|
|
|
"task_name": "Evaluate Regular Models",
|
|
|
- "task_func": _placeholder_task(
|
|
|
- "Evaluate normal ensemble and save netCDF (step 4)"
|
|
|
- ),
|
|
|
+ "task_func": evaluate.evaluate_normal_task,
|
|
|
},
|
|
|
"evaluate_bayesian": {
|
|
|
"task_name": "Evaluate Bayesian Models",
|
|
|
- "task_func": _placeholder_task(
|
|
|
- "Evaluate Bayesian ensemble with MC uncertainty and save netCDF (step 5)"
|
|
|
- ),
|
|
|
+ "task_func": evaluate.evaluate_bayesian_task,
|
|
|
},
|
|
|
"evaluate_noisy": {
|
|
|
"task_name": "Evaluate Models on Noised Data",
|
|
|
- "task_func": _placeholder_task(
|
|
|
- "Evaluate both ensembles across Gaussian noise levels and save netCDF (step 6)"
|
|
|
- ),
|
|
|
+ "task_func": evaluate.evaluate_noisy_task,
|
|
|
},
|
|
|
}
|
|
|
|