import datasets import random import torchvision.transforms.v2.functional as functional from collections import Counter def rotate90(image): """Rotate the image by a random multiple of 90 degrees""" angle = 90 * random.randint(1,3) return functional.rotate(image, angle=angle) def calc_class_dist(dataset: datasets.Dataset) -> list[float]: """ Return percentage of total examples, done per class. """ # extract classes only labels = dataset["label"] counts = Counter(labels) total_size = sum(counts.values()) percents = [100 * counts.get(i, 0) / total_size for i in range(max(labels)+1)] return percents def int_to_string(dataset: datasets.Dataset, int_label: int) -> str: """ Converts integer labels to their string counterpart. """ if not (0 <= int_label <= 38): raise ValueError(f"Given label value, {int_label}, is out of range.") return dataset.features['label'].int2str(int_label)