Pytorch使用albumentations实现数据增强

目录

摘要

代码和效果

原始图像

Blur 模糊图像

VerticalFlip 围绕X轴垂直翻转

HorizontalFlip 围绕Y轴水平翻转

Flip 垂直或水平和垂直翻转

Transpose 交换行和列来转置

Crop 裁剪

RandomCrop 裁剪

RandomGamma 随机Gamma

RandomRotate90 随机旋转90度

ShiftScaleRotate 随机应用仿射变换:平移,缩放和旋转

Rotate 旋转

CenterCrop 裁剪输入的中心部分

GridDistortion 网格失真

ElasticTransform 弹性变换

RandomGridShuffle 随机网格洗牌

HueSaturationValue 色调饱和度值

PadIfNeeded 填充

RGBShift RGB平移

RandomBrightness 随机亮度

RandomContrast 随机对比度

HueSaturationValue 随机更改输入图像的色相,饱和度和值

PadIfNeeded 垫图像的一面/如果一面小于所需数目,则为最大值

RGBShift 为输入RGB图像的每个通道随机移动值

GaussianBlur 使用具有随机核大小的高斯滤波器对输入图像进行模糊处理

ChannelShuffle 随机重新排列输入RGB图像的通道

InvertImg 通过从255减去像素值来反转输入图像

Cutout 随机擦处

RandomFog 模拟图像雾

OpticalDistortion 光学畸变

MotionBlur 运动模糊

MedianBlur 中心模糊

GaussianBlur 高斯模糊

GaussNoise 高斯噪声

CLAHE 对比度受限自适应直方图均衡

Cutout 在图像中生成正方形区域

CoarseDropout 在图像上生成矩形区域

GridDropout 以网格方式删除图像的矩形区域和相应的蒙版

总结

例子一

例子二

在dataloader直接使用

数据增广方法代码大全


摘要

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的是,怎么安装、调用,都有非常详细的说明。

  • 71
    点赞
  • 323
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
Albumentations是一个Python图像增强库,可以用于数据增强,特别是在深度学习任务中。它可以用于图像分类,目标检测,语义分割等任务中的数据增强,以提高模型的性能。 以下是使用Albumentations进行数据增强的基本步骤: 1. 安装Albumentations库:可以使用pip安装,命令为 pip install albumentations 2. 导入必要的类:通常我们需要导入Compose类和所需的变换类 3. 定义变换:使用变换类定义所需的变换 4. 应用变换:使用Compose类将所有变换组合起来,并将其应用于图像。 下面是一个示例代码片段,演示如何使用Albumentations进行数据增强: ```python import albumentations as A from albumentations.pytorch.transforms import ToTensorV2 transform = A.Compose([ A.Resize(height=512, width=512), A.Rotate(limit=40, p=0.9), A.HorizontalFlip(p=0.5), A.VerticalFlip(p=0.1), A.Normalize( mean=[0.0, 0.0, 0.0], std=[1.0, 1.0, 1.0], max_pixel_value=255.0, ), ToTensorV2(), ]) ``` 在这个例子中,我们定义了一组变换,包括大小调整,旋转,水平翻转,垂直翻转和归一化。我们使用Compose将它们组合在一起。要应用这些变换,只需将图像作为输入传递给transform即可。 ```python import cv2 import numpy as np image = cv2.imread("example.jpg") transformed = transform(image=image)["image"] ``` 在这个例子中,我们使用OpenCV加载一个示例图像,然后将其传递给我们定义的变换。变换后,我们得到一个增强后的图像,可以用于训练深度学习模型。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值