Spaces:
Sleeping
Sleeping
| import os | |
| import numpy as np | |
| import torch | |
| def count_parameters(model, trainable=False): | |
| if trainable: | |
| return sum(p.numel() for p in model.parameters() if p.requires_grad) | |
| return sum(p.numel() for p in model.parameters()) | |
| def tensor2numpy(x): | |
| return x.cpu().data.numpy() if x.is_cuda else x.data.numpy() | |
| def target2onehot(targets, n_classes): | |
| onehot = torch.zeros(targets.shape[0], n_classes).to(targets.device) | |
| onehot.scatter_(dim=1, index=targets.long().view(-1, 1), value=1.0) | |
| return onehot | |
| def makedirs(path): | |
| if not os.path.exists(path): | |
| os.makedirs(path) | |
| def accuracy(y_pred, y_true, nb_old, increment=10): | |
| assert len(y_pred) == len(y_true), "Data length error." | |
| all_acc = {} | |
| all_acc["total"] = np.around( | |
| (y_pred == y_true).sum() * 100 / len(y_true), decimals=2 | |
| ) | |
| # Grouped accuracy | |
| for class_id in range(0, np.max(y_true), increment): | |
| idxes = np.where( | |
| np.logical_and(y_true >= class_id, y_true < class_id + increment) | |
| )[0] | |
| label = "{}-{}".format( | |
| str(class_id).rjust(2, "0"), str(class_id + increment - 1).rjust(2, "0") | |
| ) | |
| all_acc[label] = np.around( | |
| (y_pred[idxes] == y_true[idxes]).sum() * 100 / len(idxes), decimals=2 | |
| ) | |
| # Old accuracy | |
| idxes = np.where(y_true < nb_old)[0] | |
| all_acc["old"] = ( | |
| 0 | |
| if len(idxes) == 0 | |
| else np.around( | |
| (y_pred[idxes] == y_true[idxes]).sum() * 100 / len(idxes), decimals=2 | |
| ) | |
| ) | |
| # New accuracy | |
| idxes = np.where(y_true >= nb_old)[0] | |
| all_acc["new"] = np.around( | |
| (y_pred[idxes] == y_true[idxes]).sum() * 100 / len(idxes), decimals=2 | |
| ) | |
| return all_acc | |
| def split_images_labels(imgs): | |
| # split trainset.imgs in ImageFolder | |
| images = [] | |
| labels = [] | |
| for item in imgs: | |
| images.append(item[0]) | |
| labels.append(item[1]) | |
| return np.array(images), np.array(labels) | |
| def accuracy_domain(y_pred, y_true, nb_old, increment=2, class_num=1) -> dict: | |
| assert len(y_pred) == len(y_true), "Data length error." | |
| all_acc = {} | |
| all_acc["total"] = np.around( | |
| (y_pred % class_num == y_true % class_num).sum() * 100 / len(y_true), decimals=2 | |
| ) | |
| # Grouped accuracy | |
| for class_id in range(0, np.max(y_true), increment): | |
| idxes = np.where( | |
| np.logical_and(y_true >= class_id, y_true < class_id + increment) | |
| )[0] | |
| label = "{}-{}".format( | |
| str(class_id).rjust(2, "0"), str(class_id + increment - 1).rjust(2, "0") | |
| ) | |
| all_acc[label] = np.around( | |
| ((y_pred[idxes] % class_num) == (y_true[idxes] % class_num)).sum() | |
| * 100 | |
| / len(idxes), | |
| decimals=2, | |
| ) | |
| # Old accuracy | |
| idxes = np.where(y_true < nb_old)[0] | |
| all_acc["old"] = ( | |
| 0 | |
| if len(idxes) == 0 | |
| else np.around( | |
| ((y_pred[idxes] % class_num) == (y_true[idxes] % class_num)).sum() | |
| * 100 | |
| / len(idxes), | |
| decimals=2, | |
| ) | |
| ) | |
| # New accuracy | |
| idxes = np.where(y_true >= nb_old)[0] | |
| all_acc["new"] = np.around( | |
| ((y_pred[idxes] % class_num) == (y_true[idxes] % class_num)).sum() | |
| * 100 | |
| / len(idxes), | |
| decimals=2, | |
| ) | |
| return all_acc | |
| def accuracy_binary(y_pred, y_true, nb_old, increment=2): | |
| assert len(y_pred) == len(y_true), "Data length error." | |
| all_acc = {} | |
| all_acc["total"] = np.around( | |
| (y_pred % 2 == y_true % 2).sum() * 100 / len(y_true), decimals=2 | |
| ) | |
| # Grouped accuracy | |
| for class_id in range(0, np.max(y_true), increment): | |
| idxes = np.where( | |
| np.logical_and(y_true >= class_id, y_true < class_id + increment) | |
| )[0] | |
| label = "{}-{}".format( | |
| str(class_id).rjust(2, "0"), str(class_id + increment - 1).rjust(2, "0") | |
| ) | |
| all_acc[label] = np.around( | |
| ((y_pred[idxes] % 2) == (y_true[idxes] % 2)).sum() * 100 / len(idxes), | |
| decimals=2, | |
| ) | |
| # Old accuracy | |
| idxes = np.where(y_true < nb_old)[0] | |
| # all_acc['old'] = 0 if len(idxes) == 0 else np.around((y_pred[idxes] == y_true[idxes]).sum()*100 / len(idxes),decimals=2) | |
| all_acc["old"] = ( | |
| 0 | |
| if len(idxes) == 0 | |
| else np.around( | |
| ((y_pred[idxes] % 2) == (y_true[idxes] % 2)).sum() * 100 / len(idxes), | |
| decimals=2, | |
| ) | |
| ) | |
| # New accuracy | |
| idxes = np.where(y_true >= nb_old)[0] | |
| all_acc["new"] = np.around( | |
| ((y_pred[idxes] % 2) == (y_true[idxes] % 2)).sum() * 100 / len(idxes), | |
| decimals=2, | |
| ) | |
| return all_acc | |