【问题标题】:Pytorch: Normalize Image data setPytorch:标准化图像数据集
【发布时间】:2019-05-01 17:59:35
【问题描述】:

我想标准化图像的自定义数据集。为此,我需要通过迭代数据集来计算平均值和标准差。在创建数据集之前如何标准化整个数据集?

【问题讨论】:

    标签: python deep-learning computer-vision conv-neural-network pytorch


    【解决方案1】:

    规范化试图做的是保留数据集上的整体信息,即使值存在差异,在图像的情况下,它也会尝试区分某些问题,例如亮度和对比度,这些问题在某些情况下不会造成影响图像具有的一般信息。有几种方法可以做到这一点,每种方法都有优缺点,具体取决于您拥有的图像集和您想要对它们进行的处理工作,仅举几例:

    • Linear Histogram stetching:在当前位置上进行线性映射 图像中的值范围并将其拉伸以匹配 0 和 255 RGB 值
    • 非线性直方图提取:在哪里使用 将输入像素映射到新图像的非线性函数。通常 使用的函数是对数和指数。我最喜欢的功能 是原始直方图的累积概率函数,它 效果很好。
    • 自适应直方图均衡:在哪里进行线性 在图像的某些位置拉伸直方图以避免这样做 一个身份映射,您在原始映射中拥有最大范围的值 图片。

    【讨论】:

      【解决方案2】:

      好吧,我们以这张图片为例:

      您需要做的第一件事是决定要使用哪个库:Pillow 或 OpenCV。在本例中,我将使用 Pillow:

      from PIL import Image
      import numpy as np
      
      img = Image.open("test.jpg")
      pix = np.asarray(img.convert("RGB")) # Open the image as RGB
      
      Rchan = pix[:,:,0]  # Red color channel
      Gchan = pix[:,:,1]  # Green color channel
      Bchan = pix[:,:,2]  # Blue color channel
      
      Rchan_mean = Rchan.mean()
      Gchan_mean = Gchan.mean()
      Bchan_mean = Bchan.mean()
      
      Rchan_var = Rchan.var()
      Gchan_var = Gchan.var()
      Bchan_var = Bchan.var()
      

      结果是:

      • 红色通道均值:134.80585625
      • 红色通道方差:3211.35843945
      • 绿色通道均值:81.0884125
      • 绿色通道差异:1672.63200823
      • 蓝色通道平均值:68.1831375
      • 蓝色通道差异:1166.20433566

      希望它对您的需求有所帮助。

      【讨论】:

      • 是的,但是如果要对所有图像进行归一化,则必须使用它自己的均值和方差
      • 你确定吗?为什么我们不应该找到全局均值和标准然后对其进行归一化?
      • 归一化的目的是让图像的均值和方差分别等于 0 和 1。这是通过减去每个像素的平均值并将整个结果除以标准偏差来使每个图像接近正态分布。
      • @Nightmerker 请看一下这个stackoverflow.com/questions/60101240/…,如果用它自己的均值和标准差进行归一化,那么为什么要对整个数据求和并取均值和标准差?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-06
      • 2021-10-07
      • 2019-10-22
      • 2021-07-28
      • 2022-01-12
      • 1970-01-01
      相关资源
      最近更新 更多