数据增强神器:imgaug库的使用教程

问题:目前许多深度领域由于数据难采集、难标注等问题造成了数据量不够多的情况,这就导致深度学习模型的性能和泛化能力较差。
解决方案:因此数据增强主能够增加训练数据的多样性和丰富性,以提高模型性能和泛化能力
因此imgaug库就是针对以上问题提出的,简化了个人编写数据增强方法的过程,极大提高了编码速度

imgaug简介

imgaug库是一个基于torchvision的数据增强工具包,可用于增加图像数据的多样性、改善模型性能、克服数据稀缺问题,以及为机器学习和计算机视觉任务提供更丰富的数据。
imgaug库能够在图片包含了对图片的几何变换颜色变换、对比度和亮度调整、模糊和锐化、噪声、模拟雨/雾效果、关键点(Keypoints)等。并可以将多个增强方法组合在一起,以获得更丰富的数据增强效果。

数据增强的示例(含标签label)

图片示例

以下是一个使用imgaug库进行图像增强的示例代码。这个示例将应用几种典型的图像增强操作,包括旋转、翻转、亮度和对比度调整以及高斯噪声。请确保您已经安装了imgaug库。
iaa.Sequential类似于nn.Sequential,里边顺序执行增强操作,代码示例如下:

import imgaug.augmenters as iaa
import imageio
import matplotlib.pyplot as plt

# 读取图像
image = imageio.imread("path_to_your_image.jpg")

# 创建增强序列
seq = iaa.Sequential([
    iaa.Affine(rotate=(-45, 45)),  # 随机旋转角度
    iaa.Fliplr(0.5),  # 随机水平翻转
    iaa.Flipud(0.2),  # 随机垂直翻转
    iaa.Multiply((0.8, 1.2), per_channel=0.2),  # 随机调整亮度
    iaa.ContrastNormalization((0.8, 1.2)),  # 随机调整对比度
    iaa.AdditiveGaussianNoise(scale=(0, 0.1*255))  # 添加高斯噪声
])

# 应用图像增强
augmented_image = seq.augment_image(image)
# 显示原始图像和增强后的图像
plt.subplot(1, 2, 1)
plt.imshow(image)
plt.title("Original Image")
plt.subplot(1, 2, 2)
plt.imshow(augmented_image)
plt.title("Augmented Image")
plt.show()

实验结果
image.png

点标签

除了对图片增强外,imgaug还提供对点标签增强的方法
不过对于点标签增强需要将np.array数据或list数据转换为KeypointsOnImage,才能进行相应操作,之后需要再将KeypointsOnImage转换为对应的np.array数据或list数据,代码如下:

import scipy.io,imgaug
import imgaug.augmenters as iaa
from imgaug.augmentables.kps import KeypointsOnImage
import numpy as np
import imageio
import matplotlib.pyplot as plt

def read_mat(path='GT_IMG_286.mat'):
    # 使用scipy.io.loadmat()加载MATLAB文件
    mat_data = scipy.io.loadmat(path)
    # mat_data是一个字典,包含了MATLAB文件中的各个变量和数据
    # print(mat_data)
    # 从字典中获取特定变量的值
    point_data = mat_data['image_info'][0][0][0][0]
    return point_data

def return_process_point(path="IMG_286.jpg"):
    # 读取图像与标签
    image = imageio.imread("IMG_286.jpg")
    label_array = read_mat()[0]

    # 从label_array中提取关键点坐标
    # 假设label_array是一个Nx2的numpy数组,每行包含一个关键点的(x, y)坐标
    # for point in label_array:
    #     print(point)
    keypoints = [imgaug.Keypoint(x=point[0], y=point[1]) for point in label_array]

    # 创建KeypointsOnImage对象
    keypoints_on_image = KeypointsOnImage(keypoints, shape=image.shape)

    # 创建增强序列
    seq = iaa.Sequential([
        iaa.Affine(rotate=(-45, 45)),  # 随机旋转
        iaa.Affine(translate_px={"x": (-20, 20), "y": (-20, 20)}),  # 随机平移
    ])

    # 应用图像增强
    augmented_image, augmented_keypoints = seq(image=image, keypoints=keypoints_on_image)

    # 提取增强后的关键点坐标
    augmented_keypoint_coords = augmented_keypoints.keypoints

    # 显示增强前后的图像和关键点
    image_before = keypoints_on_image.draw_on_image(image, color=(0, 255, 0), size=7)
    image_after = augmented_keypoints.draw_on_image(augmented_image, color=(0, 255, 0), size=7)

    plt.subplot(1, 2, 1)
    plt.imshow(image_before)
    plt.title("Original Image with Keypoints")

    plt.subplot(1, 2, 2)
    plt.imshow(image_after)
    plt.title("Augmented Image with Keypoints")
    plt.show()

    # 提取增强后的关键点坐标为numpy数组
    augmented_keypoint_coords = augmented_keypoints.to_xy_array()
    # augmented_keypoint_coords 是一个包含增强后关键点坐标的numpy数组
    return augmented_keypoint_coords

