一、Albumentations简介
官方地址:github.com
API(文档)地址:Albumentations Documentation
Albumentations是一个基于OpenCV的数据增强库,支持多种计算机视觉任务,如分类、语义分割、实例分割、目标检测和位姿识别。
Albumentations具有以下特点:
- 提供一个简单统一的api接口,适用于所有数据类型:图像(RBG图像、灰度图像、多光谱图像),分割mask,边界框和关键点。
- 大概有70多种不同的图像增强方法,相比torch自带的,这个库函数有更多的图像预处理方法。
- 最大特点:快!在相同的预处理下,albumentations的速度最快。
- 可以与流行的深度学习框架(例如PyTorch和TensorFlow)一起使用,对PyTorch非常友好。
- 而且该库函数由专家团队编写而成,编程质量很棒。
二、安装
方法一: pip 安装
pip install albumentations
方法二:源码库安装
pip install -U git+https://github.com/albu/albumentations
或
pip install -U git+https://github.com/albumentations-team/albumentations
方法三: conda安装
此方式需要先安装imgaug,然后再安装albumentations
conda install -c conda-forge imgaug
conda install albumentations -c albumentations
三、数据增强
3.1 像素级变换(Pixel-level transforms)
像素级变换仅更改输入图像,而mask、检测框和关键点保持不变。
3.2 空间级变换 (Spatial-level transforms)
空间级变换将同时更改输入图像、mask、检测框和关键点。
四、使用示例
import albumentations as A
from PIL import Image
import numpy as np
from torchvision import transforms as t
import matplotlib.pyplot as plt
trans = A.Compose([
A.HorizontalFlip(p=0.5),
A.VerticalFlip(p=0.5),
A.OneOf([
A.IAAAditiveGaussianNoise(), # 将高斯噪声添加到输入图像
A.GaussNoise(), # 将高斯噪声应用于输入图像
], p=0.2), # 应用选定变换的概率
A.OneOf([
A.RandomGamma(gamma_limit=(60, 120), p=0.9), # gamma变换
A.RandomBrightnessContrast(brightness_limit=0.2, contrast_limit=0.2, p=0.9), # 随机选择图片的对比度和亮度
A.CLAHE(clip_limit=4.0, tile_grid_size=(4, 4), p=0.9), # 一种对比度受限情况下的自适应直方图均衡化算法
])
A.OneOf([
A.MotionBlur(p=0.2), # 使用随机大小的内核将运动模糊应用于输入图像
A.MedianBlur(blur_limit=3, p=0.1), # 中值滤波
A.Blur(blur_limit=3, p=0.1), # 使用随机大小的内核模糊输入图像
], p=0.2),
A.ShiftScaleRotate(shift_limit=0.0625, scale_limit=0.2, rotate_limit=45, p=0.2),
# 随机应用仿射变换:平移,缩放和旋转输入
A.RandomBrightnessContrast(p=0.2), # 随机明亮对比度
A.Normalize(mean=(0.485, 0.456, 0.406), std=(0.229, 0.224, 0.225), max_pixel_value=255.0, p=1.0) # 归一化
])
image = Image.open('xxx.png')
img_arr = np.array(image) #
resize = A.resize(img_arr, 256, 256) #
trans_img = trans(image=img_arr) #对输入图像进行变换
as_tensor = t.ToTensor()
img_tensor = as_tensor(trans_img['image']) # 使用torchvision把做好了transforms的数据转化成tensor。
plt.figure(figsize=(8,8))
plt.subplot(121)
plt.title('original image')
plt.imshow(img_arr, cmap='gray')
plt.subplot(122)
plt.title('albumentations image')
plt.imshow(trans_img['image'], cmap='gray')
注意:两个重要的函数——Compose和OneOf。Compose是把所有的变换放在一起,按顺序执行;OneOf可以选择性的执行包在它里面的变换。Compose组合下的变换是要挨着顺序做的,而OneOf组合里面的变换是系统自动选择其中一个来做,而这里的概率参数p是指选定后的变换被做的概率。
五、如何将Albumentations增强方法和PyTorch结合
方法一:使用albumentations库中的函数ToTensorV2()。
方法二:使用torchvision把做好了transform的数据转换成tensor。