首页 > 其他分享 >albumentations包整理

albumentations包整理

时间:2022-11-01 20:45:46浏览次数:82  
标签:None False always 0.5 limit apply 整理 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)

原始图像

img

Blur 模糊图像

Blur(blur_limit=7, always_apply=False, p=0.5) 使用随机大小的内核模糊输入图像。

img

VerticalFlip 围绕X轴垂直翻转

VerticalFlip(always_apply=False, p=0.5) 围绕X轴垂直翻转输入。

img

HorizontalFlip 围绕Y轴水平翻转

HorizontalFlip(always_apply=False, p=0.5) 围绕y轴水平翻转输入。

img

Flip 垂直或水平和垂直翻转

Flip(always_apply=False, p=0.5) 水平,垂直或水平和垂直翻转输入。

img

Transpose 交换行和列来转置

Transpose(always_apply=False, p=0.5) 通过交换行和列来转置输入。

img

Crop 裁剪

Crop(x_min=0, y_min=0, x_max=1024, y_max=1024, always_apply=False, p=1.0)
#裁剪图像,其与RandomCrop的区别是可以指定最小值和最大值,而RandomCrop只能指定宽高。	

img

RandomCrop 裁剪

RandomCrop(height, width, always_apply=False, p=1.0) 裁剪输入的随机部分。

img

RandomGamma 随机Gamma

RandomGamma(gamma_limit=(80, 120), eps=None, always_apply=False, p=0.5)

img

RandomRotate90 随机旋转90度

RandomRotate90(always_apply=False, p=0.5) 将输入随机旋转90度,零次或多次。

img

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) #随机应用仿射变换:平移,缩放和旋转输入。

img

Rotate 旋转

Rotate(limit=90, interpolation=1, border_mode=4, value=None, mask_value=None, always_apply=False, p=0.5)
#随机旋转图片(默认使用reflect方法扩充图片,可以改为参数等其他方法填充)。

img

CenterCrop 裁剪输入的中心部分

CenterCrop(height, width, always_apply=False, p=1.0)# 裁剪输入的中心部分。

img

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) 

img

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) 

img

RandomGridShuffle 随机网格洗牌

RandomGridShuffle(grid=(3, 3), always_apply=False, p=0.5) 

img

HueSaturationValue 色调饱和度值

HueSaturationValue(hue_shift_limit=20, sat_shift_limit=30, val_shift_limit=20, always_apply=False, p=0.5)
#参数:随机色调、饱和度、值变化。

img

PadIfNeeded 填充

PadIfNeeded(min_height=1024, min_width=1024, border_mode=4, value=None, mask_value=None, always_apply=False, p=1.0)
#填充图像。

img

RGBShift RGB平移

RGBShift(r_shift_limit=20, g_shift_limit=20, b_shift_limit=20, always_apply=False, p=0.5)
#参数:随机平移R、G、B通道值。

img

RandomBrightness 随机亮度

RandomBrightness(limit=0.2, always_apply=False, p=0.5)
#随机亮度变化。

img

RandomContrast 随机对比度

RandomContrast(limit=0.2, always_apply=False, p=0.5)
#随机对比度变化。

img

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

HueSaturationValue(hue_shift_limit=20, sat_shift_limit=30, val_shift_limit=20, always_apply=False, p=0.5)

img

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

PadIfNeeded(min_height=1024, min_width=1024, border_mode=4, value=None, mask_value=None, always_apply=False, p=1.0)

img

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

RGBShift(r_shift_limit=20, g_shift_limit=20, b_shift_limit=20, always_apply=False, p=0.5)

img

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

GaussianBlur(blur_limit=7, always_apply=False, p=0.5) 

img

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

ChannelShuffle(always_apply=False, p=0.5)

img

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

InvertImg(always_apply=False, p=0.5)

img

Cutout 随机擦处

Cutout(num_holes=8, max_h_size=8, max_w_size=8, fill_value=0, always_apply=False, p=0.5)

img

RandomFog 模拟图像雾

RandomFog(fog_coef_lower=0.3, fog_coef_upper=1, alpha_coef=0.08, always_apply=False, p=0.5)

img

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)



对图像进行光学畸变。

img

