예제 #1
0
    def randomDataAugument(self, num_trans):
        # 以下で定義する変換処理の内ランダムに幾つかの処理を選択
        seq = iaa.SomeOf(num_trans, [
            iaa.Affine(rotate=(-90, 90), order=1, mode="edge"),
            iaa.Fliplr(1.0),
            iaa.OneOf([
                # 同じ系統の変換はどれか1つが起きるように 1つにまとめる
                iaa.Affine(translate_percent={"x": (-0.125, 0.125)}, order=1, mode="edge"),
                iaa.Affine(translate_percent={"y": (-0.125, 0.125)}, order=1, mode="edge")
            ]),
            iaa.Affine(scale={"x": (0.8, 1.2), "y": (0.8, 1.2)}, order=1, mode="edge"),
            iaa.OneOf([
                iaa.AdditiveGaussianNoise(scale=[0.05 * 255, 0.2 * 255]),
                iaa.AdditiveLaplaceNoise(scale=[0.05 * 255, 0.2 * 255]),
                iaa.AdditivePoissonNoise(lam=(16.0, 48.0), per_channel=True)
            ]),
            iaa.OneOf([
                iaa.LogContrast((0.5, 1.5)),
                iaa.LinearContrast((0.5, 2.0))
            ]),
            iaa.OneOf([
                iaa.GaussianBlur(sigma=(0.5, 1.0)),
                iaa.Sharpen(alpha=(0, 1.0), lightness=(0.75, 1.5)),
                iaa.Emboss(alpha=(0, 1.0), strength=(0, 2.0))
            ]),
            iaa.Invert(1.0)
        ], random_order=True)

        return seq
예제 #2
0
def data_aug(images):

    seq = iaa.Sometimes(
        0.5, iaa.Identity(),
        iaa.Sometimes(
            0.5,
            iaa.Sequential([
                iaa.Sometimes(
                    0.5,
                    iaa.OneOf([
                        iaa.AdditiveGaussianNoise(scale=(0, 0.1 * 255)),
                        iaa.AdditiveLaplaceNoise(scale=(0, 0.1 * 255)),
                        iaa.ReplaceElementwise(0.03, [0, 255]),
                        iaa.GaussianBlur(sigma=(0.0, 3.0)),
                        iaa.BilateralBlur(d=(3, 10),
                                          sigma_color=(10, 250),
                                          sigma_space=(10, 250))
                    ])),
                iaa.OneOf([
                    iaa.Add((-40, 40)),
                    iaa.AddElementwise((-20, 20)),
                    iaa.pillike.EnhanceBrightness()
                ]),
                iaa.OneOf([
                    iaa.GammaContrast((0.2, 2.0)),
                    iaa.SigmoidContrast(gain=(3, 10), cutoff=(0.4, 0.6)),
                    iaa.LogContrast(gain=(0.6, 1.4)),
                    iaa.AllChannelsCLAHE(),
                    iaa.Sharpen(alpha=(0.0, 1.0), lightness=(0.75, 2.0)),
                ])
            ])))

    images = seq(images=images)

    return images
예제 #3
0
def imgaugRGB(img):

    print(img.shape)
    seq = iaa.Sequential(
        [
            # blur
            iaa.SomeOf((0, 2), [
                iaa.GaussianBlur((0.0, 2.0)),
                iaa.AverageBlur(k=(3, 7)),
                iaa.MedianBlur(k=(3, 7)),
                iaa.BilateralBlur(d=(1, 7)),
                iaa.MotionBlur(k=(3, 7))
            ]),
            #color
            iaa.SomeOf(
                (0, 2),
                [
                    #iaa.WithColorspace(),
                    iaa.AddToHueAndSaturation((-20, 20)),
                    #iaa.ChangeColorspace(to_colorspace[], alpha=0.5),
                    iaa.Grayscale(alpha=(0.0, 0.2))
                ]),
            #brightness
            iaa.OneOf([
                iaa.Sequential([
                    iaa.Add((-10, 10), per_channel=0.5),
                    iaa.Multiply((0.5, 1.5), per_channel=0.5)
                ]),
                iaa.Add((-10, 10), per_channel=0.5),
                iaa.Multiply((0.5, 1.5), per_channel=0.5),
                iaa.FrequencyNoiseAlpha(exponent=(-4, 0),
                                        first=iaa.Multiply(
                                            (0.5, 1.5), per_channel=0.5),
                                        second=iaa.ContrastNormalization(
                                            (0.5, 2.0), per_channel=0.5))
            ]),
            #contrast
            iaa.SomeOf((0, 2), [
                iaa.GammaContrast((0.5, 1.5), per_channel=0.5),
                iaa.SigmoidContrast(
                    gain=(0, 10), cutoff=(0.25, 0.75), per_channel=0.5),
                iaa.LogContrast(gain=(0.75, 1), per_channel=0.5),
                iaa.LinearContrast(alpha=(0.7, 1.3), per_channel=0.5)
            ]),
            #arithmetic
            iaa.SomeOf((0, 3), [
                iaa.AdditiveGaussianNoise(scale=(0, 0.05), per_channel=0.5),
                iaa.AdditiveLaplaceNoise(scale=(0, 0.05), per_channel=0.5),
                iaa.AdditivePoissonNoise(lam=(0, 8), per_channel=0.5),
                iaa.Dropout(p=(0, 0.05), per_channel=0.5),
                iaa.ImpulseNoise(p=(0, 0.05)),
                iaa.SaltAndPepper(p=(0, 0.05)),
                iaa.Salt(p=(0, 0.05)),
                iaa.Pepper(p=(0, 0.05))
            ]),
            #iaa.Sometimes(p=0.5, iaa.JpegCompression((0, 30)), None),
        ],
        random_order=True)
    return seq.augment_image(img)
