Пример #1
0
    def __im_preproc(self, image: np.ndarray) -> np.ndarray:
        image = cv2.resize(image, tuple(self.im_shape))
        blur = Blur(p=0.9, blur_limit=7)
        hsv = HueSaturationValue(p=0.9)
        crop = RandomCrop(p=1, height=self.im_shape[1], width=self.im_shape[0])

        image = blur.apply(image, **blur.get_params())
        image = hsv.apply(image, **hsv.get_params())
        image = crop.apply(image, **crop.get_params())
        if self.grayscale:
            image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
        return image[:, :, np.newaxis]
Пример #2
0
    def get_data_transforms(self):
        cfg = self.cfg
        bbox_params = self.get_bbox_params()
        transform = Compose([Resize(cfg.data.img_sz, cfg.data.img_sz)],
                            bbox_params=bbox_params)

        augmentors_dict = {
            'Blur': Blur(),
            'RandomRotate90': RandomRotate90(),
            'HorizontalFlip': HorizontalFlip(),
            'VerticalFlip': VerticalFlip(),
            'GaussianBlur': GaussianBlur(),
            'GaussNoise': GaussNoise(),
            'RGBShift': RGBShift(),
            'ToGray': ToGray()
        }
        aug_transforms = []
        for augmentor in cfg.data.augmentors:
            try:
                aug_transforms.append(augmentors_dict[augmentor])
            except KeyError as e:
                log.warning(
                    '{0} is an unknown augmentor. Continuing without {0}. \
                    Known augmentors are: {1}'.format(
                        e, list(augmentors_dict.keys())))
        aug_transforms.append(Resize(cfg.data.img_sz, cfg.data.img_sz))
        aug_transform = Compose(aug_transforms, bbox_params=bbox_params)

        return transform, aug_transform
Пример #3
0
    def get_data_transforms(self) -> Tuple[BasicTransform, BasicTransform]:
        """Get albumentations transform objects for data augmentation.

        Returns:
           1st tuple arg: a transform that doesn't do any data augmentation
           2nd tuple arg: a transform with data augmentation
        """
        cfg = self.cfg
        bbox_params = self.get_bbox_params()
        transform = Compose([Resize(cfg.data.img_sz, cfg.data.img_sz)],
                            bbox_params=bbox_params)

        augmentors_dict = {
            'Blur': Blur(),
            'RandomRotate90': RandomRotate90(),
            'HorizontalFlip': HorizontalFlip(),
            'VerticalFlip': VerticalFlip(),
            'GaussianBlur': GaussianBlur(),
            'GaussNoise': GaussNoise(),
            'RGBShift': RGBShift(),
            'ToGray': ToGray()
        }
        aug_transforms = []
        for augmentor in cfg.data.augmentors:
            try:
                aug_transforms.append(augmentors_dict[augmentor])
            except KeyError as e:
                log.warning(
                    '{0} is an unknown augmentor. Continuing without {0}. \
                    Known augmentors are: {1}'.format(
                        e, list(augmentors_dict.keys())))
        aug_transforms.append(Resize(cfg.data.img_sz, cfg.data.img_sz))
        aug_transform = Compose(aug_transforms, bbox_params=bbox_params)

        return transform, aug_transform
Пример #4
0
def oneof_always_apply_crash():
    aug = Compose(
        [HorizontalFlip(),
         Rotate(),
         OneOf([Blur(), MedianBlur()], p=1)], p=1)
    image = np.ones((8, 8))
    data = aug(image=image)
    assert data
Пример #5
0
def test_deterministic_one_or_other():
    aug = ReplayCompose([OneOrOther(HorizontalFlip(), Blur())], p=1)
    for i in range(10):
        image = (np.random.random((8, 8)) * 255).astype(np.uint8)
        image2 = np.copy(image)
        data = aug(image=image)
        assert "replay" in data
        data2 = ReplayCompose.replay(data["replay"], image=image2)
        assert np.array_equal(data["image"], data2["image"])
