Hi there, I’m working on the “SIIM-ISIC Melanoma Classification” competition on Kaggle and wanted to use a specific data augmentation strategy I came across using the albumentation library and implemented it as follows
p = 0.5
train_tfms = A.Compose([
A.Cutout(p=p),
A.RandomRotate90(p=0.5),
A.Flip(p=p),
A.OneOf([
A.RandomBrightnessContrast(brightness_limit=0.2,
contrast_limit=0.2,
),
A.HueSaturationValue(
hue_shift_limit=20,
sat_shift_limit=50,
val_shift_limit=50)
], p=p),
A.OneOf([
A.IAAAdditiveGaussianNoise(),
A.GaussNoise(),
], p=p),
A.OneOf([
A.MotionBlur(p=0.2),
A.MedianBlur(blur_limit=3, p=0.1),
A.Blur(blur_limit=3, p=0.1),
], p=p),
A.ShiftScaleRotate(shift_limit=0.0625, scale_limit=0.2, rotate_limit=45, p=p),
A.OneOf([
A.OpticalDistortion(p=0.3),
A.GridDistortion(p=0.1),
A.IAAPiecewiseAffine(p=0.3),
], p=0.5),
])
class AlbumentationsTransform(ItemTransform):
split_idx = 0
def __init__(self, aug,**kwargs):
super().__init__(**kwargs)
self.aug = aug
def encodes(self, imgs):
aug = self.aug(image=np.array(img))
return PILImage.create(aug["image"])
train_tfms = AlbumentationsTransform(train_tfms)
But I get and error TypeError: isinstance() arg 2 must be a type or tuple of types
after building my dataloader and viewing a batch as follows
bs = 32
dblock = DataBlock(
blocks = (ImageBlock, CategoryBlock),
get_x = ColReader('image_name', pref=path/'train', suff='.jpg'),
get_y = ColReader('benign_malignant'),
splitter = splitter,
item_tfms = [Resize(256), train_tfms],
batch_tfms= Normalize.from_stats(*imagenet_stats))
dls = dblock.dataloaders(df, bs=bs)
dls.show_batch(max_n=3)