图像数据增强 - 迷途小书童的Note迷途小书童的Note
source link: https://xugaoxiang.com/2021/12/22/imgaug/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
图像数据增强
- 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张,可以拿去训练模型了
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK