'Helper method which loads dataset and determines clipping range.
Args:
dataset_dir: location of the dataset.
epsilon: maximum allowed size of adversarial perturbation.'

def _load_dataset_clipping(self, dataset_dir, epsilon):

    self.dataset_max_clip = {}
    self.dataset_min_clip = {}
    self._dataset_image_count = 0
    for fname in os.listdir(dataset_dir):
        if (not fname.endswith('.png')):
            continue
        image_id = fname[:(-4)]
        image = np.array(Image.open(os.path.join(dataset_dir, fname)).convert('RGB'))
        image = image.astype('int32')
        self._dataset_image_count += 1
        self.dataset_max_clip[image_id] = np.clip((image + epsilon), 0, 255).astype('uint8')
        self.dataset_min_clip[image_id] = np.clip((image - epsilon), 0, 255).astype('uint8')
