欢迎访问我的网站,希望内容对您有用,感兴趣的可以加入我们的社群。

图像数据增强

YOLO 迷途小书童 3年前 (2021-12-22) 4394次浏览 3个评论

环境

  • windows 10 64bit
  • imgaug 0.4.0

简介

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

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)

imgaug

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)

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))

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)

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)

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))

imgaug

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 就是增强的数量

imgaug

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

参考资料

喜欢 (2)

您必须 登录 才能发表评论!

(3)个小伙伴在吐槽
  1. 运行python simple_augment.py --indir images/ --outdir /gen_images/ --gen 2 这条命令
    匿名2022-02-14 14:25
  2. 大佬,我依照步骤安装了库,然后运行命令一直显式 Total Image Anotation Pair : 0 Y/N : y 0it [00:00, ?it/s] 已经文件目录是正确的,麻烦大佬指教
    匿名2022-02-14 14:25