Spaces:
Sleeping
Sleeping
| """Confusion-matrix-based metrics. Same as the other experiments.""" | |
| import torch | |
| class SegMetrics: | |
| def __init__(self, threshold=0.5): | |
| self.threshold = threshold | |
| self.reset() | |
| def reset(self): | |
| self.tp = 0.0 | |
| self.fp = 0.0 | |
| self.fn = 0.0 | |
| self.tn = 0.0 | |
| def update(self, logits_or_probs, target, output_is_prob=False): | |
| pred = logits_or_probs if output_is_prob else torch.sigmoid(logits_or_probs) | |
| pred = (pred > self.threshold).float() | |
| target = target.float() | |
| self.tp += (pred * target).sum().item() | |
| self.fp += (pred * (1 - target)).sum().item() | |
| self.fn += ((1 - pred) * target).sum().item() | |
| self.tn += ((1 - pred) * (1 - target)).sum().item() | |
| def compute(self): | |
| eps = 1e-7 | |
| tp, fp, fn, tn = self.tp, self.fp, self.fn, self.tn | |
| fg_iou = tp / (tp + fp + fn + eps) | |
| bg_iou = tn / (tn + fp + fn + eps) | |
| return { | |
| "iou": float(fg_iou), | |
| "miou": float(0.5 * (fg_iou + bg_iou)), | |
| "dice": float((2 * tp) / (2 * tp + fp + fn + eps)), | |
| "pixel_acc": float((tp + tn) / (tp + tn + fp + fn + eps)), | |
| } | |