MotionBlur 运动模糊

MotionBlur(blur_limit=7, always_apply=False, p=0.5)
#给图像加上运动模糊。运动模糊是景物图象中的移动效果。它比较明显地出现在长时间暴光或场景内的物体快速移动的情形里。

img

MedianBlur 中心模糊

MedianBlur(blur_limit=7, always_apply=False, p=0.5)

#图像中值滤波。

img

GaussianBlur 高斯模糊

GaussianBlur(blur_limit=7, always_apply=False, p=0.5)
#图像高斯平滑滤波。

img

GaussNoise 高斯噪声

*GaussNoise(var_limit=(10.0, 50.0), mean=None, always_apply=False, p=0.5)
#给图像增加高斯噪声。	

img

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

CLAHE(clip_limit=4.0, tile_grid_size=(8, 8), always_apply=False, p=0.5)
#将对比度受限的自适应直方图均衡化应用于输入图像

img

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

Cutout(num_holes=8, max_h_size=8, max_w_size=8, fill_value=0, always_apply=False, p=0.5)
#在图像中生成正方形区域。

img

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)
#在图像上生成矩形区域。	

img

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)

img

总结

基本比赛常用的都已经写出来了,这个数据增强包最大的好处就是对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的是,怎么安装、调用,都有非常详细的说明。

标签:None,False,always,0.5,limit,apply,整理,albumentations
From: https://www.cnblogs.com/lwp-nicol/p/16849076.html

相关文章

  • Docker Hub(chrono《kubernetes入门实战课》笔记整理)
    dockerpull的时候,如果没有明确指定镜像仓库,就会使用默认的“DockerHub”(https://hub.docker.com/),是docker公司官方搭建的服务。【如何在DockerHub上挑选镜像】docker......
  • Dockerfile(chrono《kubernetes入门实战课》笔记整理)
    【容器分层】每个镜像都是基于一些已有的系统,资源等组合起来的,假设N个镜像都是基于centos7.0系统,如果是直接打包做镜像,就会需要打包N份centos7系统,这对磁盘存储和网络传输......
  • node1_使用fs模块整理成绩单
    fs:filesystem文件系统模块是node中内置模块用于本地文件或者目录的增删改查操作直接导入即可使用constfs=require('fs')fs.readFile('./point.txt','utf-8',(er......
  • Java基础整理04
    EXERCISETest04Object超类、基类,所有类的直接或间接父类,位于继承树的最顶层。任何类,如果没有书写extends显示继承某个类,都默认直接继承Object类,否则为间接继承。Objec......
  • 常用Cron表达式整理
    每天凌晨2点002**?和每天隔一小时0**/1**?例1:每隔5秒执行一次:*/5****?例2:每隔5分执行一次:0*/5***?在26分、29分、33分执行一次:026,29,33***?例3......
  • 索引接口汇总整理
    ##Neo4j###索引-Btreeindex-Rangeindex-Pointindex-Lookupindex-FullTextindex-Textindex其中Btree为当前默认索引,在neo4j的文档中rangeindex与pointin......
  • Markdown最全基本语法整理 - 有这一篇就够了
    《一》什么是MarkdownMarkdown是一种轻量级的标记语言,它允许人们使用易读易写的纯文本格式编写文档,借助可实现快速排版且转换成格式丰富的HTML页面。目前被越来越多的写作......
  • 分布式ID生成方案总结整理
    目录1、为什么需要分布式ID?2、业务系统对分布式ID有什么要求?3、分布式ID生成方案3.1UUID3.2、数据库自增3.3、号段模式3.4、Redis实现3.4、雪花算法(SnowFlake)3.5、百度......
  • 重新整理 .net core 实践篇 ———— linux上排查问题 [外篇]
    前言简单介绍一下在排查问题。献给初学者。该文的前置篇:https://www.cnblogs.com/aoximin/p/16838657.html正文什么是linux系统linux是基于名为procfs的特殊文件系......
  • 【Node.JS 练习】考试成绩整理
     目标整理前的数据格式  整理后的数据格式 实现思路导入需要的fs文件系统模块使用fs.readFile()方法,读取素材目录下的成绩.txt文件。判断文件是否读取失败。文件读取成功......