【问题标题】:What's the difference between normalize image to float 0~1, float -1~1, and integer 0~255 before feed into CNN?在输入 CNN 之前将图像标准化为浮点 0~1、浮点 -1~1 和整数 0~255 有什么区别?
【发布时间】:2019-05-14 03:46:44
【问题描述】:

将图像标准化为 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 的训练和性能有什么影响吗?

【问题讨论】:

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


    【解决方案1】:
    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 的范围内),因此没有必要执行这个额外的预处理步骤。

    均值减法围绕一个点平衡数据(居中) 居中对抗消失和爆炸梯度,同时还可能提高收敛速度和准确性。

    我建议您通过链接。它更详细地解释了这些主题

    【讨论】:

      猜你喜欢
      • 2020-06-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-13
      • 2020-09-29
      • 2022-12-10
      相关资源
      最近更新 更多