Spaces:
Sleeping
Sleeping
import numpy as np | |
from dataset_classes.cub200 import CUB200Class | |
def get_cub_alignment_from_features(features_train_sorted): | |
metric_matrix = compute_metric_matrix(np.array(features_train_sorted), "train") | |
return np.mean(np.max(metric_matrix, axis=1)) | |
pass | |
def compute_metric_matrix(features, mode): | |
image_attribute_labels = CUB200Class.get_image_attribute_labels(train=mode == "train") | |
image_attribute_labels = CUB200Class.filter_attribute_labels(image_attribute_labels) | |
matrix_shape = ( | |
features.shape[1], max(image_attribute_labels["attribute"]) + 1) | |
accuracy_matrix = np.zeros(matrix_shape) | |
sensitivity_matrix = np.zeros_like(accuracy_matrix) | |
grouped_attributes = image_attribute_labels.groupby("attribute") | |
for attribute_id, group in grouped_attributes: | |
is_present = group[group["is_present"]] | |
not_present = group[~group["is_present"]] | |
is_present_avg = np.mean(features[is_present["img_id"]], axis=0) | |
not_present_avg = np.mean(features[not_present["img_id"]], axis=0) | |
sensitivity_matrix[:, attribute_id] = not_present_avg | |
accuracy_matrix[:, attribute_id] = is_present_avg | |
metric_matrix = accuracy_matrix - sensitivity_matrix | |
no_abs_features = features - np.min(features, axis=0) | |
no_abs_feature_mean = metric_matrix / no_abs_features.mean(axis=0)[:, None] | |
return no_abs_feature_mean | |