Created
September 3, 2019 09:35
-
-
Save Z-Zheng/2dc93fee7633ef74e72e612be4f544ed to your computer and use it in GitHub Desktop.
todo
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class mIoU(Node): | |
def __init__(self, num_classes, log_file=None): | |
self.num_classes = num_classes | |
self.log_file = None | |
self._total = sparse.coo_matrix((num_classes, num_classes), dtype=np.float32) | |
@staticmethod | |
def compute_iou_per_class(confusion_matrix): | |
""" | |
Args: | |
confusion_matrix: numpy array [num_classes, num_classes] row - gt, col - pred | |
Returns: | |
iou_per_class: float32 [num_classes, ] | |
""" | |
sum_over_row = np.sum(confusion_matrix, axis=0) | |
sum_over_col = np.sum(confusion_matrix, axis=1) | |
diag = np.diag(confusion_matrix) | |
denominator = sum_over_row + sum_over_col - diag | |
iou_per_class = diag / denominator | |
return iou_per_class | |
def forward(self, y_pred, y_true): | |
if isinstance(y_pred, torch.Tensor): | |
y_pred = y_pred.cpu().numpy() | |
if isinstance(y_true, torch.Tensor): | |
y_true = y_true.cpu().numpy() | |
y_pred = y_pred.reshape((-1,)) | |
y_true = y_true.reshape((-1,)) | |
v = np.ones_like(y_pred) | |
cm = sparse.coo_matrix((v, (y_true, y_pred)), shape=(self.num_classes, self.num_classes), dtype=np.float32) | |
self._total += cm | |
def after_callback(self): | |
# todo: (wjj) print miou into log file | |
pass |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
from simplecv.util.logger import get_console_file_logger
import logging
class mIoU(Node):
def init(self, num_classes, log_dir=None):
self.num_classes = num_classes
self.log_file = None
self._total = sparse.coo_matrix((num_classes, num_classes), dtype=np.float32)
self.logger = get_console_file_logger(self.class.name, logging.INFO, log_dir)
@staticmethod
def compute_iou_per_class(confusion_matrix):
"""
Args:
confusion_matrix: numpy array [num_classes, num_classes] row - gt, col - pred
Returns:
iou_per_class: float32 [num_classes, ]
"""
sum_over_row = np.sum(confusion_matrix, axis=0)
sum_over_col = np.sum(confusion_matrix, axis=1)
diag = np.diag(confusion_matrix)
denominator = sum_over_row + sum_over_col - diag
def compute_iou_per_class(confusion_matrix):
"""
Args:
confusion_matrix: numpy array [num_classes, num_classes] row - gt, col - pred
Returns:
iou_per_class: float32 [num_classes, ]
"""
sum_over_row = np.sum(confusion_matrix, axis=0)
sum_over_col = np.sum(confusion_matrix, axis=1)
diag = np.diag(confusion_matrix)
denominator = sum_over_row + sum_over_col - diag