From ab1ec8fcab338f7e396a207267c3913af0b7123c Mon Sep 17 00:00:00 2001 From: Chana Orlinsky Date: Mon, 10 Nov 2025 15:58:33 +0200 Subject: [PATCH 1/3] refactor: reorganize evaluation scripts structure - Move evaluator.py to src/evaluation/base/ - Move metrics files to src/evaluation/metrics/ - Move result files to src/evaluation/results/ - Update all imports to reflect new structure - Rename complete_hierarchy_results.json to hierarchical_evaluation_results.json - Update output paths in evaluation scripts Resolves #124 --- src/evaluation/{ => base}/evaluator.py | 2 +- {metrics => src/evaluation/metrics}/metrics_api.py | 0 {metrics => src/evaluation/metrics}/metrics_example.py | 0 .../evaluation/results/evaluation_results.json | 0 .../results/hierarchical_evaluation_results.json | 0 src/evaluation/run_evaluation.py | 6 +++--- src/evaluation/run_hierarchical_evaluation.py | 10 +++++----- 7 files changed, 9 insertions(+), 9 deletions(-) rename src/evaluation/{ => base}/evaluator.py (95%) rename {metrics => src/evaluation/metrics}/metrics_api.py (100%) rename {metrics => src/evaluation/metrics}/metrics_example.py (100%) rename evaluation_results.json => src/evaluation/results/evaluation_results.json (100%) rename complete_hierarchy_results.json => src/evaluation/results/hierarchical_evaluation_results.json (100%) diff --git a/src/evaluation/evaluator.py b/src/evaluation/base/evaluator.py similarity index 95% rename from src/evaluation/evaluator.py rename to src/evaluation/base/evaluator.py index 2276d780..062ff240 100644 --- a/src/evaluation/evaluator.py +++ b/src/evaluation/base/evaluator.py @@ -6,7 +6,7 @@ import torch from PIL import Image -from metrics.metrics_api import ClassificationReport, compute_metrics +from src.evaluation.metrics.metrics_api import ClassificationReport, compute_metrics from src.inference import ClassifierInferenceBase as InferenceModel diff --git a/metrics/metrics_api.py b/src/evaluation/metrics/metrics_api.py similarity index 100% rename from metrics/metrics_api.py rename to src/evaluation/metrics/metrics_api.py diff --git a/metrics/metrics_example.py b/src/evaluation/metrics/metrics_example.py similarity index 100% rename from metrics/metrics_example.py rename to src/evaluation/metrics/metrics_example.py diff --git a/evaluation_results.json b/src/evaluation/results/evaluation_results.json similarity index 100% rename from evaluation_results.json rename to src/evaluation/results/evaluation_results.json diff --git a/complete_hierarchy_results.json b/src/evaluation/results/hierarchical_evaluation_results.json similarity index 100% rename from complete_hierarchy_results.json rename to src/evaluation/results/hierarchical_evaluation_results.json diff --git a/src/evaluation/run_evaluation.py b/src/evaluation/run_evaluation.py index 10748038..fa00e32b 100644 --- a/src/evaluation/run_evaluation.py +++ b/src/evaluation/run_evaluation.py @@ -4,10 +4,10 @@ import pandas as pd -from src.evaluation.evaluator import EvaluationConfig, ModelEvaluator +from src.evaluation.base.evaluator import EvaluationConfig, ModelEvaluator from src.inference import MobileNetInference, ResNetInference from src.onnx_model import OnnxClassifierInferenceBase as OnnxModel -from src.optimal_class_mapping import map_prediction +from dataset.optimal_class_mapping import map_prediction from src.path_utils import ensure_clean_directory MODELS_DIR_PATH = Path("models") @@ -65,7 +65,7 @@ def parse_arguments(): "--model_type", type=str, choices=["pytorch", "onnx"], required=True ) parser.add_argument("--device", type=str, default="cpu") - parser.add_argument("--output", type=str, default="outputs/evaluation_results.json") + parser.add_argument("--output", type=str, default="src/evaluation/results/evaluation_results.json") return parser.parse_args() diff --git a/src/evaluation/run_hierarchical_evaluation.py b/src/evaluation/run_hierarchical_evaluation.py index 5dee74e6..31682755 100644 --- a/src/evaluation/run_hierarchical_evaluation.py +++ b/src/evaluation/run_hierarchical_evaluation.py @@ -4,11 +4,11 @@ from PIL import Image -from dataset_preparation.utilities.datasets import DATASETS -from metrics.metrics_api import compute_metrics -from src.evaluation.evaluator import EvaluationConfig, ModelEvaluator +from dataset.utilities.datasets import DATASETS +from src.evaluation.metrics.metrics_api import compute_metrics +from src.evaluation.base.evaluator import EvaluationConfig, ModelEvaluator from src.inference import MobileNetInference, ResNetInference -from src.optimal_class_mapping import map_prediction +from dataset.optimal_class_mapping import map_prediction class MappedModelWrapper: @@ -98,7 +98,7 @@ def main(): results["mobilenet"] = evaluate_all_hierarchies(true_labels, predictions, latencies) - with open("complete_hierarchy_results.json", "w") as f: + with open("src/evaluation/results/hierarchical_evaluation_results.json", "w") as f: json.dump(results, f, indent=2) print("\nšŸ“Š תוצאות:") From 153fe3fb4efdb0259b3d7d177592626bf33bd7b9 Mon Sep 17 00:00:00 2001 From: Chana Orlinsky Date: Tue, 11 Nov 2025 14:43:38 +0200 Subject: [PATCH 2/3] fix: use full class name instead of alias for OnnxClassifierInferenceBase - Remove 'as OnnxModel' alias as requested in code review - Use OnnxClassifierInferenceBase directly for better readability Addresses reviewer feedback --- src/evaluation/run_evaluation.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/evaluation/run_evaluation.py b/src/evaluation/run_evaluation.py index fa00e32b..f9523f61 100644 --- a/src/evaluation/run_evaluation.py +++ b/src/evaluation/run_evaluation.py @@ -6,7 +6,7 @@ from src.evaluation.base.evaluator import EvaluationConfig, ModelEvaluator from src.inference import MobileNetInference, ResNetInference -from src.onnx_model import OnnxClassifierInferenceBase as OnnxModel +from src.onnx_model import OnnxClassifierInferenceBase from dataset.optimal_class_mapping import map_prediction from src.path_utils import ensure_clean_directory @@ -48,7 +48,7 @@ def create_model(model_name: str, model_type: str, device: str): else: raise ValueError(f"Unknown model: {model_name}") elif model_type == "onnx": - base_model = OnnxModel(device=device, weights_path=weights_path, topk=1) + base_model = OnnxClassifierInferenceBase(device=device, weights_path=weights_path, topk=1) else: raise ValueError(f"Unknown model_type: {model_type}") From 6f2c835dc60cca4bb9bbc9fc670d4ed9b617d14a Mon Sep 17 00:00:00 2001 From: Chana Orlinsky Date: Tue, 11 Nov 2025 15:09:10 +0200 Subject: [PATCH 3/3] fix: update imports and class names as per code review --- run_dev.sh | 2 +- src/evaluation/results/evaluation_results.json | 2 +- src/evaluation/run_evaluation.py | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/run_dev.sh b/run_dev.sh index a219c46c..0e3d61a8 100755 --- a/run_dev.sh +++ b/run_dev.sh @@ -28,4 +28,4 @@ docker run \ -it \ -td \ --rm \ - ${IMAGE_NAME} \ + ${IMAGE_NAME} diff --git a/src/evaluation/results/evaluation_results.json b/src/evaluation/results/evaluation_results.json index f6cc6cf0..1bb887d1 100644 --- a/src/evaluation/results/evaluation_results.json +++ b/src/evaluation/results/evaluation_results.json @@ -15,4 +15,4 @@ "latency_mean": 0.060137055586657176, "latency_std": 0.09272526518546054 } -} \ No newline at end of file +}{}{} \ No newline at end of file diff --git a/src/evaluation/run_evaluation.py b/src/evaluation/run_evaluation.py index f9523f61..639ab214 100644 --- a/src/evaluation/run_evaluation.py +++ b/src/evaluation/run_evaluation.py @@ -7,7 +7,7 @@ from src.evaluation.base.evaluator import EvaluationConfig, ModelEvaluator from src.inference import MobileNetInference, ResNetInference from src.onnx_model import OnnxClassifierInferenceBase -from dataset.optimal_class_mapping import map_prediction +from src.optimal_class_mapping import map_prediction from src.path_utils import ensure_clean_directory MODELS_DIR_PATH = Path("models")