数据扩增的方法
- opencv 数据扩增
- albumentations数据扩增
数据扩增的目的:
- 有效增加样本的语义空间,增加数据集中样本的数据量
数据扩增的分类
- 标签不变的数据扩增方法
- 标签改编的数据扩增方法
常见的数据扩增方法都会改变数据的标签
opencv进行数据扩增
首先读取原始图片
img = cv2.imread(train_mask[‘name’].iloc[0])
mask = rle_decode(train_mask[‘mask’].iloc[0])
plt.figure(figsize=(16, 8))
plt.subplot(1, 2, 1)
plt.imshow(img)
plt.subplot(1, 2, 2)
plt.imshow(mask)
垂直翻转
plt.figure(figsize=(16, 8))
plt.subplot(1, 2, 1)
plt.imshow(cv2.flip(img, 0))
plt.subplot(1, 2, 2)
plt.imshow(cv2.flip(mask, 0))
水平翻转
plt.figure(figsize=(16, 8))
plt.subplot(1, 2, 1)
plt.imshow(cv2.flip(img, 0))
plt.subplot(1, 2, 2)
plt.imshow(cv2.flip(mask, 0))
随机裁剪
x, y = np.random.randint(0, 256), np.random.randint(0, 256)
plt.figure(figsize=(16, 8))
plt.subplot(1, 2, 1)
plt.imshow(img[x:x+256, y:y+256])
plt.subplot(1, 2, 2)
plt.imshow(mask[x:x+256, y:y+256])
albumentations数据扩增
与OpenCV相比albumentations具有以下优点:
albumentations支持的操作更多,使用更加方便;
albumentations可以与深度学习框架(Keras或Pytorch)配合使用;
albumentations支持各种任务(图像分流)的数据扩增操作
import albumentations as A
水平翻转
augments = A.HorizontalFlip(p=1)(image=img, mask=mask)
img_aug, mask_aug = augments[‘image’], augments[‘mask’]
随机裁剪
augments = A.RandomCrop(p=1, height=256, width=256)(image=img, mask=mask)
img_aug, mask_aug = augments[‘image’], augments[‘mask’]
旋转
augments = A.ShiftScaleRotate(p=1)(image=img, mask=mask)
img_aug, mask_aug = augments[‘image’], augments[‘mask’]
albumentations还可以组合多个数据扩增操作得到更加复杂的数据扩增操作:
trfm = A.Compose([
A.Resize(256, 256),
A.HorizontalFlip(p=0.5),
A.VerticalFlip(p=0.5),
A.RandomRotate90(),
])
augments = trfm(image=img, mask=mask)
img_aug, mask_aug = augments[‘image’], augments[‘mask’]
plt.figure(figsize=(16, 8))
plt.subplot(1, 2, 1)
plt.imshow(augments[‘image’])
plt.subplot(1, 2, 2)
plt.imshow(augments[‘mask’])