深度学习中的图像数据预处理——图像去均值(image mean or pixel mean)

 

 

首先引用下网上的解释:

For a grayscale image, every pixel in the mean image is computed from the average of all corresponding pixels (i.e. same coordinates) across all images of your dataset. "Mean image" subtraction means that this mean image is subtracted from any input image you feed to the neural network. The intention is to have inputs that are (on average) centred around zero.

The mean pixel is simply the average of all pixels in the mean image. "Mean pixel" subtraction means that you subtract the *same* mean pixel value from all pixels of the input to the neural network.

Now the same applies to RGB images, except that every channel is processed independently (this means we don't compute averages across channels, instead every channel independently goes through the same transformations as for a grayscale image).

Intuitively, it feels like mean image subtraction should perform better (that is what I noticed on the auto-encoder example in DIGITS) although I don't know of research papers that back this up.

对于灰度图像,平均图像中的每个像素都是由数据集中所有图像间的相应像素(即相同坐标)的平均值计算得出的。“平均图像”减法意味着从输入神经网络的任何输入图像中减去该平均图像。目的是使输入(平均)以零为中心。

平均像素只是平均图像中所有像素的平均值。“平均像素”减法意味着从输入到神经网络的所有像素中减去“相同的"平均像素值。

这同样适用于RGB图像,除了每个通道都是独立处理的(这意味着我们不计算通道之间的平均值,而是每个通道独立地进行与灰度图像相同的转换)。

从直觉上讲,感觉像平均图像减法应该表现的更好(这是我在DIGITS中的自动编码器示例中注意到的),尽管我不知道有支持这种情况的研究论文。

image mean:

举例来说,输入一张RGB图像,比如N*N*3,对其求image mean,结果仍是N*N*3,即对训练集中所有图像在同一空间位置上(也是相同通道,不跨通道)的像素求均值。

pixel mean:

而pixel mean,是把所有图像的R通道的像素求均值,G,B通道一样,不考虑空间位置的关系。这样求得的结果是R_mean, G_mean, B_mean,相当于把image mean再次求平均。

减去均值的原因:

(1)从PCA的角度

减去均值是为了数据特征标准化,特征标准化指的是使数据的每一个维度具有零均值和单位方差。这是归一化中最常用的方法。在实际计算中,特征标准化的具体操作是:首先计算每一个维度上数据的均值(使用全体数据来计算),然后在每一个维度上都减去该均值。最后在数据的每一个维度上除以该维度上数据的标准差。

对于自然图像来说,更多的是做图像零均值化处理,并不需要估计样本的方差。这是因为在自然图像上进行训练时,对每一个像素单独估计均值和方差的意义不大,因为(理论上)图像上任一部分的统计性质都应该和其他部分相同,图像的这种性质被称作平稳性(stationarity)。

对于图像,这种归一化可以移除图像的平均亮度值(intensity),很多情况下我们对图像的照度并不感兴趣,而更多地关注其内容,比如在物体识别任务中,图像的整体明亮程度并不会影响图像中存在的是什么物体。这时对每个数据点移除像素的均值是有意义的。

(2)从反向传播计算的角度

在深度学习中,使用gradient descent来训练模型的话,基本都要在数据预处理时进行数据归一化。当然这是有原因的。

根据公式

                                                                         

 

如果输入层 χ 很大,在反向传播时传递到输入层的梯度就会变得很大。梯度大,学习率就得非常小,否则会越过最优。在这种情况下,学习率的选择需要参考输入层的数值大小,而直接将数据归一化操作,可以很方便的选择学习率。而且受 χ 和 的影响,各个梯度的数量级不相同,因此,它们需要的学习率数量级也就不相同,对于w1 适合的学习率,可能相对于w来说太小,如果仍使用适合w的学习率,会导致在w2的方向上下降地很慢,会消耗非常多的时间,而使用适合W2的学习率,对于w1来说又太大,找不到适合w1的解。

 

posted @ 2020-04-13 00:15  BooTurbo  阅读(7842)  评论(0编辑  收藏  举报