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]
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
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
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
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"])
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)
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
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
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)