예제 #4
0
def load_aug():

    sometimes = lambda aug: iaa.Sometimes(0.3, aug)

    seq[0] = iaa.Sequential(
        [
            # execute 0 to 5 of the following (less important) augmenters per image
            # don't execute all of them, as that would often be way too strong
            iaa.SomeOf(
                (0, 5),
                [
                    iaa.CropAndPad(percent=(-0.2, 0.2),
                                   pad_mode=ia.ALL,
                                   pad_cval=(0, 255)),
                    iaa.Crop(percent=0.25, keep_size=True),
                    iaa.OneOf([
                        iaa.GaussianBlur(
                            (0, 0.2
                             )),  # blur images with a sigma between 0 and 2.0
                        iaa.AverageBlur(k=(2,
                                           3)),  # blur image using local means
                        iaa.MedianBlur(
                            k=(1, 3)),  # blur image using local medians
                    ]),
                    iaa.Sharpen(alpha=(0, 0.5),
                                lightness=(0.75, 1.5)),  # sharpen images
                    iaa.Emboss(alpha=(0, 0.5),
                               strength=(0, 0.5)),  # emboss images
                    # search either for all edges or for directed edges,
                    iaa.AdditiveGaussianNoise(
                        loc=0, scale=(0.0, 0.05 * 255),
                        per_channel=0.5),  # add gaussian noise to images
                    iaa.Add(
                        (-10, 10), per_channel=0.5
                    ),  # change brightness of images (by -10 to 10 of original value)
                    iaa.AddToHueAndSaturation(
                        (-10, 10)),  # change hue and saturation
                    # either change the brightness of the whole image (sometimes
                    # per channel) or change the brightness of subareas
                    iaa.contrast.LinearContrast(
                        (0.5, 2.0),
                        per_channel=0.5),  # improve or worsen the contrast
                    iaa.Grayscale(alpha=(0.0, 0.5)),
                    iaa.AdditiveLaplaceNoise(scale=0.05 * 255),
                    iaa.AdditivePoissonNoise(lam=2),
                    iaa.Multiply(mul=(0.5, 1.5)),
                    iaa.Dropout(p=(0.1, 0.2)),
                    iaa.CoarseDropout(p=0.1, size_percent=0.05),
                    iaa.MotionBlur(k=3),
                    iaa.LinearContrast(),
                    iaa.AveragePooling(2)
                ],
                random_order=True)
        ],
        random_order=True)
