环境
- windows 10 64bit
- imgaug 0.4.0
简介
imgaug
是一个 python
编写的机器学习数据集增强库,通过它,可以把原来的小数据集,经过轻微的变化,形成一个新的更大的数据集。
安装
直接通过 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)
imgaug
提供的增强方法非常多,本篇只列出了简单的几个示例,更多内容参考官方文档 https://imgaug.readthedocs.io/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)
多张图片一起处理,使用一个列表来存放图片,最后的显示部分使用 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))
仔细点观察会发现,左右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)
添加高斯噪声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)
同时使用多种增强手段
把上面的增强方法整合起来,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))
imgaug封装
下面这个工程是对 imgaug
进行了一个简单的封装,主要用来对 yolo
数据集进行数据增强
git clone https://github.com/xugaoxiang/SimpleYoloAug.git
cd SimpleYoloAug
以 YOLOv5模型训练 提到的口罩数据集为例,将数据集中的图片和对应的标注一起拷贝到文件夹中,如 images
文件夹,然后进入到源码目录下,然后执行命令
python simple_augment.py --indir ~/images/ --outdir ~/gen_images/ --gen 2
最后的参数 --gen
就是增强的数量
处理完成后,原来1000张的图片就会增强到了3000张,可以拿去训练模型了