• 深度学习中的图像增强合集


    引言

    图像增强是我们在深度学习领域中绕不开的一个话题,本文我们将讨论什么是图像增强,并在三个不同的 python 库中实现它,即 Keras、Pytorch 和 augmentation(专门用于图像增强的一个库)。所以第一个问题就是什么是图像增强以及常规的数据增强。

    什么是图像增强?

    增强是使规模或数量增大的动作或过程。

    在深度学习中,深度网络需要大量的训练数据来很好地归纳和达到良好的准确性。但在某些情况下,图像数据不够大。在这种情况下,我们使用一些技术来增加我们的训练数据。它人为地创建训练数据,使用诸如随机旋转、位移、剪切和翻转等技术处理给定的数据(我们将在后面讨论其中的一些)。

    图像增强是为了训练我们的深度学习模型而产生新图像的过程。这些新的图像是使用现有的训练图像生成的,因此我们不必手动收集它们。

    不同的图像增强技术

    我们可以使用各种技术来增强图像。例如:

    空间增强

    · 缩放

    · 翻转

    · 旋转

    · 剪切

    · 平移

    像素增强

    · 亮度

    · 对比度

    · 饱和度

    · 色调

    深度学习中的图像增强

    在深度学习中,数据增强是一种常见的做法。因此,每个深度学习框架都有自己的增强方法,甚至有一个完整的库。例如,让我们看看如何使用 Keras、 PyTorch 和 Albumentations 中的内置方法应用图像增强。

    afaec2766ca81fa6bf746ce61a829c4a.jpeg

    1. Keras

    Keras 的 ImageDataGenerator 类提供了一种快速简便的方法来增强图像。它提供了许多不同的增强技术,如标准化、旋转、移位、翻转、亮度变化等等。使用 Keras 的 ImageDataGenerator 类的主要好处是它旨在提供实时数据增强。这意味着它会在您的模型处于训练阶段时生成增强图像。

    ImageDataGenerator 类确保模型在每个时期接收图像的新变化。但它只返回转换后的图像,并没有将它们添加到原始图像数据集中(如果加入到原始数据集,那么模型将多次处理原始图像,这肯定会使我们的模型过拟合)。 ImageDataGenerator 的另一个优点是它的内存占用量很低,这是因为不使用此类,我们一次加载所有图像。但是在使用它时,我们批量加载图像,这节省了大量内存。

    它支持一系列的图像增强方法,现在我们将专注于五种主要类型的方法,如下所示:

    · 通过 width_shift_range 和 height_shift_range 参数进行图像位移增强。

    · 通过 horizontal_flip 和 vertical_flip 参数进行图像翻转增强。

    · 通过 rotation_range 参数进行图像旋转增强。

    · 通过 brightness_range 参数进行图像亮度增强。

    · 通过 zoom_range 参数进行图像缩放增强。

    如下所示,我们可以构造 ImageDataGenerator 类的实例。

    1. from keras.preprocessing.image import ImageDataGenerator, array_to_img, img_to_array, load_img
    2. img = load_img('path_directory/img.jpg')
    3. from numpy import expand_dims
    4. from keras.preprocessing.image import load_img
    5. from keras.preprocessing.image import img_to_array
    6. from keras.preprocessing.image import ImageDataGenerator
    7. import matplotlib.pyplot as plt
    8. # load the image
    9. plt.figure(figsize=(45,30))
    10. # convert to numpy array
    11. data = img_to_array(img)
    12. # expand dimension to one sample
    13. samples = expand_dims(data, 0)
    14. # create image data augmentation generator
    15. datagen = ImageDataGenerator(featurewise_center=True,rotation_range=(0-30),width_shift_range=0.2,
    16. height_shift_range=0.2,brightness_range=[0.5,1.5],
    17. shear_range=0.2, zoom_range=0.2,channel_shift_range=0.2,
    18. horizontal_flip=True, vertical_flip=True,fill_mode='nearest')
    19. # prepare iterator
    20. it = datagen.flow(samples, batch_size=1)
    21. # generate samples and plot
    22. for i in range(6):
    23. # define subplot
    24. plt.subplot(330 + 1 + i)
    25. # generate batch of images
    26. batch = it.next()
    27. # convert to unsigned integers for viewing
    28. image = batch[0].astype('uint8')
    29. # plot raw pixel data
    30. plt.imshow(image)
    31. # show the figure
    32. plt.show()

    最终将生成如下所示的随机增强图像,并将其提供给模型。

    11b450469fd99419b1bd3477b8c1e445.png

    2.Pytorch

    PyTorch 是一个基于 Python 的库,有助于构建深度学习模型并在各种应用程序中使用它们。但它不仅仅是一个深度学习库,还是一个科学计算库。

    使用 PyTorch 的主要优点是我们可以对选定的图像单独应用图像增强技术。

    从导入图像开始,我们将定义 imshow() 函数来可视化实际和转换后的图像。

    缩放:在缩放或调整大小时,将图像调整为给定的大小。

    1. # scaling
    2. loader_transform = transforms.Resize((500,500))
    3. imshow('path_directory/img.jpg', loader_transform)

    2abe27c36d4d2a676ec19af9b7ab3cfc.png

    裁剪:在裁剪中,选择图像的一部分,例如在给定的示例中,返回中心裁剪的图像。

    1. # cropping
    2. loader_transform = transforms.CenterCrop(size=(600,600))
    3. imshow('path_diectory/img.jpg', loader_transform)

    e510153765c83d344d01f986ab6186bc.png

    翻转:在翻转时,图像被水平或垂直翻转。

    1. # horizontal flip with probability 1 (default is 0.5)
    2. loader_transform = transforms.RandomHorizontalFlip(p=1)
    3. imshow('path_directory/img.jpg', loader_transform)

    f439aa45172dfdbd2e0c3a6d0ef062a3.png

    像素增强:像素增强是通过更改图像的像素值来改变图像的颜色属性。

    1. img = PIL.Image.open('path_directory/img.jpg')
    2. fig, ax = plt.subplots(2, 2, figsize=(16, 10))
    3. # brightness
    4. loader_transform1 = transforms.ColorJitter(brightness=2)
    5. img1 = loader_transform1(img)
    6. ax[0, 0].set_title(f'brightness')
    7. ax[0, 0].imshow(img1)
    8. # contrast
    9. loader_transform2 = transforms.ColorJitter(contrast=2)
    10. img2 = loader_transform2(img)
    11. ax[0, 1].set_title(f'contrast')
    12. ax[0, 1].imshow(img2)
    13. # saturation
    14. loader_transform3 = transforms.ColorJitter(saturation=2)
    15. img3 = loader_transform3(img)
    16. ax[1, 0].set_title(f'saturation')
    17. ax[1, 0].imshow(img3)
    18. fig.savefig('color augmentation', bbox_inches='tight')
    19. # hue
    20. loader_transform4 = transforms.ColorJitter(hue=0.2)
    21. img4 = loader_transform4(img)
    22. ax[1, 1].set_title(f'hue')
    23. ax[1, 1].imshow(img4)
    24. fig.savefig('color augmentation', bbox_inches='tight')

    6733a6621a4619af464dafff88431908.png

    3. Albumentation

    Albumentations 是一种计算机视觉工具,可提高深度卷积神经网络的性能。Albumentations 是一个 Python 库,用于快速灵活的图像增强。它有效地实现了丰富多样的图像变换操作,这些操作针对性能进行了优化,同时为不同的计算机视觉任务提供简洁而强大的图像增强接口,包括对象分类、分割和检测。

    1. #importing all required libraries
    2. import cv2
    3. import random
    4. from matplotlib import pyplot as plt
    5. import albumentations as A
    6. image = cv2.imread('/content/drive/MyDrive/sunil.jpg')
    7. image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)

    翻转

    1. transform = A.HorizontalFlip(p=0.5)
    2. random.seed(7)
    3. augmented_image = transform(image=image)['image']
    4. plt.imshow(augmented_image)

    8ff081130b19a17d02fbec4aa8c7421a.png

    旋转

    1. transform = A.ShiftScaleRotate(p=0.5)
    2. random.seed(7)
    3. augmented_image = transform(image=image)['image']
    4. plt.imshow(augmented_image)

    6bb8d1f1ad88da7298384afa46d93176.png

    组合增强

    1. transform = A.Compose([
    2. A.RandomCrop(width=500, height=500),
    3. A.RandomBrightnessContrast(p=0.2),
    4. ])
    5. random.seed(7)
    6. augmented_image = transform(image=image)['image']
    7. plt.imshow(augmented_image)

    668c52e20547aabad58ac698942e15ee.png

    总结

    在本文中,我们了解了如何在训练深度学习神经网络时使用图像数据增强。了解如何将图像增强技术应用于扩展训练数据集,以提高模型的性能和泛化能力。并且知道如何使用 Keras、Pytorch 和 Albumentation 库来对图像进行数据增强。

    ·  END  ·

    HAPPY LIFE

    3672f32aa030a5f44549250c85696698.png

  • 相关阅读:
    netty系列之:来,手把手教你使用netty搭建一个DNS tcp服务器
    19c-rac环境安装AHF
    【深度学习】吴恩达课程笔记(五)——超参数调试、batch norm、Softmax 回归
    W5100S-EVB-PICO通过SNTP获取网络时间(十一)
    MySQL数据库进阶第五篇(锁)
    Multitouch 1.27.28 免激活版 mac电脑多点触控手势增强工具
    docker容器运行成功但无法访问,原因分析及对应解决方案(最新,以Tomcat为例,亲测有效)
    048-第三代软件开发-数据回放
    JUC——并发编程—第三部分
    LLM - 大语言模型的预训练数据(Dataset) 概述
  • 原文地址:https://blog.csdn.net/weixin_38739735/article/details/134237779