def __init__(self, image_features_h5path: str, in_memory: bool = True) -> None: self._image_features_reader = ImageFeaturesReader( image_features_h5path, in_memory) self._image_ids = sorted(list(self._image_features_reader._map.keys()))
def __init__( self, vocabulary: Vocabulary, captions_jsonpath: str, image_features_h5path: str, max_caption_length: int = 20, in_memory: bool = True, ) -> None: self._vocabulary = vocabulary self._image_features_reader = ImageFeaturesReader(image_features_h5path, in_memory) self._captions_reader = CocoCaptionsReader(captions_jsonpath) self._max_caption_length = max_caption_length
def __init__(self, vocabulary, captions_jsonpath, image_features_h5path, classes_per_it, num_samples, iterations, max_caption_length=20, in_memory=False): ''' Initialize the PrototypicalBatchSampler object Args: - labels: an iterable containing all the labels for the current dataset samples indexes will be infered from this iterable. - classes_per_it: number of random classes for each iteration - num_samples: number of samples for each iteration for each class (support + query) - iterations: number of iterations (episodes) per epoch ''' super(PrototypicalBatchSampler, self).__init__() self.vocabulary = vocabulary self._image_features_reader = ImageFeaturesReader(image_features_h5path, in_memory) self._captions_reader = CocoCaptionsReader(captions_jsonpath) self._max_caption_length = max_caption_length self.classes_per_it = classes_per_it self.sample_per_class = num_samples self.iterations = iterations self.classes, self.counts = np.unique(self.labels, return_counts=True) self.classes = torch.LongTensor(self.classes) # create a matrix, indexes, of dim: classes X max(elements per class) # fill it with nans # for every class c, fill the relative row with the indices samples belonging to c # in numel_per_class we store the number of samples for each class/row self.idxs = range(len(self.labels)) self.indexes = np.empty((len(self.classes), max(self.counts)), dtype=int) * np.nan self.indexes = torch.Tensor(self.indexes) self.numel_per_class = torch.zeros_like(self.classes) for idx, label in enumerate(self.labels): label_idx = np.argwhere(self.classes == label).item() self.indexes[label_idx, np.where(np.isnan(self.indexes[label_idx]))[0][0]] = idx self.numel_per_class[label_idx] += 1