美文网首页
pytorch:计算自己图像数据集的均值和方差

pytorch:计算自己图像数据集的均值和方差

作者: 不太聪明的亚子 | 来源:发表于2020-08-11 09:24 被阅读0次

当使用torchvision中的transforms对图像做处理的时候,有一个处理transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225]),Normalize是把图像数据从[0,1]变成[-1,1],变换公式是image=(image-mean)/std,那么其中的参数就分别是三个通道的mean和std,这个均值和标准差需要自己计算,范围就是训练集和验证集的所有图像。

需要的包

先定义一些需要的参数,图像最终的size是[3, img_h, img_w],imgs用于存放所有图像数据,data_transforms规定每个图像都需要先经过三个操作,首先按照最小边resize成256,然后使用中心裁剪成224x224大小,最后使用ToTensor换成形状为(C,H, W)的Tensor格式,且/255归一化到[0,1.0]之间。(具体数值可以自己决定,在之后的模型中对图像的操作应与此保持一致)

path就是你自己存放图像的路径,注意最后不要加'/',这个路径下的图像都是img_name.jpg。

使用PIL将图像按照RGB形式打开,经过transforms标准化处理,变成numpy数组以便组织所有图像数据。

img = img[:,:,:, np.newaxis]给每张图像增加一维,然后用这一维把所有图像数据顺序拼在一起放在imgs里。

这里举例说明一下np.concatenate():

a = np.array([[[1, 2]]]) #size = [1,1,2]

a = a[:,:,:,np.newaxis] #size = [1,1,2,1]

#此时 a = [[[[1],

                   [2]]]]

b = np.array([[[[3],

                       [4]]]]) 

b = np.concatenate((a, b), axis = 3)

#此时b = [[[[1 3],

                   [2 4]]]]

可以看出来,a和b就顺序拼接在一起啦。

之后依次把3个通道的数据拉成一行,计算mean和std.

c = b[0,:,:,:].ravel() #接上面的例子,我们只有一个通道

#此时的c = [1 3 2 4]

至此,means和stdevs中就存着3个通道的均值和标准差啦,可以拿到Normalize中使用了。

相关文章

网友评论

      本文标题:pytorch:计算自己图像数据集的均值和方差

      本文链接:https://www.haomeiwen.com/subject/ercsdktx.html