import numpy as np from typing import List, Tuple def compute_metrics(conf_matrix: np.ndarray) -> Tuple[List[float], float, List[float], float]: """ Calculates metrics IoU and F1 from confusion matrix """ num_classes = conf_matrix.shape[0] ious, f1s = [], [] for c in range(num_classes): tp = conf_matrix[c, c] fp = conf_matrix[:, c].sum() - tp fn = conf_matrix[c, :].sum() - tp union = tp + fp + fn iou = tp / union if union else float('nan') f1 = 2 * tp / (2 * tp + fp + fn) if (2*tp + fp + fn) else 0.0 ious.append(iou) f1s.append(f1) miou = np.nanmean(ious) mf1 = float(np.mean(f1s)) return ious, miou, f1s, mf1