深度学习中的图像增强

简介: 深度学习中的图像增强

引言


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


什么是图像增强?


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


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


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

不同的图像增强技术


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


空间增强


· 缩放
· 翻转

· 旋转
· 剪切
· 平移


像素增强


· 亮度
· 对比度
· 饱和度
· 色调


深度学习中的图像增强


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

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 类的实例。

    from keras.preprocessing.image import ImageDataGenerator, array_to_img, img_to_array, load_img
    img = load_img('path_directory/img.jpg')
    from numpy import expand_dims
    from keras.preprocessing.image import load_img
    from keras.preprocessing.image import img_to_array
    from keras.preprocessing.image import ImageDataGenerator
    import matplotlib.pyplot  as plt
    # load the image
    plt.figure(figsize=(45,30))
    # convert to numpy array
    data = img_to_array(img)
    # expand dimension to one sample
    samples = expand_dims(data, 0)
    # create image data augmentation generator
    datagen = ImageDataGenerator(featurewise_center=True,rotation_range=(0-30),width_shift_range=0.2,
                                 height_shift_range=0.2,brightness_range=[0.5,1.5],
                                 shear_range=0.2, zoom_range=0.2,channel_shift_range=0.2,
                                 horizontal_flip=True, vertical_flip=True,fill_mode='nearest')
    # prepare iterator
    it = datagen.flow(samples, batch_size=1)
    # generate samples and plot
    for i in range(6):
      # define subplot
      plt.subplot(330 + 1 + i)
      # generate batch of images
      batch = it.next()
      # convert to unsigned integers for viewing
      image = batch[0].astype('uint8')
      # plot raw pixel data
      plt.imshow(image)
    # show the figure
    plt.show()

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

    2.Pytorch


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


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


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


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


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

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


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

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

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

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

        img = PIL.Image.open('path_directory/img.jpg')
        fig, ax = plt.subplots(2, 2, figsize=(16, 10))
        # brightness
        loader_transform1 = transforms.ColorJitter(brightness=2)
        img1 = loader_transform1(img)
        ax[0, 0].set_title(f'brightness')
        ax[0, 0].imshow(img1)
        # contrast
        loader_transform2 = transforms.ColorJitter(contrast=2)
        img2 = loader_transform2(img)
        ax[0, 1].set_title(f'contrast')
        ax[0, 1].imshow(img2)
        # saturation
        loader_transform3 = transforms.ColorJitter(saturation=2)
        img3 = loader_transform3(img)
        ax[1, 0].set_title(f'saturation')
        ax[1, 0].imshow(img3)
        fig.savefig('color augmentation', bbox_inches='tight')
        # hue
        loader_transform4 = transforms.ColorJitter(hue=0.2)
        img4 = loader_transform4(img)
        ax[1, 1].set_title(f'hue')
        ax[1, 1].imshow(img4)
        fig.savefig('color augmentation', bbox_inches='tight')

        3. Albumentation


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

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

          翻转

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

            旋转

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

              组合增强


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

              总结


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

              相关文章
              |
              3月前
              |
              机器学习/深度学习 TensorFlow 算法框架/工具
              深度学习中的图像风格迁移
              【9月更文挑战第26天】本文将探讨如何利用深度学习技术,实现图像风格的转换。我们将从基础的理论出发,然后逐步深入到具体的实现过程,最后通过代码实例来展示这一技术的实际应用。无论你是初学者还是有经验的开发者,都能在这篇文章中找到有价值的信息。让我们一起探索深度学习的奥秘吧!
              |
              2月前
              |
              机器学习/深度学习 人工智能 TensorFlow
              利用深度学习实现图像风格迁移
              【8月更文挑战第73天】本文通过深入浅出的方式,介绍了一种使用深度学习技术进行图像风格迁移的方法。我们将探讨如何将一张普通照片转化为具有著名画作风格的艺术作品。文章不仅解释了背后的技术原理,还提供了一个实际的代码示例,帮助读者理解如何实现这一过程。
              |
              1月前
              |
              机器学习/深度学习 编解码 算法
              什么是超分辨率?浅谈一下基于深度学习的图像超分辨率技术
              超分辨率技术旨在提升图像或视频的清晰度,通过增加单位长度内的采样点数量来提高空间分辨率。基于深度学习的方法,如SRCNN、VDSR、SRResNet等,通过卷积神经网络和残差学习等技术,显著提升了图像重建的质量。此外,基于参考图像的超分辨率技术通过利用高分辨率参考图像,进一步提高了重建图像的真实感和细节。
              |
              1月前
              |
              机器学习/深度学习 人工智能 自动驾驶
              深度学习的奇迹:如何用神经网络识别图像
              【10月更文挑战第33天】在这篇文章中,我们将探索深度学习的奇妙世界,特别是卷积神经网络(CNN)在图像识别中的应用。我们将通过一个简单的代码示例,展示如何使用Python和Keras库构建一个能够识别手写数字的神经网络。这不仅是对深度学习概念的直观介绍,也是对技术实践的一次尝试。让我们一起踏上这段探索之旅,看看数据、模型和代码是如何交织在一起,创造出令人惊叹的结果。
              31 0
              |
              3月前
              |
              机器学习/深度学习 并行计算 PyTorch
              图像检测【YOLOv5】——深度学习
              Anaconda的安装配置:(Anaconda是一个开源的Python发行版本,包括Conda、Python以及很多安装好的工具包,比如:numpy,pandas等,其中conda是一个开源包和环境管理器,可以用于在同一个电脑上安装不同版本的软件包,并且可以在不同环境之间切换,是深度学习的必备平台。) 一.Anaconda安装配置. 1.首先进入官网:https://repo.anaconda.com,选择View All Installers. 2.打开看到的界面是Anaconda的所以安装包版本,Anaconda3就代表是Python3版本,后面跟的是发行日期,我选择了最近的2022
              76 28
              |
              2月前
              |
              机器学习/深度学习 数据挖掘 数据处理
              深度学习之卫星图像中的环境监测
              基于深度学习的卫星图像环境监测是指通过使用深度学习模型处理和分析来自卫星的遥感数据,以实现对地球环境的自动化监测和分析。这项技术极大提升了环境监测的效率、精度和规模,应用于气候变化研究、生态保护、自然灾害监测、城市扩张评估等多个领域。
              126 0
              |
              3月前
              |
              机器学习/深度学习 算法 搜索推荐
              利用深度学习实现图像风格迁移
              【9月更文挑战第21天】本文将介绍一种使用深度学习技术,特别是卷积神经网络(CNN)和生成对抗网络(GAN)来实现图像风格迁移的方法。我们将探索如何将这些技术应用于艺术创作,以及它们如何影响现代视觉艺术的发展。
              |
              3月前
              |
              机器学习/深度学习 自然语言处理 计算机视觉
              深度学习之文本引导的图像编辑
              基于深度学习的文本引导的图像编辑(Text-Guided Image Editing)是一种通过自然语言文本指令对图像进行编辑或修改的技术。
              64 8
              |
              3月前
              |
              机器学习/深度学习 自然语言处理 并行计算
              深度学习之图像描述生成
              基于深度学习的图像描述生成(Image Captioning)是一种将计算机视觉与自然语言处理结合的任务,其目标是通过自动生成自然语言来描述输入的图像。该技术能够理解图像中的视觉内容,并生成相应的文本描述,广泛应用于视觉问答、辅助盲人、自动视频字幕生成等领域。
              174 7
              |
              2月前
              |
              机器学习/深度学习 PyTorch API
              深度学习入门:卷积神经网络 | CNN概述,图像基础知识,卷积层,池化层(超详解!!!)
              深度学习入门:卷积神经网络 | CNN概述,图像基础知识,卷积层,池化层(超详解!!!)