数据增强库albumentations使用指南

数据增强技术就是人为地生成真实数据集的不同版本以增加其数据大小。计算机视觉(CV)和自然语言处理 (NLP) 在模型训练过程中经常使用数据增强策略来处理数据稀缺和数据多样性不足的问题,避免模型因数据量而导致的过拟合、泛化性不足等问题。计算机视觉中常见的数据增强手段有:旋转、水平/垂直翻转、随机裁剪、平移、尺度缩放、颜色增强、调整亮度饱和度、扭曲、随机mask等。


1、Albumentations 库简介

Albumentations 是一个 Python 库,用于快速灵活的图像增强。Albumentations 有效地实现了丰富多样的图像变换操作,这些操作针对性能进行了优化,同时为不同的计算机视觉任务提供了简洁而强大的图像增强界面,包括分类、目标检测、图像分割、关键点。
官网地址:https://albumentations.ai
技术文档:https://albumentations.ai/docs
使用教程:https://github.com/albumentations-team/albumentations_examples
支持的增强操作有:对图像进行随机裁剪、随机旋转、模糊化、灰度化、加噪声、颜色增强、质量压缩、模拟阳光雨雾雪阴影等。
在这里插入图片描述


2、Albumentations优势

2.1 速度快

该软件包已通过多个基于 OpenCV 的库(包括 NumPy、OpenCV、imgaug)进行了优化。对比TorchVision提供的 torchvision.transforms 的使用,官方给出来对比速度:https://albumentations.ai/docs/benchmarking_results/
在这里插入图片描述
可以看到,同一时间段内,albumentations库处理的图片比其他的库数量多很多。

2.2 匹配终端推理

这是在工作中摸索出来的经验,深度学习模型最终是要用起来的,当模型部署在终端设备上,大多采用C++对图像做预处理,比如resize,而且C++的预处理库中,比如rga库,底层是采用opencv的。要是训练过程和实际推理过程在图像预处理阶段不一致,很容易造成预测误差。比如:训练采用torchvision的transformer最图像做预处理和增强,服务器上推理也采用transformer对图像做resize,而部署在终端设备上要采用rga库对图像做resize操作,这样的不一致会导致比较大的预测误差。

3、Albumentations使用示例

import albumentations as A
import cv2
import matplotlib.pyplot as plt

ori_img = cv2.imread("./dog.10706.jpg")
ori_img = cv2.cvtColor(ori_img, cv2.COLOR_BGR2RGB)

trans =  A.Compose(
    [
        #A.HorizontalFlip(p=0.5),    # 水平翻转
        #A.VerticalFlip(p=0.5)       # 垂直翻转
        A.RandomRotate90(p=0.5)      # 随机旋转90度
    ])

aug_img = trans(image=ori_img)['image']

plt.subplot(1,2,1)
plt.title("original image")
plt.imshow(ori_img)
 
plt.subplot(1,2,2)
plt.title("transformed image")
plt.imshow(aug_img)

plt.show()

在这里插入图片描述

# 平移缩放旋转融合在一起
A.ShiftScaleRotate(shift_limit=0.03, scale_limit=0.05, rotate_limit=30, p=0.5, border_mode=cv2.BORDER_CONSTANT, interpolation=cv2.INTER_LINEAR, value=0)

在这里插入图片描述

# 加噪声,OneOf是随机选择里面的一种增强方式
A.OneOf([
            A.GaussNoise(p=0.5),
            A.ISONoise(p=0.5)
        ], p=0.5)

在这里插入图片描述

# 模糊化
A.OneOf([
            A.MotionBlur(p=0.5),
            A.MedianBlur(blur_limit=3, p=0.5),
            A.Blur(blur_limit=3, p=0.5),
            A.GaussianBlur(blur_limit=(3,5), p=0.5),
        ], p=0.5)

在这里插入图片描述

# 颜色增强
A.OneOf([
            A.CLAHE(clip_limit=5, p=0.5),
            A.RandomBrightnessContrast(p=0.5),
            A.HueSaturationValue(hue_shift_limit=30, sat_shift_limit=30, val_shift_limit=30, always_apply=False, p=0.3)
        ], p=0.5)

在这里插入图片描述

# 图像质量压缩
A.ImageCompression(quality_lower=50, quality_upper=100, p=0.5)

在这里插入图片描述

# 随机遮挡
A.CoarseDropout(max_holes=6, max_height=20, max_width=20, fill_value=0, always_apply=False, p=0.5)

在这里插入图片描述

# 模拟阳光雨雾雪阴影
A.OneOf([
            A.RandomFog(p=0.5),
            A.RandomRain(p=0.5),
            A.RandomShadow(p=0.5),
            A.RandomSnow(p=0.5),
            A.RandomSunFlare(p=0.5)
        ], p=0.5)

在这里插入图片描述

在pytorch中使用Albumentations库
albumentation有两种转换张量,ToTensor和ToTensorV2
from albumentations.pytorch import ToTensor, ToTensorV2

ToTensor就是最普通的最大值归一化并且转化为chw

ToTensorV2就是把图片转成张量适合跟在A.Normalize后面,比如:

import albumentations as A
from albumentations.pytorch import ToTensorV2
import cv2

data_transform = A.Compose([
     A.Resize(112,112),
     A.HorizontalFlip(p=0.5),
     A.ShiftScaleRotate(shift_limit=0.03, scale_limit=0.05, rotate_limit=30, p=0.5, border_mode=cv2.BORDER_CONSTANT, interpolation=cv2.INTER_LINEAR, value=0),
     A.GaussianBlur(blur_limit=(3,5), p=0.5),
    
     A.Normalize(
        mean=pv_reco_mean_std()[0],  
        std=pv_reco_mean_std()[1]
     ),
     ToTensorV2()
])

image = cv2.imread(img_path) # 读取图片
image = image[...,::-1].copy()   #bgr2rgb
aug_image = data_transform(image=image)['image']  # 增强后的图片

参考:
https://albumentations.ai/docs
https://www.aiuai.cn/aifarm422.html
https://blog.youkuaiyun.com/qq_33499229/article/details/108316386
https://blog.youkuaiyun.com/qq_27039891/article/details/100795846

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值