预处理图像以进行深度学习
要训练网络并基于新数据进行预测,您的图像必须与网络的输入大小相匹配。如果您需要调整图像的大小以匹配网络,则您可以将数据重新缩放或裁剪到所需的大小。
通过对数据应用随机增强,您实际上是增加了训练数据量。增强还使您能够训练网络,使其在图像数据失真时仍保持稳定。例如,您可以对输入图像添加随机旋转,使网络不会因输入图像中存在旋转而改变。augmentedImageDatastore
提供了一种方便的方法,可以将一组有限的增强应用于二维图像来解决分类问题。
对于更高级的预处理操作,为了对图像进行预处理以解决回归问题,或者为了对三维体图像进行预处理,您可以从内置数据存储开始。您还可以使用 transform
和 combine
函数,根据自己的管道对图像进行预处理。
使用重新缩放和裁剪调整图像大小
您可以将图像数据存储为数值数组、ImageDatastore
对象或表。ImageDatastore
使您能够从太大而无法放入内存的图像集合中分批导入数据。您可以使用增强的图像数据存储或经过调整大小的四维数组进行训练、预测和分类。您只能将经过调整大小的三维数组用于预测和分类。
有两种方法可以调整图像数据的大小以匹配网络的输入大小。
重新缩放,即将图像的高度和宽度乘以缩放因子。如果缩放因子在垂直和水平方向不相同,则重新缩放会更改像素的空间范围和纵横比。
裁剪,即提取图像的子区域并保留每个像素的空间范围。您可以从图像的中心或随机位置裁剪图像。
用于调整大小的选项 | 数据格式 | 用于调整大小的函数 | 示例代码 |
---|---|---|---|
重新缩放 |
| imresize |
im = imresize(I,outputSize);
|
| augmentedImageDatastore |
auimds = augmentedImageDatastore(outputSize,I);
| |
裁剪 |
| imcrop (Image Processing Toolbox) |
im = imcrop(I,rect);
|
| imcrop3 (Image Processing Toolbox) |
im = imcrop3(I,cuboid);
| |
| augmentedImageDatastore |
auimds = augmentedImageDatastore(outputSize,I,'OutputSizeMode',m);
将 将 |
用随机几何变换增强图像进行训练
对于图像分类问题,您可以使用 augmentedImageDatastore
通过调整大小、旋转、翻转、剪切和平移变换的随机组合来增强图像。
下图显示 trainNetwork
如何使用增强的图像数据存储来变换每轮的训练数据。当您使用数据增强时,在每轮训练中使用每个图像的一个随机增强版本。有关工作流的示例,请参阅Train Network with Augmented Images。
指定训练图像。
通过创建
imageDataAugmenter
,配置图像变换选项,如旋转角度范围以及是否随机应用翻转。提示
要预览应用于示例图像的变换,请使用
augment
函数。创建一个
augmentedImageDatastore
。指定训练图像、输出图像的大小以及imageDataAugmenter
。输出图像的大小必须与网络的imageInputLayer
的大小兼容。训练网络,将增强的图像数据存储指定为
trainNetwork
的数据源。对于训练的每次迭代,增强的图像数据存储对训练数据的小批量中的图像应用随机组合的变换。当您使用增强的图像数据存储作为训练图像的数据源时,数据存储会随机扰动每轮的训练数据,因此每轮使用的数据集略有不同。每轮的训练图像的实际数量不变。经过变换的图像不会存储在内存中。
使用内置数据存储执行附加图像处理运算
一些数据存储在读取一批数据时会执行特定且有限的图像预处理操作。下表中列出了这些特定于应用的数据存储。您可以将这些数据存储用作使用 Deep Learning Toolbox™ 的深度学习应用情形的训练、验证和测试数据集的数据源。所有这些数据存储都以 trainNetwork
支持的格式返回数据。
数据存储 | 描述 |
---|---|
augmentedImageDatastore | 应用随机仿射几何变换,包括调整大小、旋转、翻转、剪切和平移,来训练深度神经网络。有关示例,请参阅使用预训练网络进行迁移学习。 |
pixelLabelImageDatastore (Computer Vision Toolbox) | 将相同的仿射几何变换应用于图像和对应的真实值标签,用于训练语义分割网络(需要 Computer Vision Toolbox™)。有关示例,请参阅使用深度学习进行语义分割。 |
randomPatchExtractionDatastore (Image Processing Toolbox) | 从图像或像素标签图像中提取多对随机补片(需要 Image Processing Toolbox™)。您可以选择对各对补片应用相同的随机仿射几何变换。有关示例,请参阅使用深度学习增加图像分辨率。 |
denoisingImageDatastore (Image Processing Toolbox) | 应用随机生成的高斯噪声来训练去噪网络(需要 Image Processing Toolbox)。 |
通过组合和变换来应用自定义图像处理管道
要执行比特定于应用的数据存储提供的操作更常见和更复杂的图像预处理操作,您可以使用 transform
和 combine
函数。有关详细信息,请参阅Datastores for Deep Learning。
用图像数据变换数据存储
transform
函数根据您定义的变换函数来变换基础数据存储读取的数据,从而创建一个经过更改的数据存储形式,称为基础数据存储。
自定义变换函数必须接受基础数据存储的 read
函数返回的格式的数据。对于 ImageDatastore
中的图像数据,格式取决于 ReadSize
属性。
当
ReadSize
为 1 时,变换函数必须接受整数数组。数组的大小与ImageDatastore
中图像的类型一致。例如,灰度图像的维度为 m×n,真彩色图像的维度为 m×n×3,具有 c 个通道的多光谱图像的维度为 m×n×c。当
ReadSize
大于 1 时,变换函数必须接受由图像数据组成的元胞数组。每个元素对应于批量中的一个图像。
transform
函数必须返回与网络的输入大小相匹配的数据。transform
函数不支持一对多观测值映射。
提示
当基础 ImageDatastore
读取一批 JPG 或 PNG 图像文件时,transform
函数支持预取。对于这些图像类型,请不要使用 ImageDatastore
的 readFcn
参数来应用图像预处理,因为此选项通常会显著减慢速度。如果您使用自定义读取函数,则 ImageDatastore
不会预取。
将数据存储与图像数据结合使用
combine
函数将从多个数据存储读取的数据串联起来,并保持数据存储之间的奇偶校验。
将数据串联为一个包含两列的表或一个包含两列的元胞数组,用于训练具有单一输入的网络,如图像到图像回归网络。
将数据串联为一个包含 (
numInputs
+1) 个列的元胞数组,用于训练具有多个输入的网络。
另请参阅
trainNetwork
| imresize
| transform
| combine
| ImageDatastore
相关示例
- Train Network with Augmented Images
- 训练深度学习网络以对新图像进行分类
- Create and Explore Datastore for Image Classification
- 为图像到图像的回归准备数据存储