为什么在深度学习中通过减去数据集的图像均值而不是当前图像均值来规范化图像?


88

关于如何规范化图像有一些变体,但大多数似乎使用以下两种方法:

  1. 减去在所有图像上计算出的每个通道的平均值(例如 VGG_ILSVRC_16_layers
  2. 通过对所有图像计算的像素/通道相减(例如CNN_S,另请参见Caffe的参考网络

在我看来,自然的方法是将每个图像标准化。在宽广的日光下拍摄的图像比夜间拍摄的图像会引起更多的神经元放电,虽然它可以告诉我们时间,但我们通常关心的是边缘等处出现的更有趣的特征。

Pierre Sermanet在3.3.3中指出,局部对比度归一化将基于每个图像,但是我在所见过的任何示例/教程中都没有遇到过。我也看到了一个有趣的Quora问题WeiXu-Shen Wei的帖子,但是他们似乎并不支持上述两种方法。

我到底在想什么?这是颜色归一化问题还是有一篇论文可以真正解释为什么这么多人使用这种方法?


我不知道答案,但是您尝试过每种方法吗?他们的表演有什么不同吗?
user112758'5

@ user112758-实现它们有些痛苦(尤其是对于逐像素而言),我的经验是对每个图像进行归一化可以很好地工作,但是我的数据并不具有代表性。我将尝试进行归一化实验,但我很想知道这些奇怪的归一化程序背后的动机。
马克斯·高登

好的,也许您可​​以在caffe Google小组caffe GitHub问题中提出这个问题。我想将会有更多关于此主题的专家。
user112758's

Answers:


58

减去数据集平均值可“使”数据居中。此外,理想情况下,如果要将每个特征值归一化为z分数,最好也要除以该特征或像素的sttdev。

我们做这两种事情的原因是因为在训练网络的过程中,我们将乘以(权重)并将这些初始输入相加(偏置),以引起激活,然后使用梯度将其反向传播至训练模型。

在此过程中,我们希望每个功能都具有相似的范围,以使我们的梯度不会失控(并且我们只需要一个全局学习率乘数)。

您可以考虑的另一种方式是,深度学习网络传统上会共享许多参数-如果您不按某种方式扩展输入范围而导致特征值的范围相似(即:通过减去均值覆盖整个数据集),共享就不会发生这种情况非常容易,因为图像权重的一部分w很大,而另一部分太小。

您会在某些CNN模型中看到使用按图像白化,这更像您的思路。


4
谢谢你的回答。我熟悉将数据居中并确保范围相似以获取稳定渐变的概念。问题更多的是为什么我们需要在整个数据集上执行此操作,以及为什么与逐张图像白化相比有帮助呢?我想要一个简单的参考资料,以某种方式表明在我接受答案之前这可以改善学习。我知道批处理规范化是一项非常强大的技术,但我看不到与整个数据集规范化的联系。
Max Gordon

如果您接受批量标准化是好的,那么您已经在那里。批量归一化的唯一原因是无法容纳内存中的完整数据集或正在分发训练(通常是同一问题)。这就是为什么我们有批次。
lollercoaster

我认为批次也是随机梯度下降的基础。即使我可以将所有内容都放入内存中,我也希望比每个时期之后更频繁地更新参数。
Max Gordon

3
他们是。而且,您可以根据需要频繁地进行更新-分析的含义是相同的,这对于梯度下降是如此的好和可扩展。我们使用随机梯度下降(混洗输入顺序+批处理)的原因是为了平滑通过梯度空间的爬坡过程。给定一个点,我们不能真正确定我们的更新将把我们推向局部最大值的方向,但是,如果您选择足够的点,则这种可能性会变大(按预期)。
lollercoaster

2
如何帮助将功能纳入相似范围?如果我有两张图像,一幅图像的像素值范围从0到255,一幅图像的范围从0到50,例如平均值为50,stdev为15。归一化处理后,图像1的范围为-3.3至13.6,图像2的范围为-3.3到0。它们的比例仍然不同。
丹尼尔(Daniel)

9

在批量归一化之前,每个通道的均值减法用于将数据集中在每个通道的零均值(R,G,B)附近。这通常有助于网络学习更快,因为每个通道的梯度作用相同。我怀疑如果您使用批处理规范化,那么由于您仍在按小批处理规范化,因此实际上不需要每个通道的均值减法预处理步骤。


1
“我怀疑如果使用批处理归一化,那么实际上不必按通道平均减法进行预处理,因为无论如何您要对每个小批量进行归一化。” 但是批处理规范是指标准化网络层中的权重,而不是实际的输入图像。这是两件事。
Monica Heddneck

4

每个图像的归一化是常见的,甚至是Tensorflow中当前唯一的内置函数(主要是因为非常易于实现)。它用于您提到的确切原因(同一张图片的天数与夜晚)。但是,如果您设想一种控制照明的更理想的方案,则每个图像之间的相对差异在算法中将具有很大的价值,并且我们不希望通过按图像归一化来消除这种情况(并且希望在整个训练数据集中进行归一化)。


4

这被称为数据使用前的预处理。您可以通过多种方式进行处理,但有一个条件,即应使用相同的函数X_preproc = f(X)处理每个数据,并且此f(。)不应依赖于数据本身,因此如果使用当前图像均值来处理此数据当前图像,则您的f(X)实际上将实际上是f(X,image),而您不希望如此。

您正在讨论的图像对比度归一化是出于不同的目的。图像对比度归一化将有助于功能。

但是上面的f(。)将通过使所有特征在数值上彼此相等(当然是近似的)来帮助优化。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.