예제 #5
0
파일: loader.py 프로젝트: ndcuong91/MC_OCR
    def __init__(self):
        sometimes = lambda aug: iaa.Sometimes(0.3, aug)

        self.aug = iaa.Sequential(
            iaa.SomeOf(
                (1, 5),
                [
                    # blur
                    sometimes(
                        iaa.OneOf([
                            iaa.GaussianBlur(sigma=(0, 1.0)),
                            iaa.MotionBlur(k=3),
                            iaa.AdditiveGaussianNoise(scale=(0, .1 * 255)),
                            iaa.AdditiveLaplaceNoise(scale=(0, .1 * 255))
                        ])),
                    # color
                    sometimes(
                        iaa.AddToHueAndSaturation(value=(-10, 10),
                                                  per_channel=True)),
                    sometimes(
                        iaa.SigmoidContrast(gain=(3, 10),
                                            cutoff=(0.4, 0.6),
                                            per_channel=True)),
                    sometimes(iaa.Invert(0.25, per_channel=0.5)),
                    sometimes(iaa.Solarize(0.5, threshold=(32, 128))),
                    sometimes(iaa.Dropout2d(p=0.5)),
                    sometimes(iaa.Multiply((0.5, 1.5), per_channel=0.5)),
                    sometimes(iaa.Add((-40, 40), per_channel=0.5)),
                    sometimes(iaa.JpegCompression(compression=(5, 80))),

                    # distort
                    sometimes(
                        iaa.Crop(percent=(0.01, 0.05),
                                 sample_independently=True)),
                    sometimes(iaa.PerspectiveTransform(scale=(0.01, 0.01))),
                    sometimes(
                        iaa.Affine(
                            scale=(0.7, 1.3),
                            translate_percent=(-0.1, 0.1),
                            #                            rotate=(-5, 5), shear=(-5, 5),
                            order=[0, 1],
                            cval=(0, 255),
                            mode=ia.ALL)),
                    sometimes(iaa.ElasticTransformation(alpha=50, sigma=20)),
                    sometimes(iaa.PiecewiseAffine(scale=(0.01, 0.02))),
                    sometimes(iaa.PiecewiseAffine(scale=(0.01, 0.01))),
                    sometimes(
                        iaa.OneOf([
                            iaa.Dropout(p=(0, 0.1)),
                            iaa.CoarseDropout(p=(0, 0.1),
                                              size_percent=(0.02, 0.25))
                        ])),
                ],
                random_order=True),
            random_order=True)
예제 #6
0
 def __call__(self, data):
     tensor = data[self.type].astype(np.float32)
     tensor = tensor[:, :, np.newaxis]
     additive_guasian = iaa.AdditiveGaussianNoise(
         scale=(0.01, 0.04)).augment_image
     additive_laplacian = iaa.AdditiveLaplaceNoise(
         scale=(0.01, 0.04)).augment_image
     dropout = iaa.Dropout(p=(0.0, 0.1)).augment_image
     random_blur = transforms.RandomChoice(
         [additive_guasian, additive_laplacian, dropout])
     data[self.type] = random_blur(tensor).squeeze(2)
     return data
예제 #7
0
    def __init__(self, ):
        import imgaug.augmenters as ia
        self.default_deg_templates = {
            'sr4x':
            ia.Sequential([
                # It's almost like a 4x bicubic downsampling
                ia.Resize((0.25000, 0.25001), cv2.INTER_AREA),
                ia.Resize({
                    'height': 512,
                    'width': 512
                }, cv2.INTER_CUBIC),
            ]),
            'sr4x8x':
            ia.Sequential([
                ia.Resize((0.125, 0.25), cv2.INTER_AREA),
                ia.Resize({
                    'height': 512,
                    'width': 512
                }, cv2.INTER_CUBIC),
            ]),
            'denoise':
            ia.OneOf([
                ia.AdditiveGaussianNoise(scale=(20, 40), per_channel=True),
                ia.AdditiveLaplaceNoise(scale=(20, 40), per_channel=True),
                ia.AdditivePoissonNoise(lam=(15, 30), per_channel=True),
            ]),
            'deblur':
            ia.OneOf([
                ia.MotionBlur(k=(10, 20)),
                ia.GaussianBlur((3.0, 8.0)),
            ]),
            'jpeg':
            ia.JpegCompression(compression=(50, 85)),
            '16x':
            Mosaic16x(),
        }

        rand_deg_list = [
            self.default_deg_templates['deblur'],
            self.default_deg_templates['denoise'],
            self.default_deg_templates['jpeg'],
            self.default_deg_templates['sr4x8x'],
        ]
        self.default_deg_templates['face_renov'] = ia.Sequential(
            rand_deg_list, random_order=True)
