数据增强(Data Augmentation)

来源:Coursera吴恩达深度学习课程

大部分的计算机视觉任务需要很多的数据,所以数据增强(data augmentation)是经常使用的一种技巧来提高计算机视觉系统的表现。计算机视觉是一个相当复杂的工作,输入图像的像素值,然后弄清楚图片中有什么,似乎你需要学习一个复杂方程(complicated function)来做这件事。在实践中,更多的数据对大多数计算机视觉任务都有所帮助。但是,当下计算机视觉的主要问题是没有办法得到充足的数据(can’t get enough data)。这就意味着当你训练计算机视觉模型的时候,数据增强会有所帮助无论你是使用迁移学习,使用别人的预训练模型开始,或者从源代码开始训练模型。下面来看一下计算机视觉中常见的数据增强的方法。

数据增强(Data Augmentation)_第1张图片

如上图第一行,或许最简单的数据增强方法就是垂直镜像对称(mirroring on the vertical axis),假如,训练集中有这张图片,然后将其翻转得到右边的图像。对大多数计算机视觉任务,左边的图片是猫,然后镜像对称仍然是猫,如果镜像操作保留了图像中想识别的物体的前提下,这是个很实用的数据增强技巧。

如上图第二行,另一个常用的技巧是随机裁剪(random cropping),给定一个数据集,然后开始随机裁剪。随机裁剪并不是一个完美的数据增强的方法,如果你随机裁剪的那一部分(红色方框标记部分),这部分看起来不像猫。但在实践中,这个方法还是很实用的,随机裁剪构成了很大一部分的真实图片。

镜像对称和随机裁剪是经常被使用的。当然,理论上,你也可以使用旋转(rotation)、剪切(shearing)局部弯曲(local warping)等等。当然使用这些方法并没有坏处,尽管在实践中,因为太复杂了所以使用的很少。

数据增强(Data Augmentation)_第2张图片

还有一种常用方法是彩色转换(color shifting),有这样一张图片,然后给R、G和B三个通道上加上不同的失真值(distortions)。在这个例子中(中间第一张图片),给红色、蓝色通道加值(+20),绿色通道减值(-20)。红色和蓝色会产生紫色,使整张图片看起来偏紫。(中间第二张图片)我们少用了一点红色(-20),更多的绿色和蓝色色调(+20),这就使得图片偏黄一点(yellowish)。(中间第三张图片)使用了更多的蓝色(+50),仅仅多了点红色(+5)。在实践中,R、G和B的值是根据某种概率分布来决定的。这么做的理由是,可能阳光会有一点偏黄,或者是灯光照明有一点偏黄,这些可以轻易的改变图像的颜色,但是对猫的识别,或者是内容的识别,以及标签,还是保持不变的。颜色失真或者是颜色变换方法,这样会使得你的学习算法对照片的颜色更改更具鲁棒性

上图右侧的红色标记是对更高级的学习者的一些注意提醒,也可以不理解。对R、G和B有不同的采样方式,其中一种影响颜色失真的算法是PCA,即主成分分析(Principles Components Analysis),Andrew在Coursera ml-class.Org机器学习这门课中讲过。但具体颜色改变的细节在AlexNet的论文中有时候被称作PCA颜色增强(PCA color augmentation),大概含义是,如果你的图片呈现紫色,即主要含有红色和蓝色,绿色很少,然后PCA颜色增强算法就会对红色和蓝色增减很多,绿色变化相对少一点,所以使总体的颜色保持一致。如果这些你都不懂,不需要担心,可以在网上搜索(search online)你想要了解的东西,如果你愿意的话可以阅读AlexNet论文中的细节,你也能找到PCA颜色增强的开源实现方法,然后直接使用它。

数据增强(Data Augmentation)_第3张图片

 

如果数据存在硬盘(hard disk)上,然后使用符号(uses symbol),如上图,用圆桶来表示你的硬盘。如果你有很多数据,你可能会使用CPU线程,然后它不停的从硬盘中读取数据,所以你有一个从硬盘过来的图片数据流。用CPU线程来实现这些失真变形,可以是随机裁剪、颜色变化,或者是镜像。但是对每张图片得到对应的某一种变形失真形式,对其进行镜像变换,以及使用颜色失真,这张图最后会颜色变化,从而得到不同颜色的猫。与此同时,CPU线程持续加载数据,然后实现任意失真变形,从而构成批数据或者最小批数据,这些数据持续的传输给其他线程(thread)或者其他的进程(progress),然后开始训练,可以在CPU或者GPU上实现训一个大型网络的训练。常用的实现数据增强的方法是使用一个线程或者是多线程。

这就是数据增强,与训练深度神经网络的其他部分类似,在数据增强过程中也有一些超参数,比如说颜色变化了多少,以及随机裁剪的时候使用的参数。与计算机视觉其他部分类似,一个好的开始可能是使用别人的开源实现,了解他们如何实现数据增强。当然如果你想获得更多的不变特性(capture more invariances),而其他人的开源实现并没有实现这个,你也可以去调整这些参数。

说明:记录学习笔记,如果错误欢迎指正!转载请联系我。

你可能感兴趣的:(吴恩达深度学习笔记,深度学习知识点储备,笔记,算法,深度学习,机器学习,计算机视觉,人工智能)