SpiceNet / code /make_backbone_table.py
Noushad999's picture
Upload folder using huggingface_hub
1ea7ba6 verified
Raw
History Blame Contribute Delete
2.58 kB
"""
Assemble the within-source architecture + augmentation tables.
Kills two objections at once:
* "you cherry-picked a weak backbone" -> within-source is >=99% across ResNet-50,
EfficientNet-B4, ViT and our fusion; the classical SVM baseline (~32%) shows the
task is non-trivial.
* "the numbers are just accuracy" -> macro-F1 reported alongside top-1.
Reads existing outputs/baseline_comparison.json + outputs/ablation_results.json.
Pure assembly (no GPU, no re-eval). Writes markdown + LaTeX.
"""
import json
from pathlib import Path
ROOT = Path("/mnt/d/SpiceNet") if Path("/mnt/d/SpiceNet").exists() else Path("D:/SpiceNet")
OUT_MD = ROOT / "outputs" / "backbone_baseline_table.md"
OUT_TEX = ROOT / "outputs" / "backbone_baseline_table.tex"
def _load(name):
p = ROOT / "outputs" / name
return json.load(open(p)) if p.exists() else None
def main():
base = _load("baseline_comparison.json")
abl = _load("ablation_results.json")
md = ["# Within-source robustness tables (assembled)\n",
"## Architecture comparison (within-source, full Spice_Spectrum test)\n",
"| Model | Top-1 | Top-5 | Macro-F1 |", "|---|---|---|---|"]
tex = [r"\begin{tabular}{lccc}", r"\hline",
r"Model & Top-1 & Top-5 & Macro-F1 \\", r"\hline"]
if base:
for b in base["baselines"]:
t1 = f"{b['top1']*100:.2f}"
t5 = f"{b['top5']*100:.2f}" if b.get("top5") is not None else "--"
fm = f"{b['f1_macro']*100:.2f}" if b.get("f1_macro") is not None else "--"
md.append(f"| {b['model']} | {t1} | {t5} | {fm} |")
tex.append(f"{b['model']} & {t1} & {t5} & {fm} \\\\")
tex += [r"\hline", r"\end{tabular}"]
if abl and "A3" in abl:
md += ["\n## Augmentation ablation (within-source)\n",
"| Augmentation | Top-1 | Macro-F1 |", "|---|---|---|"]
for a in abl["A3"]:
md.append(f"| {a['name']} | {a['top1_accuracy']*100:.2f} | {a['f1_macro']*100:.2f} |")
md.append("\n> Note: these are WITHIN-source metrics (they justify the model choice "
"and show the task is non-trivial). The cross-source collapse is reported "
"separately in the shortcut matrix — augmentation does not close it.")
OUT_MD.write_text("\n".join(md), encoding="utf-8")
OUT_TEX.write_text("\n".join(tex), encoding="utf-8")
print(f"saved -> {OUT_MD}\nsaved -> {OUT_TEX}")
print("\n".join(md[:12]))
if __name__ == "__main__":
main()