rockglacierNET / parse_results.py
kabiriitb's picture
Upload folder using huggingface_hub
80e070e verified
Raw History Blame Contribute Delete
3.28 kB
import os
import pandas as pd
import json
experiments = {
"all": ["(all 35 bands)"],
"17": ["TPI", "ROUGHNESS", "LST_winter", "NDWI", "LST_summer", "REL_RELIEF", "ASPECT", "LST_anomaly", "ELEV_COP", "B2", "HILLSHADE", "B8A", "NDMI", "B12", "B3", "B4", "B8"],
"14": ["TPI", "ROUGHNESS", "LST_winter", "NDWI", "LST_summer", "REL_RELIEF", "ASPECT", "LST_anomaly", "ELEV_COP", "B2", "HILLSHADE", "B8A", "NDMI", "B12"],
"opt_idx": ["B2", "B3", "B4", "B8", "B8A", "B11", "B12", "NDVI", "NDWI", "NDMI", "NDSI", "BSI", "ALBEDO", "ELEV_COP"],
"terr_therm": ["TPI", "ROUGHNESS", "SLOPE", "ASPECT", "REL_RELIEF", "HILLSHADE", "CURVATURE", "ELEV_COP", "LST_winter", "LST_summer", "LST_annual", "LST_anomaly"],
"mixed_16": ["TPI", "ROUGHNESS", "REL_RELIEF", "ELEV_COP", "SLOPE", "LST_winter", "LST_summer", "NDWI", "NDVI", "B2", "B3", "B4", "B8", "B12", "NDMI", "BSI"],
"top_20": ["TPI", "ROUGHNESS", "LST_winter", "NDWI", "LST_summer", "REL_RELIEF", "ASPECT", "LST_anomaly", "ELEV_COP", "B2", "HILLSHADE", "B8A", "NDMI", "B12", "B3", "B4", "B8", "NDVI", "SLOPE", "CURVATURE"]
}
results = []
for exp, bands in experiments.items():
if exp == "all":
ckpt_dir = "all_data/checkpoint"
res_dir = "all_data/result"
n_bands = 35
else:
ckpt_dir = f"all_data/checkpoint_{exp}band"
res_dir = f"all_data/result_{exp}band"
n_bands = len(bands)
# Parse val metrics
try:
df = pd.read_csv(f"{ckpt_dir}/training_history.csv")
best_row = df.loc[df['val_dice_coef'].idxmax()]
val_dice = best_row['val_dice_coef']
val_iou = best_row['val_iou_m']
except Exception as e:
val_dice = 0
val_iou = 0
# Parse test metrics
test_dice, test_iou, precision, recall = 0, 0, 0, 0
try:
with open(f"{res_dir}/evaluation_summary.txt", "r") as f:
for line in f:
if "dice :" in line or "dice :" in line:
test_dice = float(line.split(":")[1].strip())
elif "iou :" in line or "iou :" in line:
test_iou = float(line.split(":")[1].strip())
elif "precision :" in line:
precision = float(line.split(":")[1].strip())
elif "recall :" in line or "recall :" in line:
recall = float(line.split(":")[1].strip())
except Exception as e:
pass
results.append({
"run_name": exp,
"n_bands": n_bands,
"bands": ",".join(bands),
"val_dice": val_dice,
"val_iou": val_iou,
"test_dice": test_dice,
"test_iou": test_iou,
"precision": precision,
"recall": recall
})
# Sort by test_dice descending
results.sort(key=lambda x: x['test_dice'], reverse=True)
# Print as markdown table
print("| run_name | n_bands | val_dice | val_iou | test_dice | test_iou | precision | recall | bands |")
print("|----------|---------|----------|---------|-----------|----------|-----------|--------|-------|")
for r in results:
print(f"| {r['run_name']} | {r['n_bands']} | {r['val_dice']:.4f} | {r['val_iou']:.4f} | {r['test_dice']:.4f} | {r['test_iou']:.4f} | {r['precision']:.4f} | {r['recall']:.4f} | {r['bands']} |")