目录
深度学习中图像预处理为什么要减去均值?
最近在看一些keras 代码的时候发现在图像的预处理过程中,总是会有类似于下面的这种操作:
# Subtract mean pixel and multiple by scaling constant
im[:,:,0] = (im[:,:,0] - 103.94) * 0.017
im[:,:,1] = (im[:,:,1] - 116.78) * 0.017
im[:,:,2] = (im[:,:,2] - 123.68) * 0.017
这其中的参数是作者给出的,
Notes
Due to compatibility reasons, several modifications have been made:
BGR mean values [103.94,116.78,123.68] are subtracted
scale: 0.017 is used, instead of the original std values for image preprocessing
ceil_mode: false is used in the first pooling layers ('pool1')
作者的数据集使用的是 ImageNet , 这里的 [103.94,116.78,123.68] 指的是 imagenet 里面所有训练集数据的平均像素值,
三个值 对应图像的 BGR,
那为什么要做这样的一种操作呢?
我在网上看了很多资料, 大体上可以总结为两种 :
1 、去均值是为了对图像进行标准化,可以移除图像的平均亮度值 (intensity)。很多情况下我们对图像的照度并不感兴趣,而更多地关注其内容,比如在对象识别任务中,图像的整体明亮程度并不会影响图像中存在的是什么物体。这时对每个数据点移除像素