示例#1
0
    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
示例#3
0
 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
示例#4
0
  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
示例#5
0
  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