深度学习

理解和使用深度学习网络

使用深度学习数据增强图像分类应用程序

这篇文章来自总局品牌博士和能力的工程和计算机科学教授。ACM总局是一个杰出的演说家,书的作者,2019 - 20 AAAS后者的家伙。他也是一个MATLAB迷,使用MATLAB 20多年来在他的教室。你也可以在Twitter上关注他(@ProfessorOge)
深度学习的普及,图像分类和其他许多计算机视觉任务可以归结,部分的可用性非常大量的训练数据。机器学习中的普遍的共识和深度学习社区,所有其他条件相同的情况下,模型训练数据越多越好(,因此,它的性能在测试集)。
在许多情况下,然而,你可能没有一个足够大的数据集训练模型,可以学习所需的类,将推广到新的例子,即不会overfit训练集,这往往是由于和困难成本与图像的采集和标签来构建大训练集,成本是否表达了对美元的比价,人类的努力,计算资源,或者过程中消耗的时间。
在这篇文章里我们将专注于技术数据增加,用于扩大现有的数据集的方式更具有成本效益的进一步的数据收集。在图像分类的情况下应用程序中,通常是使用简单的几何变换技术完成数据扩充应用到原始图像,如裁剪、旋转、调整,翻译,和翻转,我们将更详细地讨论。
增加数据的有效性和福利都进行了广泛的文献记载:它已经表明,数据增加可以作为规范防止过度拟合在神经网络[1,2]和提高性能在不平衡类问题[3]。此外,赢得高度可见的挑战,比赛在图像分类方法(如ImageNet)这些年来使用数据增大。这也激励最近研制的方法允许一个神经网络学习对应最能提高分类器[4]。

在MATLAB数据增加实现

图像数据增加可以以两种方式实现[5]:
  1. 离线增大:由执行转换的图片(可能使用MATLAB的批量图像处理功能[6])并将结果保存在磁盘上,从而增加了数据集的大小等于转换的数量表现的一个因素。这可以接受较小的数据集。
  2. 在线增加动态增强:由mini-batches上执行转换,将美联储模型在训练。这种方法更适合更大的数据集,以避免潜在的爆炸性增加存储需求。
MATLAB对在线图像数据提供了一个优雅的和易于使用的解决方案,它由两个主要组件组成:
  • augmentedImageDatastore:生成批次的新图像,经过预处理的原始训练图像使用旋转等操作,翻译,剪切,调整,或反射(翻转)。
  • imageDataAugmenter:用于配置选中的图像数据增强的预处理操作。
下面的图像数据增加在MATLAB使用选项可用imageDataAugmenter对象:
  • 旋转
  • 反映在X(左右翻转)或Y轴(倒翻转)
  • 横向和纵向扩展
  • 水平和垂直剪切
  • 水平和垂直的翻译
在这里值得一提的几个点:
  • 当你初始化imageDataAugmenter变量,您可以选择一个或多个选项,例如,只有X和Y反射和横向和纵向扩展,如下面代码片段。
imageAugmenter = imageDataAugmenter (…“RandXReflection”,真的,…“RandXScale”, [1, 2],……“RandYReflection”,真的,…“RandYScale”, [1, 2]);
  • 的值作为参数传递给的一些选项(例如,X和Y的(1 2)扩展上图)是为了代表范围的值从一个随机样品将在预处理步骤,如果转换应用到一个图像。
  • 还有一个选项imageDataAugmenter提供一个函数,确定为一个特定的参数值的范围,例如随机旋转之间的5和5度(见下面的代码片段)。
imageAugmenter = imageDataAugmenter (RandRotation, @() 5 + 10 *兰德);
  • 有两种方法来访问实际的预处理图像(例如,检查和显示):
  1. 从R2018a,有读/预览上的方法augmentedImageDatastore允许您获得一个示例批处理的图片(请参见下面的代码片段,并产生一种平铺的图像如在图1中,使用花分类示例:[8])
imageAugmenter = imageDataAugmenter (RandRotation, @() -20 + 40 *兰德);augImds =…augmentedImageDatastore(图象尺寸、imd DataAugmentation, imageAugmenter);%预览扩增结果batchedData =预览(augImds);imshow (imtile (batchedData.input))
  1. 从R2018b开始,添加了一个新的方法(增加)imageDataAugmenter,有两个目的:它的功能作为一个独立的函数对象以及一个配置对象augmentedImageDatastore(见下面的代码片段,它可能* *产生左右翻转图像等的图2)。
在= imread ((' peppers.png '));8月= imageDataAugmenter (“RandXReflection”,真正的);=增加(8月);图中,蒙太奇({,})
* *自随机应用到输入图像翻转操作,你可能需要多次运行代码片段,直到一个实际发生翻转。

图1所示。预览图像增强处理随机旋转-20至20度。

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

augmentedImageDatastoreimageDataAugmenter工作流集成神经网络的训练,这包括[7]:
  1. 选择你的训练图像,您可以存储作为一个ImageDatastore,对象用于管理图像文件的集合,其中每个个体形象适合在内存中,但是整个集合的图片不一定适合。这个功能,可用R2015b以来,是为了读批次更快的处理图像的机器学习和计算机视觉应用。
  2. 选择和配置所需的图像预处理选项(例如,旋转角度范围,在度,或翻译水平距离范围,以像素为单位,从特定的值将被随机)并创建一个imageDataAugmenter对象初始化和适当的语法。
  3. 创建一个augmentedImageDatastore,指定训练图像,输出图像的大小,和imageDataAugmenter要使用。输出图像的大小必须符合预期的大小的输入层网络。
  4. 训练网络,指定augmentedImageDatastore作为数据源trainNetwork函数。为每个迭代的训练,增强图像数据存储训练数据的生成一个mini-batch应用随机变换的基础数据的原始图像augmentedImageDatastore了(见图3)。
图3所示。训练一个网络使用一个图像增强的典型工作流数据存储(从[7])。
对于一个完整的示例使用一个小的数据集的图像分类问题花的图片,有或没有图像数据,检查我的MATLAB文件交换贡献[8]。
总结、数据增加可能是一个有用的技术在处理不到理想的大量的训练数据。下面的参考资料提供的链接材料来了解更多细节。
再次感谢总局会深入到数据增大。总局的你有什么问题吗?请在下面留下你的评论!

引用

|
  • 打印
  • 发送电子邮件

评论

留下你的评论,请点击在这里MathWorks账户登录或创建一个新的。