求取批量图片的均值和方差

在训练神经网络的时候,需要对输入的图片进行归一化操作。对于单通道灰度图可以进行采样并求取采样图片的均值和方差。
假设训练所用的图片名都存在figure_file.txt中。

import os 
import numpy as np
from PIL import Image

channel_mean = 0
channel_square_root = 0
pixels_num = 0
count = 0 # 总共图片个数
count_add = 0 # 一共采样次数
root_path = $ROOT_PATH # 绝对路径
figure_file = $FIGURE_FILE # 存图片名的txt文件
ff = open(figure_file, 'r')
for line in ff.readlines():
    count += 1
    if count % 4 == 0: # 每4张图进行一次采样
        filename = os.path.join(root_path, line.strip())
        data = np.array(Image.open(filename))
        h, w = data.shape[0], data.shape[1]
        pixels_num += h * w
        print(filename, h, w)
        
        channel_mean += np.sum(data)
        channel_square_root += np.sum(np.power(data, 2))
        count_add += 1
        
channel_mean = channel_mean / pixels_num
channel_square_root = np.sqrt(channel_square_root / pixels_num - channel_mean * channel_mean)
print(count, count_add, channel_mean, channel_square_root)

对于求取方差可以用以下数学公式推导:
S 2 = Σ ( x − μ ) 2 N = Σ ( x 2 + μ 2 − 2 x μ ) 2 N S^2 = \frac{\Sigma(x-\mu)^2}{N} = \frac{\Sigma(x^2+\mu ^2 - 2x\mu)^2}{N} S2=NΣ(xμ)2=NΣ(x2+μ22)2
= Σ x 2 + N μ 2 − 2 μ Σ x N =\frac{\Sigma x^2 + N\mu ^2 - 2\mu \Sigma x}{N} =NΣx2+Nμ22μΣx
= Σ x 2 + N μ 2 − 2 μ N μ N =\frac{\Sigma x^2 + N\mu ^2 - 2\mu N \mu}{N} =NΣx2+Nμ22μNμ
= Σ x 2 N − μ 2 =\frac{\Sigma x^2}{N} - \mu ^2 =NΣx2μ2

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值