Quantcast
Channel: Sam的技术Blog
Viewing all articles
Browse latest Browse all 158

图像均值归一化

$
0
0
作者: Sam (甄峰)  sam_code@hotmail.com

1:图像的均值:
对图像来说,均值分两种:Image mean,  Pixel mean.
Image mean:
把所有训练集中的图片在同一空间位置上的像素对应通道求均值。
例如:训练集是N张 W x H x C 的图片。 则Image mean是一个W x H x C 的矩阵。 其中每个值都是对应位置像素的均值。

Pixel mean:
把所有训练集中的图片的各个通道分别求均值。
例如:训练集是N张 W x H x C 的图片。则Pixel mean是 C个值。 如:R_mean.  G_mean, B_mean.

2. 去均值:
为什么要去均值。可以从两个方面看:
A. 从主成分分析(PCA)角度看:
数据特征需要标准化, 使的数据的每一个维度都有零均值和单位方差。
在实际使用中,特征标准化的具体做法是:
  计算每个维度的均值。
  在每个维度减去均值。形成零均值。
  在每个维度除以该维度的标准差。
但对自然图像数据,更多的是图像各个channel的零均值。并不需要除以样本的标准差。

对于图像,这种归一化可以移除图像的平均亮度(intensity). 因为我们常常对图像的照度并不关心。

B. 从深度学习反向传播角度看:
机器学习中,若两个特征取值范围相差极大(跨数量级), 则代价函数J()会很扁,梯度下降时收敛不好。此时,需要做特征缩放(Feature Scaling). 把各个特征值的取值范围压缩到同一维度。 例如:   0 < 1.
通常可以做均值归一化。 
例如:某个维度数据 X, 它的均值是M。 最大值为x_max, 最小值为  x_min.
s=x_max - x_min.
均值归一化则是: (x - M)/s.
s也可以取标准差。(这里与PCA对应起来)

深度学习中, 一般把喂给网络模型的训练数据进行预处理, 使用最多的方式是零均值(Zero-mean). 即让所有训练集图片中每个像素的均值为0. 使得像素范围 [-128, 127], 以0为中心。 这样是为了在反向传播中加快网络中每一层权重参数的收敛。

在Tengine中,有参数mean, scale.
代码中的做法是,(像素值-mean)*scale.
mean是对应channel的均值,通常是127.5, 128等。 
scale通常是1/256 ,  1/255,  1/127 , 1/128等等。
逻辑和图像均值归一化类似。



 

Viewing all articles
Browse latest Browse all 158

Trending Articles