albumentations包整理
albumentations包整理
摘要
albumentations包是一种针对数据增强专门写的API,里面基本包含大量的数据增强手段,比起pytorch自带的transform更丰富,搭配使用效果更好。
代码和效果
import cv2 as cv
import numpy as np
from albumentations import (Blur,Flip,ShiftScaleRotate,GridDistortion,ElasticTransform,HorizontalFlip,CenterCrop,
HueSaturationValue,Transpose,RandomBrightnessContrast,CLAHE,RandomCrop,Cutout,CoarseDropout,
CoarseDropout,Normalize,ToFloat,OneOf,Compose,Resize,RandomRain,RandomFog,Lambda
,ChannelDropout,ISONoise,VerticalFlip,RandomGamma,RandomRotate90)
import matplotlib.pyplot as plt
image = 'C:\\Users\\byb\\Desktop\\Img.png'
def imread(image):
image = cv.imread(image)
image = cv.cvtColor(image, cv.COLOR_BGR2RGB) #功能:函数cvCvtColor实现色彩空间转换
image = image.astype(np.uint8)
return np.array(image)
def show(image):
plt.imshow(image)
plt.axis('off')
plt.show()
a = imread(image)
# image1 = Resize(320, 320, p=1)(image=a)['image']
image2 = RandomRotate90(p=1)(image=a)['image']
show(a)
show(image2)
原始图像
Blur 模糊图像
Blur(blur_limit=7, always_apply=False, p=0.5) 使用随机大小的内核模糊输入图像。
VerticalFlip 围绕X轴垂直翻转
VerticalFlip(always_apply=False, p=0.5) 围绕X轴垂直翻转输入。
HorizontalFlip 围绕Y轴水平翻转
HorizontalFlip(always_apply=False, p=0.5) 围绕y轴水平翻转输入。
Flip 垂直或水平和垂直翻转
Flip(always_apply=False, p=0.5) 水平,垂直或水平和垂直翻转输入。
Transpose 交换行和列来转置
Transpose(always_apply=False, p=0.5) 通过交换行和列来转置输入。
Crop 裁剪
Crop(x_min=0, y_min=0, x_max=1024, y_max=1024, always_apply=False, p=1.0)
#裁剪图像,其与RandomCrop的区别是可以指定最小值和最大值,而RandomCrop只能指定宽高。
RandomCrop 裁剪
RandomCrop(height, width, always_apply=False, p=1.0) 裁剪输入的随机部分。
RandomGamma 随机Gamma
RandomGamma(gamma_limit=(80, 120), eps=None, always_apply=False, p=0.5)
RandomRotate90 随机旋转90度
RandomRotate90(always_apply=False, p=0.5) 将输入随机旋转90度,零次或多次。
ShiftScaleRotate 随机应用仿射变换:平移,缩放和旋转
ShiftScaleRotate(shift_limit=0.0625, scale_limit=0.1, rotate_limit=45, interpolation=1, border_mode=4, value=None, mask_value=None, always_apply=False, p=0.5) #随机应用仿射变换:平移,缩放和旋转输入。
Rotate 旋转
Rotate(limit=90, interpolation=1, border_mode=4, value=None, mask_value=None, always_apply=False, p=0.5)
#随机旋转图片(默认使用reflect方法扩充图片,可以改为参数等其他方法填充)。
CenterCrop 裁剪输入的中心部分
CenterCrop(height, width, always_apply=False, p=1.0)# 裁剪输入的中心部分。
GridDistortion 网格失真
GridDistortion(num_steps=5, distort_limit=0.3, interpolation=1, border_mode=4, value=None, mask_value=None, always_apply=False, p=0.5)
ElasticTransform 弹性变换
ElasticTransform(alpha=1, sigma=50, alpha_affine=50, interpolation=1, border_mode=4, value=None, mask_value=None, always_apply=False, approximate=False, p=0.5)
RandomGridShuffle 随机网格洗牌
RandomGridShuffle(grid=(3, 3), always_apply=False, p=0.5)
HueSaturationValue 色调饱和度值
HueSaturationValue(hue_shift_limit=20, sat_shift_limit=30, val_shift_limit=20, always_apply=False, p=0.5)
#参数:随机色调、饱和度、值变化。
PadIfNeeded 填充
PadIfNeeded(min_height=1024, min_width=1024, border_mode=4, value=None, mask_value=None, always_apply=False, p=1.0)
#填充图像。
RGBShift RGB平移
RGBShift(r_shift_limit=20, g_shift_limit=20, b_shift_limit=20, always_apply=False, p=0.5)
#参数:随机平移R、G、B通道值。
RandomBrightness 随机亮度
RandomBrightness(limit=0.2, always_apply=False, p=0.5)
#随机亮度变化。
RandomContrast 随机对比度
RandomContrast(limit=0.2, always_apply=False, p=0.5)
#随机对比度变化。
HueSaturationValue 随机更改输入图像的色相,饱和度和值
HueSaturationValue(hue_shift_limit=20, sat_shift_limit=30, val_shift_limit=20, always_apply=False, p=0.5)
PadIfNeeded 垫图像的一面/如果一面小于所需数目,则为最大值
PadIfNeeded(min_height=1024, min_width=1024, border_mode=4, value=None, mask_value=None, always_apply=False, p=1.0)
RGBShift 为输入RGB图像的每个通道随机移动值
RGBShift(r_shift_limit=20, g_shift_limit=20, b_shift_limit=20, always_apply=False, p=0.5)
GaussianBlur 使用具有随机核大小的高斯滤波器对输入图像进行模糊处理
GaussianBlur(blur_limit=7, always_apply=False, p=0.5)
ChannelShuffle 随机重新排列输入RGB图像的通道
ChannelShuffle(always_apply=False, p=0.5)
InvertImg 通过从255减去像素值来反转输入图像
InvertImg(always_apply=False, p=0.5)
Cutout 随机擦处
Cutout(num_holes=8, max_h_size=8, max_w_size=8, fill_value=0, always_apply=False, p=0.5)
RandomFog 模拟图像雾
RandomFog(fog_coef_lower=0.3, fog_coef_upper=1, alpha_coef=0.08, always_apply=False, p=0.5)
OpticalDistortion 光学畸变
OpticalDistortion(distort_limit=0.05, shift_limit=0.05, interpolation=1, border_mode=4, value=None, mask_value=None, always_apply=False, p=0.5)
对图像进行光学畸变。
MotionBlur 运动模糊
MotionBlur(blur_limit=7, always_apply=False, p=0.5)
#给图像加上运动模糊。运动模糊是景物图象中的移动效果。它比较明显地出现在长时间暴光或场景内的物体快速移动的情形里。
MedianBlur 中心模糊
MedianBlur(blur_limit=7, always_apply=False, p=0.5)
#图像中值滤波。
GaussianBlur 高斯模糊
GaussianBlur(blur_limit=7, always_apply=False, p=0.5)
#图像高斯平滑滤波。
GaussNoise 高斯噪声
*GaussNoise(var_limit=(10.0, 50.0), mean=None, always_apply=False, p=0.5)
#给图像增加高斯噪声。
CLAHE 对比度受限自适应直方图均衡
CLAHE(clip_limit=4.0, tile_grid_size=(8, 8), always_apply=False, p=0.5)
#将对比度受限的自适应直方图均衡化应用于输入图像
Cutout 在图像中生成正方形区域
Cutout(num_holes=8, max_h_size=8, max_w_size=8, fill_value=0, always_apply=False, p=0.5)
#在图像中生成正方形区域。
CoarseDropout 在图像上生成矩形区域
*CoarseDropout(max_holes=8, max_height=8, max_width=8, min_holes=None, min_height=None, min_width=None, fill_value=0, always_apply=False, p=0.5)
#在图像上生成矩形区域。
GridDropout 以网格方式删除图像的矩形区域和相应的蒙版
GridDropout(ratio: float = 0.5, unit_size_min: int = None, unit_size_max: int = None, holes_number_x: int = None, holes_number_y: int = None, shift_x: int = 0, shift_y: int = 0, random_offset: bool = False, fill_value: int = 0, mask_fill_value: int = None, always_apply: bool = False, p: float = 0.5)
总结
基本比赛常用的都已经写出来了,这个数据增强包最大的好处就是对pytorch很友好,有专门的接口,处理十分方便。
例子一
def strong_aug(p=0.5):
return Compose([
RandomRotate90(),
Flip(),
Transpose(),
OneOf([
IAAAdditiveGaussianNoise(),
GaussNoise(),
], p=0.2),
OneOf([
MotionBlur(p=0.2),
MedianBlur(blur_limit=3, p=0.1),
Blur(blur_limit=3, p=0.1),
], p=0.2),
ShiftScaleRotate(shift_limit=0.0625, scale_limit=0.2, rotate_limit=45, p=0.2),
OneOf([
OpticalDistortion(p=0.3),
GridDistortion(p=0.1),
IAAPiecewiseAffine(p=0.3),
], p=0.2),
OneOf([
CLAHE(clip_limit=2),
IAASharpen(),
IAAEmboss(),
RandomBrightnessContrast(),
], p=0.3),
HueSaturationValue(p=0.3),
], p=p)
这种随机选取一种进行数据增强是最合理的方式,能够最大发挥数据增强的限度,还是十分方便组合使用。
例子二
def get_train_transforms():
return A.Compose(
[
A.RandomSizedCrop(min_max_height=(800, 800), height=1024, width=1024, p=0.5),
A.OneOf([
A.HueSaturationValue(hue_shift_limit=0.2, sat_shift_limit= 0.2,
val_shift_limit=0.2, p=0.9),
A.RandomBrightnessContrast(brightness_limit=0.2,
contrast_limit=0.2, p=0.9),
],p=0.9),
A.ToGray(p=0.01),
A.HorizontalFlip(p=0.5),
A.VerticalFlip(p=0.5),
A.Resize(height=512, width=512, p=1),
A.Cutout(num_holes=8, max_h_size=64, max_w_size=64, fill_value=0, p=0.5),
ToTensorV2(p=1.0),
],
p=1.0,
bbox_params=A.BboxParams(
format='pascal_voc',
min_area=0,
min_visibility=0,
label_fields=['labels']
)
)
在dataloader直接使用
train_dataset = DatasetRetriever(
image_ids=df_folds[df_folds['fold'] != fold_number].index.values,
marking=marking,
transforms=get_train_transforms(),
test=False,
)
重点是transforms直接使用即可。用于目标检测
数据增广方法代码大全
https://github.com/CrazyVertigo/awesome-data-augmentation
这个网址包含了很多主流的数据扩增方法。涉及数据扩增,建议查阅这个网址,自己去找想用方法。非常nice的是,怎么安装、调用,都有非常详细的说明。