翻译:神经网络 为什么要通过减去数据集的图像均值来标准化图像,而不是深度学习中的当前图像均值?

Posted 架构师易筋

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了翻译:神经网络 为什么要通过减去数据集的图像均值来标准化图像,而不是深度学习中的当前图像均值?相关的知识,希望对你有一定的参考价值。

问题

关于如何标准化图像有一些变化,但大多数似乎使用这两种方法:

减去对所有图像计算的每个通道的平均值(例如 VGG_ILSVRC_16_layers)
通过对所有图像计算的像素/通道减去(例如CNN_S,另见Caffe 的参考网络)
在我看来,自然的方法是对每个图像进行标准化。与夜间图像相比,在光天化日之下拍摄的图像会导致更多的神经元被激发,虽然它可能会告诉我们我们通常关心边缘等中更有趣的特征的时间。

Pierre Sermanet在 3.3.3 中提到将基于每个图像的局部对比度归一化,但我在我见过的任何示例/教程中都没有遇到过这种情况。我还看到了一个有趣的Quora 问题和Xiu-Shen Wei 的帖子,但它们似乎不支持上述两种方法。

我到底错过了什么?这是一个颜色标准化问题还是有一篇论文实际上解释了为什么这么多人使用这种方法?

回答1

减去数据集均值用于“居中”数据。此外,如果您想将每个特征值归一化为 z 分数,您最好也希望除以该特征或像素的标准差。

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

我们希望在这个过程中每个特征都有一个相似的范围,这样我们的梯度就不会失控(而且我们只需要一个全局学习率乘数)。

您可以考虑的另一种方式是深度学习网络传统上共享许多参数 - 如果您没有以导致类似范围特征值的方式缩放输入(即:通过减去平均值在整个数据集上)共享不会很容易发生,因为图像权重的一部分w很大,而另一部分则太小。

你会在一些 CNN 模型中看到使用了每张图像的白化,这更符合你的想法。

在批量归一化之前,每个通道的均值减法用于将每个通道(R、G、B)的数据集中在零均值附近。这通常有助于网络更快地学习,因为每个通道的梯度都是一致的。我怀疑如果您使用批量归一化,则每通道均值减法预处理步骤并不是真正必要的,因为无论如何您都是按小批量归一化的。

按图像归一化很常见,甚至是目前 Tensorflow 中唯一的内置函数(主要是因为非常容易实现)。它用于您提到的确切原因(同一图像的白天与夜晚)。然而,如果你想象一个更理想的场景,其中照明被控制,那么每个图像之间的相对差异在算法中将具有重要价值,我们不想用每个图像的归一化来消除它(并且想要在整个训练数据集的上下文中进行归一化)。

回答2

这个话题有两个方面:

标准化以将所有数据保持在相同的比例 --> 在对每个图像或整个图像数据集进行标准化时,结果将是相似的
保留相关信息 --> 这是在每个图像或每个集合的基础上进行归一化会产生很大不同的地方
例如,如果您想学习 CNN 来识别夜景与白天场景,并且您在每张图像的基础上进行标准化,则网络将惨遭失败,因为所有图像都将被同等缩放。

每个图像归一化的另一个陷阱是您可能会人为地增加图像传感器散粒噪声(例如对于非常黑暗的场景),这会使 CNN 将此类噪声混淆为有用信息。

关于归一化的最后一句警告:如果操作不当,可能会导致无法恢复的信息丢失,例如图像裁剪(生成的值低于图像数据类型的有效范围)或饱和度(高于有效范围)。当使用 uint8 变量来表示图像时,这是一个典型的错误,并且由于标准化/预处理操作,值要么低于 0,要么超过 255。一旦发生这种情况,图像信息将丢失且无法恢复,因此 CNN 将无法从这些图像像素中学习任何有用的信息。

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

您所说的图像对比度归一化是用于不同的目的。图像对比度归一化将有助于功能。

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

参考

https://stats.stackexchange.com/questions/211436/why-normalize-images-by-subtracting-datasets-image-mean-instead-of-the-current

以上是关于翻译:神经网络 为什么要通过减去数据集的图像均值来标准化图像,而不是深度学习中的当前图像均值?的主要内容,如果未能解决你的问题,请参考以下文章

4:计算图像数据集的均值

4:计算图像数据集的均值

在执行语义分割任务时我应该减去图像均值吗?为啥或者为啥不?

计算用于咖啡分类的HDF5数据集的平均值

目标检测系列 Mask R-CNN—图片预处理

Python:sklearn中StandardScaler和scale的区别