Пример #6
0
def build_databunch(data_dir, img_sz, batch_sz, class_names, augmentors):
    num_workers = 4

    train_dir = join(data_dir, 'train')
    valid_dir = join(data_dir, 'valid')

    augmentors_dict = {
        'Blur': Blur(),
        'RandomRotate90': RandomRotate90(),
        'HorizontalFlip': HorizontalFlip(),
        'VerticalFlip': VerticalFlip(),
        'GaussianBlur': GaussianBlur(),
        'GaussNoise': GaussNoise(),
        'RGBShift': RGBShift(),
        'ToGray': ToGray()
    }

    aug_transforms = []
    for augmentor in augmentors:
        try:
            aug_transforms.append(augmentors_dict[augmentor])
        except KeyError as e:
            log.warning('{0} is an unknown augmentor. Continuing without {0}. \
                Known augmentors are: {1}'.format(e,
                                                  list(
                                                      augmentors_dict.keys())))
    aug_transforms = Compose(aug_transforms)

    train_ds = AlbumentationDataset(ImageFolder(train_dir,
                                                classes=class_names),
                                    transform=aug_transforms)
    valid_ds = AlbumentationDataset(ImageFolder(valid_dir,
                                                classes=class_names))

    train_dl = DataLoader(train_ds,
                          shuffle=True,
                          batch_size=batch_sz,
                          num_workers=num_workers,
                          drop_last=True,
                          pin_memory=True)
    valid_dl = DataLoader(valid_ds,
                          batch_size=batch_sz,
                          num_workers=num_workers,
                          pin_memory=True)

    return DataBunch(train_ds, train_dl, valid_ds, valid_dl, class_names)
Пример #7
0
def get_transform():
    transforms = A.Compose(
        [
            #HorizontalFlip(p=0.5),
            #VerticalFlip(p=0.5),
            #RandomSizedBBoxSafeCrop(700, 700, erosion_rate=0.0, interpolation=1, always_apply=False, p=0.5),
            Blur(blur_limit=7, always_apply=False, p=0.5),
            RandomBrightness(limit=0.2, always_apply=False, p=0.5),
            #Downscale(scale_min=0.5, scale_max=0.9, interpolation=0, always_apply=False, p=0.5),
            #PadIfNeeded(min_height=1024, min_width=1024, pad_height_divisor=None, pad_width_divisor=None, border_mode=4, value=None, mask_value=None, always_apply=False, p=1.0),
            #RandomFog(fog_coef_lower=0.3, fog_coef_upper=1, alpha_coef=0.08, always_apply=False, p=0.2),
            #RandomRain(slant_lower=-10, slant_upper=10, drop_length=20, drop_width=1, drop_color=(200, 200, 200), p=0.2),
            #RandomSnow(snow_point_lower=0.1, snow_point_upper=0.3, brightness_coeff=2.5, always_apply=False, p=0.2)
        ],
        bbox_params=A.BboxParams(format='pascal_voc',
                                 label_fields=['bbox_classes']))
    return transforms
Пример #8
0
def test_per_channel_multi():
    transforms = [Blur(), Rotate()]
    augmentation = PerChannel(transforms, p=1)
    image = np.ones((8, 8, 5))
    data = augmentation(image=image)
    assert data
Пример #9
0
def build_databunch(data_dir, img_sz, batch_sz, class_names, rare_classes,
                    desired_prob, augmentors):
    num_workers = 4

    train_dir = join(data_dir, 'train')
    valid_dir = join(data_dir, 'valid')

    augmentors_dict = {
        'Blur': Blur(),
        'RandomRotate90': RandomRotate90(),
        'HorizontalFlip': HorizontalFlip(),
        'VerticalFlip': VerticalFlip(),
        'GaussianBlur': GaussianBlur(),
        'GaussNoise': GaussNoise(),
        'RGBShift': RGBShift(),
        'ToGray': ToGray()
    }

    aug_transforms = []
    for augmentor in augmentors:
        try:
            aug_transforms.append(augmentors_dict[augmentor])
        except KeyError as e:
            log.warning('{0} is an unknown augmentor. Continuing without {0}. \
                Known augmentors are: {1}'.format(e,
                                                  list(
                                                      augmentors_dict.keys())))
    aug_transforms = Compose(aug_transforms)

    train_ds = AlbumentationDataset(ImageFolder(train_dir,
                                                classes=class_names),
                                    transform=aug_transforms)
    valid_ds = AlbumentationDataset(ImageFolder(valid_dir,
                                                classes=class_names))

    if rare_classes != []:
        targets = [target for _, target in train_ds.orig_dataset.imgs]
        train_sample_weights = calculate_oversampling_weights(
            targets, rare_classes, desired_prob)
        num_train_samples = len(train_ds)
        train_sampler = WeightedRandomSampler(weights=train_sample_weights,
                                              num_samples=num_train_samples,
                                              replacement=True)
        shuffle = False
    else:
        train_sampler = None
        shuffle = True

    train_dl = DataLoader(train_ds,
                          shuffle=shuffle,
                          batch_size=batch_sz,
                          num_workers=num_workers,
                          drop_last=True,
                          pin_memory=True,
                          sampler=train_sampler)
    valid_dl = DataLoader(valid_ds,
                          batch_size=batch_sz,
                          num_workers=num_workers,
                          pin_memory=True)

    return DataBunch(train_ds, train_dl, valid_ds, valid_dl, class_names)