if __name__ == '__main__':
    augmented_keypoint_coords=return_process_point()
    print(np.array(augmented_keypoint_coords))

运行结果图片:
image.png

框标签

最后是框标签,与点标签的方法类似,给出相应的代码:

import imgaug.augmenters as iaa
from imgaug.augmentables.bbs import BoundingBox, BoundingBoxesOnImage
import numpy as np

# 创建示例的框标签数据
bbs = BoundingBoxesOnImage([
    BoundingBox(x1=100, y1=100, x2=200, y2=200),
    BoundingBox(x1=250, y1=250, x2=350, y2=350)
], shape=(500, 500))  # 假设图像大小为500x500

# 创建增强序列
seq = iaa.Sequential([
    iaa.Affine(rotate=(-45, 45)),
    iaa.Affine(translate_px={"x": (-20, 20), "y": (-20, 20)})
])

# 应用框标签增强
augmented_bbs = seq.augment(bbs)

# 提取增强后的框标签数据为numpy数组
augmented_bbs_coords = augmented_bbs.to_xyxy_array()

# augmented_bbs_coords 是一个包含增强后框标签数据的numpy数组
print(augmented_bbs_coords)

在示例代码中,我们首先创建了一个BoundingBoxesOnImage对象,其中包含了示例的框标签数据。然后,我们创建了一个增强序列并应用框标签增强。最后,使用augmented_bbs.to_xyxy_array()将增强后的框标签数据转换为numpy数组。

数据增强的方法

  1. Geometric Augmentations(几何变换)
    • iaa.Affine:进行仿射变换,如旋转、缩放、平移。
    • iaa.Crop:裁剪图像的一部分。
    • iaa.PerspectiveTransform:进行透视变换。
  2. Color Augmentations(颜色变换)
    • iaa.AdditiveGaussianNoise:添加高斯噪声。
    • iaa.Multiply:对像素进行乘法操作,调整亮度。
    • iaa.Add:对像素进行加法操作,调整亮度。
    • iaa.Grayscale:将图像转换为灰度图像。
    • iaa.Sometimes:有一定概率应用其他增强。
  3. Contrast and Brightness Adjustments(对比度和亮度调整)
    • iaa.GammaContrast:进行伽马对比度调整。
    • iaa.LogContrast:进行对数对比度调整。
    • iaa.LinearContrast:进行线性对比度调整。
  4. Blurring and Sharpening(模糊和锐化)
    • iaa.GaussianBlur:应用高斯模糊。
    • iaa.Sharpen:进行图像锐化。
  5. Noise(噪声)
    • iaa.SaltAndPepper:添加椒盐噪声。
    • iaa.CoarseSaltAndPepper:添加粗粒度椒盐噪声。
  6. Segmentation Maps and Superpixels(分割图和超像素)
    • iaa.Superpixels:生成超像素。
    • iaa.SegmentationMapOnImage:将分割图应用到图像上。
  7. Custom Augmentations(自定义增强)
    • iaa.Lambda:应用自定义函数进行增强。
  8. 特殊效果(Special Effects)
    • iaa.Rain:模拟雨效果。
    • iaa.Fog:模拟雾效果。
  9. 关键点(Keypoints)
    • iaa.Keypoint:对关键点进行增强。
    • iaa.KeypointsOnImage:对一组关键点进行增强。
imgaug是一个用于图像数据增强处理的Python。它提供了大量的图像处理方法,可以应用于图像数据集,以生成增强后的图像样本。 imgaug提供了多种增强方法,包括几何变换、颜色变换以及噪声添加等。其中几何变换方法包括平移、旋转、缩放、翻转等操作,这些操作可以通过指定参数调整增强的程度和样式。颜色变换方法包括亮度、对比度、饱和度、色调等参数的调整,用于改变图像的颜色效果。噪声添加方法可以向图像中添加高斯噪声、均匀噪声等,以增加图像的复杂性和多样性。 imgaug能够高效地处理大规模的图像数据集,并且支持批量处理。它使用类似于数据管道的方法,将图像数据和增强方法串联起来,可以构建复杂的增强流程。同时,imgaug还提供了图像标注的增强方法,可以保持标注与图像的一致性,确保增强后的图像仍然适用于相应的任务和模型训练。 通过imgaug进行图像数据增强处理可以有效提高模型的鲁棒性和泛化能力。增强后的数据集能够捕捉到更多的样本变化,使模型更具有适应性。同时,imgaug的使用简单灵活,开源且免费,因此被广泛应用于计算机视觉的相关研究和实践中。 总而言之,imgaug是一个功能丰富的图像数据增强处理,它为我们提供了强大的工具和方法,可以帮助我们生成增强后的图像样本,提高模型的性能和效果。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值