打kaggle图像类的比赛时总是会用到 Albumentations库,这个库挺强大的,基于OpenCV实现的,API接口简单,也易于添加到AI框架比如Pytorch中,因此,特别适合用于深度学习中的网络训练时的图片数据增强。
1 安装
Albumentations库的安装:
# 建议把opencv-python也安装
# -i 之后加的是豆瓣源
pip install albumentations -i https://pypi.douban.com/simple
2 参考
- github: https://github.com/albumentations-team/albumentations
- 文档:https://albumentations.readthedocs.io/en/latest/
3 实例
'''
Albumentations可以对数据集进行逐像素的转换,
如模糊、下采样、高斯造点、高斯模糊、动态模糊、RGB转换、随机雾化等;
也可以进行空间转换(同时也会对目标进行转换),如裁剪、翻转、随机裁剪等;
'''
import numpy as np
import cv2
import matplotlib.pyplot as plt
import albumentations as A
# 图像变换函数
# from albumentations import (
# HorizontalFlip, IAAPerspective, ShiftScaleRotate, CLAHE, RandomRotate90,
# Transpose, ShiftScaleRotate, Blur, OpticalDistortion, GridDistortion, HueSaturationValue,
# IAAAdditiveGaussianNoise, GaussNoise, MotionBlur, MedianBlur, IAAPiecewiseAffine,
# IAASharpen, IAAEmboss, RandomContrast, RandomBrightness, Flip, OneOf, Compose
# )
# .jpg的图也可以
image = cv2.imread('jinsihou.jpeg', 1)
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
# 水平翻转
aug = A.HorizontalFlip(p = 1)
img_HorizontalFlip = aug(image = image)['image']
# 透视变换
aug = A.IAAPerspective(scale = 0.2, p = 1)
img_IAAPerspective = aug(image = image)['image']
# 平移缩放旋转三合一
aug = A.ShiftScaleRotate(p = 1)
img_ShiftScaleRotate = aug(image = image)['image']
# 组合图像增强
def augment_flips_color(p = .5):
return A.Compose([
A.CLAHE(),
A.RandomRotate90(),
A.Transpose(),
A.ShiftScaleRotate(shift_limit = 0.0625, scale_limit = 0.50, rotate_limit = 45, p = .75),
A.Blur(blur_limit = 3),
A.OpticalDistortion(),
A.GridDistortion(),
A.HueSaturationValue()
], p = p)
aug = augment_flips_color(p = 1)
img_augment_flips_color = aug(image = image)['image']
def strong_aug(p = .5):
return A.Compose([
A.RandomRotate90(),
A.Flip(),
A.Transpose(),
A.OneOf([
A.IAAAdditiveGaussianNoise(),
A.GaussNoise(),
], p = 0.2),
A.OneOf([
A.MotionBlur(p = .2),
A.MedianBlur(blur_limit = 3, p = .1),
A.Blur(blur_limit = 3, p = .1),
], p = 0.2),
A.ShiftScaleRotate(shift_limit = 0.0625, scale_limit = 0.2, rotate_limit = 45, p = .2),
A.OneOf([
A.OpticalDistortion(p = 0.3),
A.GridDistortion(p = .1),
A.IAAPiecewiseAffine(p = 0.3),
], p = 0.2),
A.OneOf([
A.CLAHE(clip_limit = 2),
A.IAASharpen(),
A.IAAEmboss(),
A.RandomContrast(),
A.RandomBrightness(),
], p = 0.3),
A.HueSaturationValue(p = 0.3),
], p = p)
aug == strong_aug(p=1)
img_strong_aug = aug(image=image)['image']
# 显示结果图
plt.subplot(2, 3, 1)
plt.imshow(image)
plt.subplot(2, 3, 2)
plt.imshow(img_HorizontalFlip)
plt.subplot(2, 3, 3)
plt.imshow(img_IAAPerspective)
plt.subplot(2, 3, 4)
plt.imshow(img_ShiftScaleRotate)
plt.subplot(2, 3, 5)
plt.imshow(img_augment_flips_color)
plt.subplot(2, 3, 6)
plt.imshow(img_strong_aug)
plt.show()
输出结果图
未完待续…