pytorch之ImageFolder
torchvision已经预先实现了常用的Dataset,包括前面使用过的CIFAR-10,以及ImageNet、COCO、MNIST、LSUN等数据集,可通过诸如torchvision.datasets.CIFAR10来调用。在这里介绍一个会经常使用到的Dataset——ImageFolder。
ImageFolder假设所有的文件按文件夹保存,每个文件夹下存储同一个类别的图片,文件夹名为类名,其构造函数如下:
1
|
ImageFolder(root, transform = None , target_transform = None , loader = default_loader)
|
它主要有四个参数:
root:在root指定的路径下寻找图片
transform:对PIL Image进行的转换操作,transform的输入是使用loader读取图片的返回对象
target_transform:对label的转换
loader:给定路径后如何读取图片,默认读取为RGB格式的PIL Image对象
label是按照文件夹名顺序排序后存成字典,即{类名:类序号(从0开始)},一般来说最好直接将文件夹命名为从0开始的数字,这样会和ImageFolder实际的label一致,如果不是这种命名规范,建议看看self.class_to_idx属性以了解label和文件夹名的映射关系。
图片结构如下所示:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
from torchvision import transforms as T
import matplotlib.pyplot as plt
from torchvision.datasets import ImageFolder
dataset = ImageFolder( 'data/dogcat_2/' )
# cat文件夹的图片对应label 0,dog对应1
print (dataset.class_to_idx)
# 所有图片的路径和对应的label
print (dataset.imgs)
# 没有任何的transform,所以返回的还是PIL Image对象
#print(dataset[0][1])# 第一维是第几张图,第二维为1返回label
#print(dataset[0][0]) # 为0返回图片数据
plt.imshow(dataset[ 0 ][ 0 ])
plt.axis( 'off' )
plt.show()
|
加上transform
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
normalize = T.Normalize(mean = [ 0.4 , 0.4 , 0.4 ], std = [ 0.2 , 0.2 , 0.2 ])
transform = T.Compose([
T.RandomResizedCrop( 224 ),
T.RandomHorizontalFlip(),
T.ToTensor(),
normalize,
])
dataset = ImageFolder( 'data1/dogcat_2/' , transform = transform)
# 深度学习中图片数据一般保存成CxHxW,即通道数x图片高x图片宽
#print(dataset[0][0].size())
to_img = T.ToPILImage()
# 0.2和0.4是标准差和均值的近似
a = to_img(dataset[ 0 ][ 0 ] * 0.2 + 0.4 )
plt.imshow(a)
plt.axis( 'off' )
plt.show()
|
以上这篇pytorch之ImageFolder使用详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/weixin_40123108/article/details/85099449