def next_batch(self): """Return the next minibatch of augmented data.""" next_train_index = self.curr_train_index + self.hparams.batch_size if next_train_index > self.num_train: # Increase epoch number epoch = self.epochs + 1 self.reset() self.epochs = epoch batched_data = ( self.train_images[self.curr_train_index:self.curr_train_index + self.hparams.batch_size], self.train_labels[self.curr_train_index:self.curr_train_index + self.hparams.batch_size]) final_imgs = [] images, labels = batched_data for data in images: epoch_policy = self.good_policies[np.random.choice( len(self.good_policies))] final_img = augmentation_transforms.apply_policy( epoch_policy, data) final_img = augmentation_transforms.random_flip( augmentation_transforms.zero_pad_and_crop(final_img, 4)) # Apply cutout final_img = augmentation_transforms.cutout_numpy(final_img) final_imgs.append(final_img) batched_data = (np.array(final_imgs, np.float32), labels) self.curr_train_index += self.hparams.batch_size return batched_data
def func_autoaug(img, selected_policies): epoch_policy = selected_policies[np.random.choice(len(selected_policies))] img = np.array(img) img = AT.apply_policy(epoch_policy, img) img = np.array(img) img = AT.random_flip(AT.zero_pad_and_crop(img, 4)) img = AT.cutout_numpy(img) return img
def adv_random_batch(self): next_train_index = self.curr_train_index + self.batch_size if next_train_index > self.fooled_images.shape[0]: perm = np.arange(self.fooled_images.shape[0]) np.random.shuffle(perm) self.fooled_images = self.fooled_images[perm] self.fooled_labels = self.fooled_labels[perm] self.curr_train_index = 0 batch = (self.fooled_images[self.curr_train_index: self.curr_train_index + self.batch_size], \ self.fooled_labels[self.curr_train_index: self.curr_train_index + self.batch_size]) images, labels = batch final_imgs = [] for data in images: final_img = augmentation_transforms.random_flip( augmentation_transforms.zero_pad_and_crop(data, 4)) final_imgs.append(final_img) batched_data = (np.array(final_imgs, np.float32), labels) self.curr_train_index = self.curr_train_index + self.batch_size return batched_data
def random_batch(self): """Return the next minibatch of non-augmented data.""" next_train_index = self.curr_train_index + self.hparams.batch_size if next_train_index > self.num_train: # Increase epoch number epoch = self.epochs + 1 self.reset() self.epochs = epoch final_imgs = [] batched_data = ( self.train_images[self.curr_train_index: self.curr_train_index + self.hparams.batch_size], self.train_labels[self.curr_train_index: self.curr_train_index + self.hparams.batch_size]) images, labels = batched_data for data in images: final_img = augmentation_transforms.random_flip( augmentation_transforms.zero_pad_and_crop(data, 4)) final_imgs.append(final_img) batched_data = (np.array(final_imgs, np.float32), labels) self.curr_train_index += self.hparams.batch_size return batched_data
def next_batch(self): """Return the next minibatch of augmented data.""" next_train_index = self.curr_train_index + self.hparams.batch_size if next_train_index > self.num_train: # Increase epoch number epoch = self.epochs + 1 self.reset() self.epochs = epoch batched_data = ( self.train_images[self.curr_train_index:self.curr_train_index + self.hparams.batch_size], self.train_labels[self.curr_train_index:self.curr_train_index + self.hparams.batch_size]) final_imgs = [] images, labels = batched_data if self.hparams.augment_type == 'mixup': images, labels = augmentation_transforms.mixup_batch( images, labels, self.hparams.mixup_alpha) elif self.hparams.augment_type == 'image_freq': images, labels = augmentation_transforms.freq_augment( images, labels, amplitude=self.hparams.freq_augment_amplitude, magnitude=self.hparams.augmentation_magnitude, proportion_f=self.hparams.freq_augment_ffrac, probability=self.hparams.augmentation_probability) for data in images: if self.hparams.augment_type == 'autoaugment': epoch_policy = self.good_policies[np.random.choice( len(self.good_policies))] final_img = augmentation_transforms.apply_policy(epoch_policy, data) elif self.hparams.augment_type == 'random': epoch_policy = found_policies.random_policy( self.hparams.num_augmentation_layers, self.hparams.augmentation_magnitude, self.hparams.augmentation_probability) final_img = augmentation_transforms.apply_policy(epoch_policy, data) else: final_img = np.copy(data) if self.hparams.apply_flip_crop: final_img = augmentation_transforms.random_flip( augmentation_transforms.zero_pad_and_crop(data, 4)) # Apply cutout if self.hparams.apply_cutout: final_img = augmentation_transforms.cutout_numpy(final_img) final_imgs.append(final_img) final_imgs = np.array(final_imgs, np.float32) if self.hparams.noise_type == 'radial': labels = augmentation_transforms.add_radial_noise( final_imgs, labels, self.hparams.frequency, self.hparams.amplitude, self.hparams.noise_class, self.hparams.normalize_amplitude) elif self.hparams.noise_type == 'random' or self.hparams.noise_type == 'fourier' or self.hparams.noise_type == 'f' or self.hparams.noise_type == '1/f': labels = augmentation_transforms.add_sinusoidal_noise( final_imgs, labels, self.hparams.frequency, self.hparams.amplitude, self.direction, self.hparams.noise_class, self.hparams.normalize_amplitude) elif self.hparams.noise_type == 'uniform': labels = augmentation_transforms.add_uniform_noise( labels, self.hparams.amplitude, self.hparams.noise_class) batched_data = (final_imgs, labels) self.curr_train_index += self.hparams.batch_size return batched_data
def func_manual(self, img): img = np.array(img) img = AT.random_flip(AT.zero_pad_and_crop(img, 4)) img = AT.cutout_numpy(img) return img