分享

图像数据增强

 InfoRich 2021-12-23

环境

  • windows 10 64bit
  • imgaug 0.4.0

简介

imgaug 是一个 python 编写的机器学习数据集增强库,通过它,可以把原来的小数据集,经过轻微的变化,形成一个新的更大的数据集。

Image

imgaug

安装

直接通过 pip 来安装

pip install imgaug

# 体验github上的最新版本,使用下面命令
pip install git+https://github.com/aleju/imgaug.git

或者使用 conda 来安装

conda config --add channels conda-forge
conda install imgaug

基本使用

使用经典的 lenna 图片为例,这里使用 imageio 来读取原始图片,同时支持本地文件和网络文件。当然使用 opencv 来处理也是完全可以的

# 使用命令 pip install imageio 来安装
import imageio
import imgaug as ia

# 读取图片,返回的是numpy数组,类型是uint8,形状是(height, width, channel),RGB格式
image = imageio.imread('lenna.png')

# 显示
ia.imshow(image)

Image

imgaug

imgaug 提供的增强方法非常多,本篇只列出了简单的几个示例,更多内容参考官方文档 https://imgaug./en/latest/source/overview_of_augmenters.html

旋转rotate

import imageio
import imgaug as ia
from imgaug import augmenters as iaa

image = imageio.imread('lenna.png')

# 仿射变换,随机旋转角度,范围是30~90度
rotate = iaa.Affine(rotate=(30, 90))
image_aug = rotate(image=image)

ia.imshow(image_aug)

Image

imgaug

多张图片一起处理,使用一个列表来存放图片,最后的显示部分使用 numpy.hstack

import imageio
import imgaug as ia
import numpy as np
from imgaug import augmenters as iaa

image1 = imageio.imread('lenna.png')

images = [image1, image1]
rotate = iaa.Affine(rotate=(30, 90))
image_augs = rotate(images=images)

ia.imshow(np.hstack(image_augs))

Image

imgaug

仔细点观察会发现,左右2张图的旋转角度是不一样的

裁剪crop

下面看看裁剪的操作,与 rotate 非常类似

import imageio
import imgaug as ia
import numpy as np
from imgaug import augmenters as iaa

image = imageio.imread('lenna.png')

# crop一个随机值,范围50~150
crop = iaa.Crop(px=(50, 150))
image_aug = crop(image=image)

ia.imshow(image_aug)

Image

imgaug

添加高斯噪声gaussian noise

import imageio
import imgaug as ia
from imgaug import augmenters as iaa

image = imageio.imread('lenna.png')

gaus = iaa.AdditiveGaussianNoise(scale=(10, 60))
image_aug = gaus(image=image)

ia.imshow(image_aug)

Image

imgaug

同时使用多种增强手段

把上面的增强方法整合起来,imgaug 的工作流是读取图片、定义变换序列、再执行变换,看下面的示例

import imageio
from imgaug import augmenters as iaa

image = imageio.imread('lenna.png')

seq = iaa.Sequential([
    iaa.Affine(rotate=(-25, 25)),
    iaa.AdditiveGaussianNoise(scale=(30, 90)),
    iaa.Crop(percent=(0, 0.4))
], random_order=True)

# 每张图片都做3项增强
images_aug = [seq(image=image) for _ in range(8)]

# 使用draw_grid分2行4列显示
ia.imshow(ia.draw_grid(images_aug, cols=4, rows=2))

Image

imgaug

imgaug封装

下面这个工程是对 imgaug 进行了一个简单的封装,主要用来对 yolo 数据集进行数据增强

git clone https://github.com/xugaoxiang/SimpleYoloAug.git
cd SimpleYoloAug

以 YOLOv5模型训练 提到的口罩数据集为例,将数据集中的 train 文件夹拷贝到源码目录下,然后执行命令

python simple_augment.py --indir ~/images/ --outdir ~/gen_images/ --gen 2

最后的参数 --gen 就是增强的数量

Image

imgaug

处理完成后,原来1000张的图片就会增强到了3000张,可以拿去训练模型了

参考资料

  • https://github.com/imageio/imageio
  • https://github.com/aleju/imgaug
  • https://github.com/Adddedtiya/SimpleYoloAug
  • YOLOv5模型训练

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约