예제 #8
0
def do_all_aug(image):
    do_aug(image, iaa.Noop(name="origin"))
    do_aug(image, iaa.Crop((0, 10)))  # 切边
    do_aug(image, iaa.GaussianBlur((0, 3)))
    do_aug(image, iaa.AverageBlur(1, 7))
    do_aug(image, iaa.MedianBlur(1, 7))
    do_aug(image, iaa.Sharpen())
    do_aug(image, iaa.BilateralBlur())  # 既噪音又模糊,叫双边
    do_aug(image, iaa.MotionBlur())
    do_aug(image, iaa.MeanShiftBlur())
    do_aug(image, iaa.GammaContrast())
    do_aug(image, iaa.SigmoidContrast())
    do_aug(image,
           iaa.Affine(shear={
               'x': (-10, 10),
               'y': (-10, 10)
           }, mode="edge"))  # shear:x轴往左右偏离的像素书,(a,b)是a,b间随机值,[a,b]是二选一
    do_aug(image,
           iaa.Affine(shear={
               'x': (-10, 10),
               'y': (-10, 10)
           }, mode="edge"))  # shear:x轴往左右偏离的像素书,(a,b)是a,b间随机值,[a,b]是二选一
    do_aug(image, iaa.Rotate(rotate=(-10, 10), mode="edge"))
    do_aug(image, iaa.PiecewiseAffine())  # 局部点变形
    do_aug(image, iaa.Fog())
    do_aug(image, iaa.Clouds())
    do_aug(image, iaa.Snowflakes(flake_size=(0.1, 0.2),
                                 density=(0.005, 0.025)))
    do_aug(
        image,
        iaa.Rain(
            nb_iterations=1,
            drop_size=(0.05, 0.1),
            speed=(0.04, 0.08),
        ))
    do_aug(
        image,
        iaa.ElasticTransformation(alpha=(0.0, 20.0),
                                  sigma=(3.0, 5.0),
                                  mode="nearest"))
    do_aug(image, iaa.AdditiveGaussianNoise(scale=(0, 10)))
    do_aug(image, iaa.AdditiveLaplaceNoise(scale=(0, 10)))
    do_aug(image, iaa.AdditivePoissonNoise(lam=(0, 10)))
    do_aug(image, iaa.Salt((0, 0.02)))
    do_aug(image, iaa.Pepper((0, 0.02)))
예제 #9
0
    def randomTestAugument(self, NUM_TRANS):
        # 本番環境の危機から取得したデータにノイズが乗っていた状態を想定して変換
        seq = iaa.SomeOf(
            NUM_TRANS,
            [
                iaa.Affine(rotate=(-90, 90), order=1, mode="edge"),
                iaa.Fliplr(1.0),
                iaa.OneOf([
                    # 同じ系統の変換はどれか1つが起きるように 1つにまとめる
                    iaa.Affine(translate_percent={"x": (-0.125, 0.125)},
                               order=1,
                               mode="edge"),
                    iaa.Affine(translate_percent={"y": (-0.125, 0.125)},
                               order=1,
                               mode="edge")
                ]),
                iaa.Affine(scale={
                    "x": (0.8, 1.2),
                    "y": (0.8, 1.2)
                },
                           order=1,
                           mode="edge"),
                iaa.OneOf([
                    iaa.AdditiveGaussianNoise(scale=[0.05 * 255, 0.2 * 255]),
                    iaa.AdditiveLaplaceNoise(scale=[0.05 * 255, 0.2 * 255]),
                    iaa.AdditivePoissonNoise(lam=(16.0, 48.0),
                                             per_channel=True)
                ]),
                iaa.OneOf([
                    iaa.LogContrast((0.5, 1.5)),
                    iaa.LinearContrast((0.5, 2.0))
                ]),
                iaa.OneOf([
                    iaa.GaussianBlur(sigma=(0.5, 1.0)),
                    iaa.Sharpen(alpha=(0, 1.0), lightness=(0.75, 1.5)),
                    iaa.Emboss(alpha=(0, 1.0), strength=(0, 2.0))
                ]),
                # iaa.Invert(1.0)  # 色反転は故障しすぎでしょう..
            ],
            random_order=True)

        return seq
