zoukankan      html  css  js  c++  java
  • 计算图像数据集的均值和方差(mean, std)用于transforms.Normalize()标准化

    Pytorch图像预处理时,通常使用transforms.Normalize(mean, std)对图像按通道进行标准化,即减去均值,再除以方差。这样做可以加快模型的收敛速度。其中参数mean和std分别表示图像每个通道的均值和方差序列。

    Imagenet数据集的均值和方差为:mean=(0.485, 0.456, 0.406),std=(0.229, 0.224, 0.225),因为这是在百万张图像上计算而得的,所以我们通常见到在训练过程中使用它们做标准化。而对于特定的数据集,选择这个值的结果可能并不理想。接下来给出计算特定数据集的均值和方差的方法。

    def getStat(train_data):
        '''
        Compute mean and variance for training data
        :param train_data: 自定义类Dataset(或ImageFolder即可)
        :return: (mean, std)
        '''
        print('Compute mean and variance for training data.')
        print(len(train_data))
        train_loader = torch.utils.data.DataLoader(
            train_data, batch_size=1, shuffle=False, num_workers=0,
            pin_memory=True)
        mean = torch.zeros(3)
        std = torch.zeros(3)
        for X, _ in train_loader:
            for d in range(3):
                mean[d] += X[:, d, :, :].mean()
                std[d] += X[:, d, :, :].std()
        mean.div_(len(train_data))
        std.div_(len(train_data))
        return list(mean.numpy()), list(std.numpy())
     
    if __name__ == '__main__':
        train_dataset = ImageFolder(root=r'D:cifar10_images	est', transform=None)
        print(getStat(train_dataset))
    

      


    getState()方法接收一个Dataset类(ImageFolder),然后累加所有图像三个通道的均值和方差,最后除以图像总数并返回。

    这里用cifar10做的测试,测试集返回的结果如下所示:

    Compute mean and variance for training data.
    10000
    ([0.4940607, 0.4850613, 0.45037037], [0.20085774, 0.19870903, 0.20153421])
    

      



    ————————————————
    版权声明:本文为CSDN博主「潜行隐耀」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/PanYHHH/article/details/107896526

    _____________________________

    注:这里涉及到两种算法

    1. 计算每张图片的像素平均灰度值,再求和并除以总图片数

    2. 计算总灰度值,将每张图像像素数求和,除以这个和

    方法一更好,适用于图片大小不一样的情况




    如果这篇文章帮助到了你,你可以请作者喝一杯咖啡

  • 相关阅读:
    vue-cli项目中使用vw——相比flexible更原生的移动端解决方案
    android shap画圆(空心圆、实心圆)
    Android四大组件——Activity跳转动画、淡出淡入、滑出滑入、自定义退出进入
    HDU 3980 Paint Chain (sg函数)
    HDU 3951 Coin Game (简单博弈)
    HDU 1850 Being a Good Boy in Spring Festival (Nim博弈)
    HDU 3389 Game (阶梯博弈)
    HDU 3032 Nim or not Nim? (sg函数)
    HDU 1907 John (Nim博弈)
    HDU 4638 Group (线段树 | 树状数组 + 离线处理)
  • 原文地址:https://www.cnblogs.com/sddai/p/15476594.html
Copyright © 2011-2022 走看看