深度学习中的图像增强
引言
图像增强是我们在深度学习领域中绕不开的一个话题,本文我们将讨论什么是图像增强,并在三个不同的 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 subplotplt.subplot(330 + 1 + i)# generate batch of imagesbatch = it.next()# convert to unsigned integers for viewingimage = batch[0].astype('uint8')# plot raw pixel dataplt.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 Aimage = 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 库来对图像进行数据增强。
· END ·
HAPPY LIFE
深度学习中的图像增强相关推荐
- 【技术综述】深度学习中的数据增强(下)
文章首发于微信公众号<有三AI> [技术综述]深度学习中的数据增强(下) 今天带来深度学习中的数据增强方法的下篇.我们将从以下几个方向入手.1,介绍一下什么是无监督的数据增强方法.2,简单 ...
- 深度学习中交叉熵_深度计算机视觉,用于检测高熵合金中的钽和铌碎片
深度学习中交叉熵 计算机视觉 (Computer Vision) Deep Computer Vision is capable of doing object detection and image ...
- 总结 62 种在深度学习中的数据增强方式
数据增强 数据增强通常是依赖从现有数据生成新的数据样本来人为地增加数据量的过程 这包括对数据进行不同方向的扰动处理 或使用深度学习模型在原始数据的潜在空间(latent space)中生成新数据点从而 ...
- gan 总结 数据增强_深度学习中的数据增强(下)
言有三 毕业于中国科学院,计算机视觉方向从业者,有三工作室等创始人 编辑 | 言有三 今天带来深度学习中的数据增强方法的下篇.我们将从以下几个方向入手.1,介绍一下什么是无监督的数据增强方法.2,简单 ...
- 机器学习知识总结 —— 12. 机器与深度学习中常用术语 [D-J]
文章目录 Darknet Data / 数据 Dataset / 数据集 Deploy / 部署 Differentiable / 可微的 Distributed / 分布式 Domain Speci ...
- 深度学习中的一些英文解释
A: (1)anchors:锚点.(anchors(锚点)定义在RPN网络中) B: (1)bounding box:预测边界框. (2)Botton-up 3D proposal generatio ...
- 深度学习中的优化算法之MBGD
之前在https://blog.csdn.net/fengbingchun/article/details/75351323 介绍过梯度下降,常见的梯度下降有三种形式:BGD.SGD.MBGD,它们的 ...
- 深度学习中的优化算法之BGD
之前在https://blog.csdn.net/fengbingchun/article/details/75351323 介绍过梯度下降,常见的梯度下降有三种形式:BGD.SGD.MBGD,它们的 ...
- 深度学习中的优化简介
深度学习算法在许多情况下都涉及到优化. 1. 学习和纯优化有什么不同 在大多数机器学习问题中,我们关注某些性能度量P,其定义于测试集上并且可能是不可解的.因此,我们只是间接地优化P.我们系统通过降低代 ...
最新文章
- 牛客题霸 NC19 子数组的最大累加和问题
- CSS 行内级元素和行内框
- 一起学习MVC(4)-entity SQL语句
- SQL Server数据库优化的几种方法.
- 系统架构设计师与系统分析师历年实体分析与解答下载_软考 系统架构设计师备考经验分享...
- 胶水语言概述(以Python为例)
- 解读神经网络十大误解,再也不会弄错它的工作原理
- Classic Shell不起作用(失效)的解决
- 故障:ID8003 的 bowser 错误日志
- 用Java给图片添加文字水印
- (整理)吊炸天的CNNs,这是我见过最详尽的图解!(上)
- excel空白单元格自动下下填充上一个单元格的值
- 机器学习案例(七):产品需求预测
- Python数据处理之一:数据读取
- 高新技术企业认定指导
- 【操作系统】IO管理
- 三星v700刷android,三星SM-V700一键救砖教程,轻松刷回官方系统
- Melis4.0[D1s]:1.启动流程(与adc按键初始化相关部分)跟踪笔记
- MATLAB 基础知识 数据类型 时间表 按行时间和变量类型选择时间表数据
- Python数据分析库pandas高级接口dt的使用