예제 #10
0
def get_augmenter():
    sometimes = lambda aug: iaa.Sometimes(0.7, aug)
    augmenter = iaa.Sequential([
        sometimes(
            iaa.OneOf([
                iaa.GaussianBlur((0.8, 1.2)),
                iaa.AdditiveGaussianNoise(
                    loc=0, scale=(0.0, 0.05 * 255), per_channel=0.5),
                iaa.AveragePooling([2, 2]),
                iaa.Sharpen(alpha=(0.0, 0.5), lightness=(0.75, 2.0)),
                iaa.AdditiveLaplaceNoise(scale=0.05 * 255, per_channel=True),
                iaa.LinearContrast((0.5, 2.0), per_channel=True),
                iaa.Clouds(),
                iaa.Fog(),
                iaa.PiecewiseAffine(scale=0.02),
                iaa.Affine(scale={
                    "x": (0.8, 1),
                    "y": (0.8, 1)
                },
                           translate_percent={
                               "x": (-0.1, 0.1),
                               "y": (-0.1, 0.1)
                           },
                           rotate=(-10, 10),
                           shear=(-5, 5),
                           order=[0, 1],
                           cval=(0, 255),
                           mode='constant'),
            ])),
        sometimes(
            iaa.OneOf([
                iaa.Crop(px=(2, 6)),
                iaa.CoarseDropout((0.0, 0.01), size_percent=(0.02, 0.1)),
            ])),
        sometimes(iaa.PerspectiveTransform(scale=(0.01, 0.08),
                                           keep_size=False))
    ],
                               random_order=True)

    return augmenter
    def __init__(self, train_list, test_list, database_root, store_memory=True, data_aug=False, new_aug=False):
        """Initialize the Dataset object
        Args:
        train_list: TXT file or list with the paths of the images to use for training (Images must be between 0 and 255)
        test_list: TXT file or list with the paths of the images to use for testing (Images must be between 0 and 255)
        database_root: Path to the root of the Database
        store_memory: True stores all the training images, False loads at runtime the images
        Returns:
        """
        if not store_memory and data_aug:
            sys.stderr.write('Online data augmentation not supported when the data is not stored in memory!')
            sys.exit()
        # Define types of data augmentation
        data_aug_scales = [0.5, 0.8, 1]
        data_aug_flip = True
        
        #checking aug bool value
        print('new augmentation value is : ')
        print(new_aug)
        
        
        if(new_aug):
            #extra augmentation
            data_aug_brightness = True
            data_aug_addnoise = False
        else:
            data_aug_brightness = False
            data_aug_addnoise = False

        # Load training images (path) and labels
        print('Started loading files...')
        if not isinstance(train_list, list) and train_list is not None:
            with open(train_list) as t:
                train_paths = t.readlines()
        elif isinstance(train_list, list):
            train_paths = train_list
        else:
            train_paths = []
        if not isinstance(test_list, list) and test_list is not None:
            with open(test_list) as t:
                test_paths = t.readlines()
        elif isinstance(test_list, list):
            test_paths = test_list
        else:
            test_paths = []
        self.images_train = []
        self.images_train_path = []
        self.labels_train = []
        self.labels_train_path = []
        for idx, line in enumerate(train_paths):
            if store_memory:
                img = Image.open(os.path.join(database_root, str(line.split()[0])))
                img.load()
                label = Image.open(os.path.join(database_root, str(line.split()[1])))
                label.load()
                label = label.split()[0]
                j = 0   
                if data_aug:
                    if idx == 0: sys.stdout.write('Performing the data augmentation')
                    for scale in data_aug_scales:
                        img_size = tuple([int(img.size[0] * scale), int(img.size[1] * scale)])
                        img_sc = img.resize(img_size)
                        label_sc = label.resize(img_size)
                        self.images_train.append(np.array(img_sc, dtype=np.uint8))
                        self.labels_train.append(np.array(label_sc, dtype=np.uint8))
                        if(data_aug_addnoise):
                            im_lap_noise = img_to_array(img_sc)
                            seq = iaa.Sequential([iaa.AdditiveLaplaceNoise(scale=0.9*255)]) #scale was 11 before
                            image_noise_np = seq.augment_image(im_lap_noise).astype('uint8')
                            # im_lap_noise_sq = Image.fromarray(seq.augment_image(im_lap_noise))
                            # im_lap_noise_sq.save('./aug_image/test_save/aug-im-noise' + str(j), "JPEG")
                            self.images_train.append(np.array(image_noise_np, dtype=np.uint8))
                            self.labels_train.append(np.array(label_sc, dtype=np.uint8))
                           
                        if data_aug_flip:
                            img_sc_fl = img_sc.transpose(Image.FLIP_LEFT_RIGHT)
                            label_sc_fl = label_sc.transpose(Image.FLIP_LEFT_RIGHT)
                            self.images_train.append(np.array(img_sc_fl, dtype=np.uint8))
                            self.labels_train.append(np.array(label_sc_fl, dtype=np.uint8))
                        if data_aug_brightness:   
                            data_img = img_to_array(img_sc)
                            br_samples = np.expand_dims(data_img, 0)
                            datagen = ImageDataGenerator(brightness_range=[0.2,1.7])
                            it = datagen.flow(br_samples, batch_size=1)
                            for i in range(9):
                                batch = it.next()
                                image_np = batch[0].astype('uint8')
                                aug_im = Image.fromarray(image_np)
                                aug_im.save('./aug_image/test_save/aug-im-' + str(j), "JPEG")
                                self.images_train.append(np.array(image_np, dtype=np.uint8))
                                self.labels_train.append(np.array(label_sc, dtype=np.uint8))
                                j = j+1
                    
                else:
                    if idx == 0: sys.stdout.write('Loading the data')
                    self.images_train.append(np.array(img, dtype=np.uint8))
                    self.labels_train.append(np.array(label, dtype=np.uint8))
                if (idx + 1) % 50 == 0:
                    sys.stdout.write('.')
            self.images_train_path.append(os.path.join(database_root, str(line.split()[0])))
            self.labels_train_path.append(os.path.join(database_root, str(line.split()[1])))
        sys.stdout.write('\n')
        self.images_train_path = np.array(self.images_train_path)
        self.labels_train_path = np.array(self.labels_train_path)

        # Load testing images (path) and labels
        self.images_test = []
        self.images_test_path = []
        for idx, line in enumerate(test_paths):
            if store_memory:
                self.images_test.append(np.array(Image.open(os.path.join(database_root, str(line.split()[0]))),
                                                 dtype=np.uint8))
                if (idx + 1) % 1000 == 0:
                    print('Loaded ' + str(idx) + ' test images')
            self.images_test_path.append(os.path.join(database_root, str(line.split()[0])))
        print('Done initializing Dataset')

        # Init parameters
        self.train_ptr = 0
        self.test_ptr = 0
        self.train_size = max(len(self.images_train_path), len(self.images_train))
        self.test_size = len(self.images_test_path)
        self.train_idx = np.arange(self.train_size)
        np.random.shuffle(self.train_idx)
        self.store_memory = store_memory
