背景:之前计算一批图片的均值和标准差时,电脑内存不够,又不想去公司运算,所以想到了这个办法。我相信很多资深的算法工程师,也许都用过。其实很简单,就是把数据分开计算就可以了。
处理步骤:
- 明确计算的是哪个通道(维度)上的均值 ( mean ) 和标准差 ( std ) ;
- 将计算的数据分组;
注意:必须保证每组的数据量是一致的
- 分别计算每组数据的均值,将得到的数据(均值)再求一次均值,即是所有数据的均值;
- 计算每组数据的方差(使用步骤3求的均值),然后将所有组的方差求平均值(方差的和除以组数),将所得的数据开平方根,即是标准差。
举个例子
样本(数据)有 10000 张图片 ( RGB模式 ),图片大小是 32 × 32,数据的形状是 ( 10000, 3, 32, 32 ) 。
- 明确求的是通道 ( dim = 1 ) 上的均值和标准差;
- 将数据分成20组,每组500张图片,每组数据的形状是 ( 500, 3, 32, 32 ) ;
- 求出每组数据的均值,由于是求的通道上的均值,所以每组数据都会有3个均值(标准差也是一样的),然后对20组均值再求一次均值,就得到了 10000 张图片在通道上的均值(3个值);
- 按通道求出每组数据的方差(标准差的平方),再对20组方差求平均值,再开平方根,便得到 10000 张图片在通道上的标准差(3个值)。
计算标准差用到的均值,一定要是整个样本求出的均值,而不是每组样本得到的均值
若有纰漏之处,还望指正!