Haaribo's picture
Add application file
8d4ee22
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