예제 #12
0
    def imgaug_augment(self,
                       TARGET_DIR,
                       INPUT_SIZE,
                       NORMALIZE=False,
                       AUGMENTATION='native'):

        data, label = self.img2array(TARGET_DIR, INPUT_SIZE, NORMALIZE)

        if AUGMENTATION == 'native':
            return data, label
        elif AUGMENTATION == 'rotation':
            imgaug_aug = iaa.Affine(rotate=(-90, 90), order=1,
                                    mode="edge")  # 90度 "まで" 回転
        elif AUGMENTATION == 'hflip':
            imgaug_aug = iaa.Fliplr(1.0)  # 左右反転
        elif AUGMENTATION == 'width_shift':
            imgaug_aug = iaa.Affine(translate_percent={"x": (-0.125, 0.125)},
                                    order=1,
                                    mode="edge")  # 1/8 平行移動(左右)
        elif AUGMENTATION == 'height_shift':
            imgaug_aug = iaa.Affine(translate_percent={"y": (-0.125, 0.125)},
                                    order=1,
                                    mode="edge")  # 1/8 平行移動(上下)
            # imgaug_aug = iaa.Crop(px=(0, 40))  <= 平行移動ではなく、切り抜き
        elif AUGMENTATION == 'zoom':
            imgaug_aug = iaa.Affine(scale={
                "x": (0.8, 1.2),
                "y": (0.8, 1.2)
            },
                                    order=1,
                                    mode="edge")  # 80~120% ズーム
            # これも keras と仕様が違って、縦横独立に拡大・縮小されるようである。
        elif AUGMENTATION == 'logcon':
            imgaug_aug = iaa.LogContrast((0.5, 1.5))
        elif AUGMENTATION == 'linecon':
            imgaug_aug = iaa.LinearContrast((0.5, 2.0))  # 明度変換
        elif AUGMENTATION == 'gnoise':
            imgaug_aug = iaa.AdditiveGaussianNoise(
                scale=[0.05 * 255, 0.2 * 255])  # Gaussian Noise
        elif AUGMENTATION == 'lnoise':
            imgaug_aug = iaa.AdditiveLaplaceNoise(
                scale=[0.05 * 255, 0.2 * 255])  # LaplaceNoise
        elif AUGMENTATION == 'pnoise':
            imgaug_aug = iaa.AdditivePoissonNoise(
                lam=(16.0, 48.0), per_channel=True)  # PoissonNoise
        elif AUGMENTATION == 'flatten':
            imgaug_aug = iaa.GaussianBlur(sigma=(0.5, 1.0))  # blur: ぼかし (平滑化)
        elif AUGMENTATION == 'sharpen':
            imgaug_aug = iaa.Sharpen(alpha=(0, 1.0),
                                     lightness=(0.75,
                                                1.5))  # sharpen images (鮮鋭化)
        elif AUGMENTATION == 'emboss':
            imgaug_aug = iaa.Emboss(alpha=(0, 1.0),
                                    strength=(0, 2.0))  # Edge 強調
        elif AUGMENTATION == 'invert':
            imgaug_aug = iaa.Invert(1.0)  # 色反転 <= これがうまく行かないので自分で作った。
        elif AUGMENTATION == 'someof':  # 上記のうちのどれか1つ
            imgaug_aug = iaa.SomeOf(
                1,
                [
                    iaa.Affine(rotate=(-90, 90), order=1, mode="edge"),
                    iaa.Fliplr(1.0),
                    iaa.Affine(translate_percent={"x": (-0.125, 0.125)},
                               order=1,
                               mode="edge"),
                    iaa.Affine(translate_percent={"y": (-0.125, 0.125)},
                               order=1,
                               mode="edge"),
                    iaa.Affine(scale={
                        "x": (0.8, 1.2),
                        "y": (0.8, 1.2)
                    },
                               order=1,
                               mode="edge"),
                    iaa.LogContrast((0.5, 1.5)),
                    iaa.LinearContrast((0.5, 2.0)),
                    iaa.AdditiveGaussianNoise(scale=[0.05 * 255, 0.25 * 255]),
                    iaa.AdditiveLaplaceNoise(scale=[0.05 * 255, 0.25 * 255]),
                    iaa.AdditivePoissonNoise(lam=(16.0, 48.0),
                                             per_channel=True),
                    iaa.GaussianBlur(sigma=(0.5, 1.0)),
                    iaa.Sharpen(alpha=(0, 1.0), lightness=(0.75, 1.5)),
                    iaa.Emboss(alpha=(0, 1.0), strength=(0, 2.0)),
                    iaa.Invert(1.0)  # 14
                ])
        elif AUGMENTATION == 'plural':  # 異なる系統の変換を複数(1つの変換あとに画素値がマイナスになるとError..)
            imgaug_aug = self.randomDataAugument(2)
        elif AUGMENTATION == 'fortest':  # plural - invert (色反転) (test 用)
            imgaug_aug = self.randomTestAugument(2)
        else:
            print("現在 imgaug で選択できる DA のモードは以下の通りです。")
            print(self.imgaug_aug_list, "\n")
            raise ValueError("予期されないモードが選択されています。")

        aug_data = imgaug_aug.augment_images(data)
        aug_data = np.clip(aug_data, 0, 255)

        return aug_data, label
