深度学习

理解和使用深度学习网络

基于深度学习的图像分类应用数据增强

本文来自Oge Marques,博士工程与计算机科学教授。Oge是ACM杰出演讲者,书的作者,2019-20美国科学促进会莱什纳研究员.他也是一个MATLAB爱好者,在他的课堂上使用MATLAB已经超过20年了。你也可以关注他的推特(@ProfessorOge
深度学习在图像分类和许多其他计算机视觉任务中的普及,在一定程度上可以归因于大量训练数据的可用性。机器学习和深度学习社区的普遍共识是,在所有其他条件相同的情况下,你拥有的训练数据越多,你的模型(以及它在测试集上的表现)就越好。
然而,在很多情况下,你可能没有足够大的数据集来训练一个模型,这个模型可以学习所需的类,并且可以很好地泛化到新的例子,也就是说,不会过度拟合到训练集。这通常是由于困难和成本与图像的获取和标记相关联,以构建大型训练集,无论成本是用美元、人力、计算资源还是过程中消耗的时间来表示的。
在这篇博文中,我们将重点介绍一种叫做数据增加,以一种比进一步收集数据更具成本效益的方式来扩充现有数据集。在图像分类应用程序中,数据增强通常使用应用于原始图像的简单几何变换技术来完成,例如裁剪、旋转、调整大小、转换和翻转,我们将在下面详细讨论这些技术。
数据增强的有效性和好处已经在文献中得到了广泛的记录:数据增强可以作为一个正则器来防止神经网络中的过拟合[1,2],并提高不平衡类问题[3]的性能。此外,多年来,在图像分类(如ImageNet)中,高可见性挑战和比赛的获胜方法都使用了数据增强。这也推动了最近关于开发方法的工作,以允许神经网络学习增强,从而最好地改进分类器[4]。

数据增强的MATLAB实现

图像数据增强可以通过两种方式实现[5]:
  1. 离线增大:它包括对图像执行转换(可能使用MATLAB的批处理图像处理功能[6]),并将结果保存在磁盘上,从而增加数据集的大小,其因素等于执行的转换的数量。对于较小的数据集,这是可以接受的。
  2. 在线增加动态增强:它包括在训练期间对将馈送给模型的小批量执行转换。这种方法适用于较大的数据集,以避免存储需求的潜在爆炸性增长。
MATLAB提供了一种简洁易用的在线图像数据增强解决方案,主要由两个部分组成:
  • augmentedImageDatastore:在对原始训练图像进行旋转、平移、剪切、调整大小或反射(翻转)等操作后,生成批量的新图像。
  • imageDataAugmenter:用于配置图像数据增强所选择的预处理操作。
下面的图像数据增强选项可在MATLAB中使用imageDataAugmenter对象:
  • 旋转
  • 围绕X轴(左右翻转)或Y轴(上下翻转)的反射
  • 水平和垂直缩放
  • 水平和垂直剪切
  • 水平和垂直平移
这里有几点值得一提:
  • 当你初始化imageDataAugmenter变量,您可以选择一个或多个选项,例如,只有X和Y反射和水平和垂直缩放,如下面的代码片段所示。
imageAugmenter = imageDataAugmenter(…'RandXReflection',真的,…“RandXScale”,[1,2],……'RandYReflection',真的,……“RandYScale”,[1,2]);
  • 作为参数传递给某些选项的值(例如,对于上面的X和Y缩放,[1 2])意味着表示a取值范围从中随机如果该转换应用于图像,则将在预处理步骤中选取样本。
  • 还有一个选项imageDataAugmenter提供确定特定参数值范围的函数,例如-5到5度之间的随机旋转(请参阅下面的代码片段)。
imageAugmenter = imageDataAugmenter('RandRotation',@() -5 + 10 * rand);
  • 有两种方式访问实际预处理图像(例如用于检查和显示):
  1. 从R2018a开始,有读取/预览方法augmentedImageDatastore它允许您获得一批示例图像(参见下面的代码片段,它使用花分类示例:[8]生成如图1所示的平铺图像)
imageAugmenter = imageDataAugmenter('RandRotation',@() -20+40*rand);augImds =…augmentedImageDatastore(图象尺寸、imd DataAugmentation, imageAugmenter);预览增强结果batchedData =预览(augImds);imshow (imtile (batchedData.input))
  1. 从R2018b开始,一个新的方法(augment)被添加到imageDataAugmenter,它有两个目的:它作为一个独立的函数对象和配置对象augmentedImageDatastore(参见下面的代码片段,它可能会**产生如图2所示的左右翻转图像)。
In = imread('pepper .png'));Aug = imageDataAugmenter('RandXReflection',true);Out = augment(Aug,In);数字,蒙太奇({In, Out})
**由于翻转操作是随机应用于输入图像,您可能必须运行片段多次,直到实际翻转发生。

图1所示。预览增强图像处理与随机旋转-20和20度之间。

图2所示。围绕垂直轴的随机反射('RandXReflection')的例子。

augmentedImageDatastoreimageDataAugmenter与神经网络训练工作流很好地结合,训练工作流由[7]组成:
  1. 选择您的训练图像,您可以将其存储为ImageDatastore,一个用于管理图像文件集合的对象,其中每个单独的图像都适合内存,但整个图像集合不一定适合。该功能自R2015b起可用,旨在读取批量图像,以便在机器学习和计算机视觉应用程序中更快地处理。
  2. 选择并配置所需的图像预处理选项(例如,旋转角度范围(以度为单位)或水平平移距离范围(以像素为单位),将从中随机选取特定值)并创建一个imageDataAugmenter用正确的语法初始化的对象。
  3. 创建一个augmentedImageDatastore,指定训练图像,输出图像的大小,和imageDataAugmenter被使用。输出图像的大小必须与网络输入层期望的大小兼容。
  4. 训练网络,指定augmentedImageDatastore的数据源trainNetwork函数。对于训练的每次迭代,增强图像数据存储通过对底层数据中的原始图像应用随机转换来生成一个小批量的训练数据augmentedImageDatastore(见图3)。
图3所示。使用增强图像数据存储(来自[7])训练网络的典型工作流。
关于使用花图像的小数据集的图像分类问题的完整示例,有和没有图像数据增强,请检查我的MATLAB文件交换贡献[8]。
总结,数据增强在处理不足理想量的训练数据时是一种有用的技术。下面的参考资料提供了了解更多细节的材料链接。
再次感谢Oge对数据增强的深入研究。你有什么问题要问奥格吗?请在下方评论!

参考文献

|
  • 打印
  • 发送电子邮件

评论

要发表评论,请点击此处登录到您的MathWorks帐户或创建一个新帐户。