Spaces:
Runtime error
Runtime error
| import os | |
| import os.path | |
| import json | |
| from PIL import Image | |
| import torch.utils.data as data | |
| def pil_loader(path): | |
| # open path as file to avoid ResourceWarning (https://github.com/python-pillow/Pillow/issues/835) | |
| with open(path, 'rb') as f: | |
| img = Image.open(f) | |
| return img.convert('RGB') | |
| class ImageNet(data.Dataset): | |
| """ ImageNet | |
| Args: | |
| root (string): Root directory where images are downloaded to. | |
| annFile (string): Path to json annotation file. | |
| transform (callable, optional): A function/transform that takes in an PIL image | |
| and returns a transformed version. E.g, ``transforms.ToTensor`` | |
| """ | |
| def __init__(self, ann_file, root, remove_images_without_annotations=None, transforms=None): | |
| self.root = root | |
| self.transform = transforms | |
| meta_file = os.path.join(root, ann_file) | |
| assert os.path.exists(meta_file), 'meta file %s under root %s not found' % (os.path.basename(meta_file), root) | |
| with open(meta_file, 'r') as f: | |
| meta = json.load(f) | |
| self.classes = meta['classes'] | |
| self.class_to_idx = meta['class_to_idx'] | |
| self.samples = meta['samples'] | |
| self.num_sample = len(self.samples) | |
| self.allsamples = self.samples | |
| def select_class(self, cls): | |
| new_samples = [sample for sample in self.allsamples if sample[-1] in cls] | |
| self.samples = new_samples | |
| self.num_sample = len(self.samples) | |
| def __getitem__(self, index): | |
| """ | |
| Args: | |
| index (int): Index | |
| Returns: | |
| tuple: (sample, target) where target is class_index of the target class. | |
| """ | |
| img_path, target = self.samples[index] | |
| sample = pil_loader(self.root + '/' + img_path) | |
| if self.transform is not None: | |
| sample = self.transform(sample) | |
| return sample, target, index | |
| def __len__(self): | |
| return len(self.samples) |