예제 #13
0
    # Blur and Noise
    iaa.Sometimes(
        0.2,
        iaa.SomeOf((1, None), [
            iaa.OneOf([
                iaa.MotionBlur(k=3, name="motion-blur"),
                iaa.GaussianBlur(sigma=(0.5, 1.0), name="gaus-blur")
            ]),
            iaa.OneOf([
                iaa.AddElementwise(
                    (-5, 5), per_channel=0.5, name="add-element"),
                iaa.MultiplyElementwise(
                    (0.95, 1.05), per_channel=0.5, name="mul-element"),
                iaa.AdditiveGaussianNoise(
                    scale=0.01 * 255, per_channel=0.5, name="guas-noise"),
                iaa.AdditiveLaplaceNoise(
                    scale=(0, 0.01 * 255), per_channel=True, name="lap-noise"),
                iaa.Sometimes(
                    1.0,
                    iaa.Dropout(
                        p=(0.003, 0.01), per_channel=0.5, name="dropout")),
            ]),
        ],
                   random_order=True)),

    # Colored Blocks
    iaa.Sometimes(
        0.2,
        iaa.CoarseDropout(0.02,
                          size_px=(4, 16),
                          per_channel=0.5,
                          name="cdropout")),
예제 #14
0
    def imgaug_augment(self, target_dir='default', mode='native'):

        if target_dir == 'default':
            data, label = self.npzLoader(self.train_file)
        else:
            data, label = self.getStackedData(target_dir=target_dir)


        if mode == 'native':
            return data, label
        elif mode == 'rotation':
            imgaug_aug = iaa.Affine(rotate=(-90, 90), order=1, mode="edge")  # 90度回転
            # keras と仕様が異なることに注意
            #   keras は変化量 / imgaug は 変化の最大角を指定している
            #   開いた部分の穴埋めができない..?? mode="edge" にするとそれなり..
        elif mode == 'hflip':
            imgaug_aug = iaa.Fliplr(1.0)  # 左右反転
        elif mode == 'width_shift':
            imgaug_aug = iaa.Affine(translate_percent={"x": (-0.125, 0.125)}, order=1, mode="edge")  # 1/8 平行移動(左右)
        elif mode == 'height_shift':
            imgaug_aug = iaa.Affine(translate_percent={"y": (-0.125, 0.125)}, order=1, mode="edge")  # 1/8 平行移動(上下)
            # imgaug_aug = iaa.Crop(px=(0, 40))  <= 平行移動ではなく、切り抜き
        elif mode == 'zoom':
            imgaug_aug = iaa.Affine(scale={"x": (0.8, 1.2), "y": (0.8, 1.2)}, order=1, mode="edge")  # 80~120% ズーム
            # これも keras と仕様が違って、縦横独立に拡大・縮小されるようである。
        elif mode == 'logcon':
            imgaug_aug = iaa.LogContrast(gain=(5, 15))
        elif mode == 'linecon':
            imgaug_aug = iaa.LinearContrast((0.5, 2.0))  # 明度変換
        elif mode == 'gnoise':
            imgaug_aug = iaa.AdditiveGaussianNoise(scale=[0.05*255, 0.2*255])  # Gaussian Noise
        elif mode == 'lnoise':
            imgaug_aug = iaa.AdditiveLaplaceNoise(scale=[0.05*255, 0.2*255])  # LaplaceNoise
        elif mode == 'pnoise':
            imgaug_aug = iaa.AdditivePoissonNoise(lam=(16.0, 48.0), per_channel=True)  # PoissonNoise
        elif mode == 'flatten':
            imgaug_aug = iaa.GaussianBlur(sigma=(0.5, 1.0))  # blur: ぼかし (平滑化)
        elif mode == 'sharpen':
            imgaug_aug = iaa.Sharpen(alpha=(0, 1.0), lightness=(0.75, 1.5)) # sharpen images (鮮鋭化)
        elif mode == 'emboss':
            imgaug_aug = iaa.Emboss(alpha=(0, 1.0), strength=(0, 2.0))  # Edge 強調
        elif mode == 'invert':
            #imgaug_aug = iaa.Invert(1.0)  # 色反転 <= これがうまく行かないので自分で作った。
            aug_data = []
            for b in range(data.shape[0]):
                aug_data.append(255-data[b])
            return np.array(aug_data), label
        elif mode == 'someof':  # 上記のうちのどれか1つ
            imgaug_aug = iaa.SomeOf(1, [
                iaa.Affine(rotate=(-90, 90), order=1, mode="edge"),
                iaa.Fliplr(1.0),
                iaa.Affine(translate_percent={"x": (-0.125, 0.125)}, order=1, mode="edge"),
                iaa.Affine(translate_percent={"y": (-0.125, 0.125)}, order=1, mode="edge"),
                iaa.Affine(scale={"x": (0.8, 1.2), "y": (0.8, 1.2)}, order=1, mode="edge"),
                iaa.LogContrast((0.5, 1.5)),
                iaa.LinearContrast((0.5, 2.0)),
                iaa.AdditiveGaussianNoise(scale=[0.05*255, 0.25*255]),
                iaa.AdditiveLaplaceNoise(scale=[0.05*255, 0.25*255]),
                iaa.AdditivePoissonNoise(lam=(16.0, 48.0), per_channel=True),
                iaa.GaussianBlur(sigma=(0.5, 1.0)),
                iaa.Sharpen(alpha=(0, 1.0), lightness=(0.75, 1.5)),
                iaa.Emboss(alpha=(0, 1.0), strength=(0, 2.0)),
                iaa.Invert(1.0)  # 14
            ])
        #elif mode == 'plural':  # 異なる系統の変換を複数(1つの変換あとに画素値がマイナスになるとError..)
        #    imgaug_aug = self.randomDataAugument(2)
        else:
            print("現在 imgaug で選択できる DA のモードは以下の通りです。")
            print(self.imgaug_mode_list, "\n")
            raise ValueError("予期されないモードが選択されています。")

        aug_data = imgaug_aug.augment_images(data)
        aug_data = np.clip(aug_data, 0, 255)

        # 注意: 戻り値の範囲は [0, 255] です。
        return aug_data, label
