当前位置: 首页 > 知识库问答 >
问题:

使用旋转矩阵和常规imagenet标准偏差计算灰度imagenet像素值的标准偏差

乔鸿骞
2023-03-14

我想训练一些模型来处理灰度图像,例如对显微镜应用有用(Source)。因此,我想在灰度图像网上训练我的模型,使用pytorch灰度转换(torchvision.transforms.灰度),将RGB图像网转换为灰度图像网。内部pytorch将颜色空间从RGB旋转到YPbPr,如下所示:

Y'是灰度通道,因此转换后Pb和Pr可以忽略。实际上pytorch甚至只计算

grayscale = (0.2989 * r + 0.587 * g + 0.114 * b)

为了规范化图像数据,我需要知道灰度imagenet的平均像素值,以及标准偏差。可以计算这些吗?

我成功地使用

meanGrayscale = 0.2989 * r.mean() + 0.587 * g.mean() + 0.114 * b.mean()

变换图像,然后计算灰度平均值,得到的结果与首先计算RGB平均值,然后将其变换为灰度平均值的结果相同。

然而,我现在在计算方差或均方差时一无所知。有人对这个话题有什么想法,或者知道一些好的文学作品吗?这有可能吗?

我找到了一份出版物《宫建新——澄清标准偏差椭圆》...在那里,他做了2个维度(据我所知)。我只是还不知道如何在3D中做到这一点。

共有1个答案

欧阳正谊
2023-03-14

好吧,我无法按计划计算均方差,但使用了下面的代码。灰度图像网的训练数据集的平均值和均方差是(尽可能地舍入它):

平均值:0.44531356896770125

标准偏差:0.2692461874154524

import multiprocessing
import os

def calcSTD(d):
    meanValue = 0.44531356896770125
    squaredError = 0
    numberOfPixels = 0
    for f in os.listdir("/home/imagenet/ILSVRC/Data/CLS-LOC/train/"+str(d)+"/"): 
        if f.endswith(".JPEG"):
            
            image = imread("/home/imagenet/ILSVRC/Data/CLS-LOC/train/"+str(d)+"/"+str(f))
                
            ###Transform to gray if not already gray anyways  
            if  np.array(image).ndim == 3:
                matrix = np.array(image)
                blue = matrix[:,:,0]/255
                green = matrix[:,:,1]/255
                red = matrix[:,:,2]/255
                gray = (0.2989 * red + 0.587 * green + 0.114 * blue)
            else:
                gray = np.array(image)/255
            ###----------------------------------------------------       
                    
            for line in gray:
                for pixel in line:
                    squaredError += (pixel-meanValue)**2
                    numberOfPixels += 1
    
    return (squaredError, numberOfPixels)

a_pool = multiprocessing.Pool()
folders = []
[folders.append(f.name) for f in os.scandir("/home/imagenet/ILSVRC/Data/CLS-LOC/train") if f.is_dir()]
resultStD = a_pool.map(calcSTD, folders)

StD = (sum([intensity[0] for intensity in resultStD])/sum([pixels[1] for pixels in resultStD]))**0.5
print(StD)

在这个过程中出现了一些这样的错误:

/opt/conda/lib/python3。7/站点包/PIL/TiffImagePlugin。py:771:UserWarning:EXIF数据可能已损坏。预期读取8个字节,但仅获取4个字节。正在跳过标记41486“可能损坏的EXIF数据”

来自2019年版本的ImageNet的图像被跳过。

 类似资料:
  • 我对标准差的计算有点执着,如果你能在下面的两个问题上给我一些帮助,那就太好了。 代码 问题1:我如何计算这个的标准误差(平均值的标准偏差)? 代码 问题2:如何计算累积标准偏差? 非常感谢!!(很抱歉数据格式错误!)

  • 我的数据与此类似: 我需要计算基于名称组的差异列的标准偏差。 我试过了 和 但两者都为传递给的变量提供了KeyError。我试图用以下方法解决它: 但错误仍然存在。 提前谢谢。

  • 问题内容: 使用Python,假设我正在运行已知数量的项目,并且能够计时处理每个项目要花费的时间,以及运行所花费的总时间以及到目前为止所处理项目的数量。我目前正在计算飞行中的平均值,但是如果说单个项目花费的时间特别长(几秒钟而不是几毫秒),则可能会导致偏差。 我想展示一个运行中的标准偏差。如何在不保存每个记录的情况下执行此操作? 问题答案: 我使用的是Welford方法,它给出的结果更准确。该链接

  • 我尝试使用< code>rowSds()来计算每一行的标准偏差,这样我就可以选择具有高标准偏差的行来绘制图表。 我的数据帧名为<code>xx 我试图计算每一行的标准偏差,并辅助sd列名: 我得到这个错误: 知道在计算SD时如何省略吗?我的语法正确吗?

  • 返回数组数组的标准偏差。 使用 Array.reduce() 来计算均值,方差已经值的方差之和,方差的值,然后确定标准偏差。 您可以省略第二个参数来获取样本标准偏差,或将其设置为 true 以获得总体标准偏差。 const standardDeviation = (arr, usePopulation = false) => { const mean = arr.reduce((acc, va

  • 我有一个集合列表和每个集合的一些基本统计数据(项目数、最小值、最大值、平均值、标准差)。我想计算所有集合的相同统计数据。计算总计数、最小最大值和平均值很容易,但我不确定如何计算总标准偏差。 数据如下所示: 同时生成所有集合的统计信息: