satdetect-dev / scripts /record_delhi_baseline.py
coderuday21's picture
Cursor
Deploy satdetect-dev with Priyanka audit/exception logs.
d70361b
Raw
History Blame Contribute Delete
2.54 kB
"""
Record Delhi baseline metrics (Day 2 deliverable) for default settings.
Runs each primary method separately at sensitivity 0.5 (one process at a time
to avoid RAM spikes) and writes runs/delhi_baseline/metrics.json.
"""
from __future__ import annotations
import json
import subprocess
import sys
from pathlib import Path
ROOT = Path(__file__).resolve().parent.parent
OUT = ROOT / "runs" / "delhi_baseline"
MANIFEST = ROOT / "docs" / "delhi_eval" / "manifest.json"
METHODS = [
"Feature-Based",
"KPCA (Unsupervised)",
"Hybrid Approach",
"AI-Based Deep Learning",
"Hybrid AI",
]
def _run_method(method: str) -> list[dict]:
OUT.mkdir(parents=True, exist_ok=True)
report = OUT / f"report_{method.replace(' ', '_')}.json"
cmd = [
sys.executable,
str(ROOT / "scripts" / "compare_methods.py"),
"--manifest", str(MANIFEST),
"--methods", method,
"--sensitivities", "0.5",
"--out", str(OUT),
"--report-only",
]
print(f"\n=== Baseline: {method} ===")
subprocess.run(cmd, check=True, cwd=ROOT)
manifest_report = OUT / "manifest_report.json"
if manifest_report.is_file():
rows = json.loads(manifest_report.read_text(encoding="utf-8"))
report.write_text(json.dumps(rows, indent=2), encoding="utf-8")
return rows
return []
def main():
all_rows: list[dict] = []
for method in METHODS:
all_rows.extend(_run_method(method))
labeled = [r for r in all_rows if "f1" in r]
summary = {
"methods": METHODS,
"sensitivity": 0.5,
"n_pairs": len({r["pair_id"] for r in all_rows}),
"n_labeled_rows": len(labeled),
"per_method_mean_f1": {},
"per_method_mean_iou": {},
}
by_method: dict[str, list[dict]] = {}
for r in labeled:
by_method.setdefault(r["method"], []).append(r)
for m, rows in by_method.items():
summary["per_method_mean_f1"][m] = round(
sum(r["f1"] for r in rows) / len(rows), 4)
summary["per_method_mean_iou"][m] = round(
sum(r["iou"] for r in rows) / len(rows), 4)
(OUT / "metrics.json").write_text(json.dumps(summary, indent=2), encoding="utf-8")
(OUT / "manifest_report.json").write_text(json.dumps(all_rows, indent=2), encoding="utf-8")
print(f"\nWrote {OUT / 'metrics.json'}")
for m, f1 in summary["per_method_mean_f1"].items():
print(f" {m}: mean F1={f1} IoU={summary['per_method_mean_iou'][m]}")
if __name__ == "__main__":
main()