【问题标题】:Finding the mean and std of pixel values for grayscale images in pytorch在pytorch中查找灰度图像的像素值的均值和标准差
【发布时间】:2025-12-18 06:35:02
【问题描述】:

我正在尝试规范化这个灰度 X 射线图像数据集https://www.kaggle.com/paultimothymooney/chest-xray-pneumonia

我有一些疑问

1)我查看了一些使用相同数据集完成的项目,下面的这个项目有三个平均值(大概是三个通道)。但既然这是一个灰度图像数据集,它怎么会有 3 个通道的平均像素值呢?它不应该只是0到1之间的一个数字吗? (https://www.kaggle.com/brennolins/image-classification-pytorch-transfer-learning)

  1. 为了找到均值和标准,我尝试这样做 -

     train_loader = DataLoader(dataset = train_set, batch_size=64, 
     shuffle=True)
    
     def get_mean_std(loader):
         channels_sum, channels_square_sum, num_batches= 0, 0, 0
    
         for data, _ in loader:
             channels_sum += torch.mean(data, dim=[])
             channels_square_sum += torch.mean(data**2, dim = [0,2,3])
             num_batches += 1
    
         mean=channels_sum/num_batches
         std= (channels_square_sum/num_batches - mean**2)
    
         return mean, std
    
     mean, std= get_mean_std(train_loader) 
     print(mean)
     print(std)
    

它给了我一个单一的值作为我的像素平均值。我跑了两次,得到了两个不同的平均值和一组不同的标准值。怎么会这样?

这是我试图应用于我的训练集的转换 -

transf_train = tt.Compose([
    tt.Resize(60),
    tt.RandomCrop(54, padding=4, padding_mode='reflect'),
    tt.ToTensor(), # converts pixels [0-255] to tensors [0-1]
    tt.Normalize(mean = [0.485, 0.456, 0.406], std = [0.229, 0.224, 0.225])]) 

(我从上面完成的 pytorch 项目中获取了这些当前值。我想知道如何自己找到这些值,以及当图像为灰度时如何有三个平均通道)

谢谢!

【问题讨论】:

    标签: python pytorch normalization


    【解决方案1】:

    您会得到不同的数字,因为tt.RandomCrop 将随机性引入数据。您需要遍历一次 training 集并计算均值和标准值而不进行增强。

    【讨论】:

    • 啊,我明白了,谢谢!你是否也知道为什么这个 kaggle 项目使用 3 个通道的平均值而不是一个?