送入CNN之前,将图片标准化为浮点数0〜1,浮点数-1〜1和整数0〜255有什么区别?

时间:2019-05-14 03:46:44

标签: python opencv image-processing computer-vision conv-neural-network

将图像归一化为int和float有什么区别?

  1. 归一化为[0, 255]
   cv2.noramlize(src, res, 255, 0, cv2.NORM_MINMAX) 
  1. 归一化为[0, 1]
   cv2.normalize(src, res, 1, 0, cv2.NORM_MINMAX)
  1. 归一化为[-1, 1]
   img=(img-np.mean(img, axis=(0,1)))/np.std(img, axis=(0,1))

Ps。
img是带有[H x W x C]

的图片

它对ConvNet的培训和性能有影响吗?

1 个答案:

答案 0 :(得分:0)

img=(img-np.mean(img, axis=(0,1)))/np.std(img, axis=(0,1))

上面的代码执行均值减法,然后进行归一化。

您可以参考CS231 Notes以获得更多详细信息,但这是相关部分

平均减法是最常见的预处理形式。它涉及减去数据中每个单独特征的均值,并且具有将数据云围绕每个维度围绕原点居中的几何解释。在numpy中,此操作将实现为:X-= np.mean(X,axis = 0)。特别是对于图像,为方便起见,通常会从所有像素中减去一个值(例如X-= np.mean(X)),或者在三个颜色通道中分别这样做。

归一化是指对数据维度进行归一化,以便它们具有大致相同的比例。有两种常见的方法可以实现此标准化。一种方法是将每个尺寸以零为中心除以其标准偏差:(X / = np.std(X,axis = 0))。此预处理的另一种形式是对每个维度进行规格化,以使沿着该维度的最小值和最大值分别为-1和1。仅当您有理由相信不同的输入要素具有不同的比例(或单位)时,才应用此预处理才有意义,但是它们对学习算法的重要性应大致相同。对于图像,像素的相对比例已经大约相等(并且范围在0到255之间),因此不必严格执行此附加预处理步骤。

均值减法平衡点周围的数据(居中) 定心可以消除梯度的消失和爆炸,同时还可以提高收敛速度和准确性。

我建议您浏览链接。它会更详细地解释这些主题