예제 #15
0
# # aug58  = iaa.DirectedEdgeDetect(alpha=(0.0, 0.5), direction=(0.0, 0.5))
# # aug59 = iaa.Canny(
# #     alpha=(0.0, 0.1),
# #     colorizer=iaa.RandomColorsBinaryImageColorizer(
# #         color_true=255,
# #         color_false=0
# #     )
# # )

scale=(0, 20)
aug1 = iaa.Add((-20, 20))
aug2 = iaa.AddElementwise((-20, 20), per_channel=0.5)
aug3 = aug = iaa.Sharpen(alpha=(0.0, 1.0), lightness=(0.75, 2.0))

aug4 = iaa.AdditiveLaplaceNoise(scale=(0, 0.2*255))
aug5 = iaa.AdditivePoissonNoise(scale)
aug6 = iaa.Multiply((0.5, 1.5), per_channel=0.5)
aug7 = iaa.Cutout(nb_iterations=2, size=0.05)

aug8 = iaa.Cutout(fill_mode="constant", size=0.05, cval=255)

aug9 = iaa.Cutout(fill_mode="gaussian", fill_per_channel=True, size=0.05)
aug10 = iaa.Dropout(p=(0, 0.05))
aug11 = iaa.CoarseDropout((0.0, 0.05), size_percent=(0.02, 0.2))
aug12 = iaa.Dropout2d(p=0.05, nb_keep_channels=0)
aug13 = iaa.ImpulseNoise(0.1)
aug14 = iaa.CoarseSaltAndPepper(0.05, size_percent=(0.01, 0.6))
aug15 = iaa.CoarsePepper(0.05, size_percent=(0.01, 0.2))
# aug16 = iaa.Invert(0.25, per_channel=0.4)
# aug17 = iaa.Invert(0.1)