SSL_Dataset class gets dataset from torchvision.datasets, separates labeled and unlabeled data, and return BasicDataset: torch.utils.data.Dataset (see datasets.dataset.py)
| 189 | |
| 190 | |
| 191 | class SSL_Dataset: |
| 192 | """ |
| 193 | SSL_Dataset class gets dataset from torchvision.datasets, |
| 194 | separates labeled and unlabeled data, |
| 195 | and return BasicDataset: torch.utils.data.Dataset (see datasets.dataset.py) |
| 196 | """ |
| 197 | |
| 198 | def __init__(self, |
| 199 | args, |
| 200 | alg='fixmatch', |
| 201 | name='cifar10', |
| 202 | train=True, |
| 203 | num_classes=10, |
| 204 | data_dir='./data'): |
| 205 | """ |
| 206 | Args |
| 207 | alg: SSL algorithms |
| 208 | name: name of dataset in torchvision.datasets (cifar10, cifar100, svhn, stl10) |
| 209 | train: True means the dataset is training dataset (default=True) |
| 210 | num_classes: number of label classes |
| 211 | data_dir: path of directory, where data is downloaed or stored. |
| 212 | """ |
| 213 | self.args = args |
| 214 | self.alg = alg |
| 215 | self.name = name |
| 216 | self.train = train |
| 217 | self.num_classes = num_classes |
| 218 | self.data_dir = data_dir |
| 219 | crop_size = 96 if self.name.upper() == 'STL10' else 224 if self.name.upper() == 'IMAGENET' else 32 |
| 220 | self.transform = get_transform(mean[name], std[name], crop_size, train) |
| 221 | |
| 222 | def get_data(self, svhn_extra=True): |
| 223 | """ |
| 224 | get_data returns data (images) and targets (labels) |
| 225 | shape of data: B, H, W, C |
| 226 | shape of labels: B, |
| 227 | """ |
| 228 | dset = getattr(torchvision.datasets, self.name.upper()) |
| 229 | if 'CIFAR' in self.name.upper(): |
| 230 | dset = dset(self.data_dir, train=self.train, download=True) |
| 231 | data, targets = dset.data, dset.targets |
| 232 | return data, targets |
| 233 | elif self.name.upper() == 'SVHN': |
| 234 | if self.train: |
| 235 | if svhn_extra: # train+extra |
| 236 | dset_base = dset(self.data_dir, split='train', download=True) |
| 237 | data_b, targets_b = dset_base.data.transpose([0, 2, 3, 1]), dset_base.labels |
| 238 | dset_extra = dset(self.data_dir, split='extra', download=True) |
| 239 | data_e, targets_e = dset_extra.data.transpose([0, 2, 3, 1]), dset_extra.labels |
| 240 | data = np.concatenate([data_b, data_e]) |
| 241 | targets = np.concatenate([targets_b, targets_e]) |
| 242 | del data_b, data_e |
| 243 | del targets_b, targets_e |
| 244 | else: # train_only |
| 245 | dset = dset(self.data_dir, split='train', download=True) |
| 246 | data, targets = dset.data.transpose([0, 2, 3, 1]), dset.labels |
| 247 | else: # test |
| 248 | dset = dset(self.data_dir, split='test', download=True) |
no outgoing calls
no test coverage detected