Spaces:
Running
Running
| import json | |
| import os | |
| EXP_BASE = os.path.join(os.path.dirname(__file__), "..", "experiments") | |
| EXP_BASE = os.path.abspath(EXP_BASE) | |
| OUTPUT = os.path.join(EXP_BASE, "ncd_comparison.json") | |
| EXPERIMENTS = [ | |
| ("exp6_clean_split", "Exp 6 (CE)"), | |
| ("exp7_supcon", "Exp 7 (SupCon)"), | |
| ("exp8_sphor", "Exp 8 (SpHOR)"), | |
| ("exp9_ncd", "Exp 9 (NCD)"), | |
| ] | |
| MODELS = ["resnet18", "resnet50", "convnext_tiny", "convnext_small", "dinov2_small", "dinov2_base"] | |
| def main(): | |
| entries = [] | |
| for prefix, label in EXPERIMENTS: | |
| for model in MODELS: | |
| exp_name = f"{prefix}_{model}" | |
| ncd_path = os.path.join(EXP_BASE, exp_name, "ncd_results.json") | |
| if not os.path.exists(ncd_path): | |
| continue | |
| with open(ncd_path) as f: | |
| data = json.load(f) | |
| clustering = data.get("clustering", {}) | |
| kmeans = clustering.get("kmeans_best", {}) | |
| openset = data.get("openset", {}) | |
| baseline = openset.get("baselines", {}).get("softmax_threshold", {}) | |
| auroc = openset.get("mean_auroc", 0) | |
| knn = openset.get("knn_auroc", 0) | |
| entries.append({ | |
| "experiment": label, | |
| "exp_prefix": prefix, | |
| "model": model, | |
| "selected_k": clustering.get("selected_k", 0), | |
| "acc": round(kmeans.get("acc", 0), 4), | |
| "nmi": round(kmeans.get("nmi", 0), 4), | |
| "ari": round(kmeans.get("ari", 0), 4), | |
| "ami": round(kmeans.get("ami", 0), 4), | |
| "f_measure": round(kmeans.get("f_measure", 0), 4), | |
| "silhouette": round(kmeans.get("silhouette", 0), 4), | |
| "mean_auroc": round(auroc, 4), | |
| "knn_auroc": round(knn, 4), | |
| "baseline_auroc": round(baseline.get("mean_auroc", 0), 4), | |
| "improvement": round(auroc - baseline.get("mean_auroc", 0), 4), | |
| }) | |
| print(f" {exp_name}: AUROC={auroc:.4f} (baseline={baseline.get('mean_auroc',0):.4f})") | |
| entries.sort(key=lambda e: (e["experiment"], -e.get("mean_auroc", 0))) | |
| with open(OUTPUT, "w") as f: | |
| json.dump({"models": entries}, f, indent=2) | |
| print(f"\nSaved {len(entries)} entries to {OUTPUT}") | |
| if __name__ == "__main__": | |
| main() | |