参考来源–感兴趣请戳我戳我.
author是Bharath Raj。
以下是翻译内容,有部分删减,感兴趣的可以读原文,该blog仅供学习。笔耕不易,互相交流。
can my “state-of-the-art” neural network perform well with the meagre amount of data I have?
Yes.我们的优化目的,是当参数沿着正确的方向调整时,模型的loss可以达到最低。
How do I get more data, if I don’t have “more data”?
因此,为了获得更多数据,我们只需要对现有数据集进行微小改动。轻微更改,例如翻转或翻译或轮换。无论如何,我们的神经网络会认为这些是不同的图像。
卷积神经网络CNN,对放置在不同方向的对象,也能进行稳健的分类,即具有不变性的属性。更具体地,CNN对于平移,不同视角,尺度大小或光照等(或上述的组合)可以是不变的。
这基本上是数据增加的前提。在实际场景中,我们可能会在一组有限的条件下获取图像数据集。但是,我们的目标应用可能存在于各种条件下,例如不同的方向,位置,比例,亮度等。我们通过使用额外的合成对数据进行修改,并训练我们的神经网络来解释这些情况。
Can augmentation help even if I have lots of data?
是。它有助于增加数据集中的相关数据量。这与神经网络学习的方式有关。
Your neural network is only as good as the data you feed it.
Where do we augment data in our ML pipeline?
答案似乎很明显;我们在将数据提供给模型之前进行扩充吗?是的,但你有两个选择。一种选择是事先执行所有必要的转换,从根本上增加数据集的大小。另一种选择是在将小批量送到机器学习模型之前,在小批量上执行这些转换。
第一个选项称为离线扩充。对于相对较小的数据集,此方法是首选,因为您最终会将数据集的大小增加一个等于您执行的转换次数的因子(例如,通过翻转我的所有图像,我会增加数据集的大小系数为2)。
第二个选项称为在线增强,或即时增强。对于较大的数据集,此方法是首选,因为您无法承受大小的爆炸式增长。相反,您将对要提供给模型的迷你批次执行转换。一些机器学习框架支持在线增强,可以在GPU上加速。
Popular Augmentation Techniques
在本节中,我们将介绍一些常用但基本但功能强大的增强技术。在我们探索这些技术之前,为简单起见,让我们做一个假设。假设是,我们不需要考虑图像边界之外的东西。我们将使用以下技术,以便我们的假设是有效的。如果我们使用一种技术迫使我们猜出图像边界之外的东西,会发生什么?在这种情况下,我们需要插入一些信息。在我们介绍了增强类型之后,我们将详细讨论这个问题。对于这些技术中的每一种,我们还指定了数据集大小增加的因子(也称为数据增强因子)。
1、Flip
给你个图像自己体会!!!
# NumPy.'img' = A single image.
flip_1 = np.fliplr(img)
# TensorFlow. 'x' = A placeholder for an image.
shape = [height, width, channels]
x = tf.placeholder(dtype = tf.float32, shape = shape)
flip_2 = tf.image.flip_up_down(x)
flip_3 = tf.image.flip_left_right(x)
flip_4 = tf.image.random_flip_up_down(x)
flip_5 = tf.image.ra