ImageFolder假设所有的文件按文件夹保存,每个文件夹下存储同一个类别的图片,文件夹名为类名,其构造函数如下:
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和文件夹名的映射关系。
当把文件夹名字简单命名为数字时,同时有存在较多类,比如:
在使用这个函数时会发生一个现象:
import torchvision
import torchvision.transforms as transforms
path_train = '/media/...xxx.../train/'
dataset = torchvision.datasets.ImageFolder(path_train,
transform=transforms.Compose([
transforms.Resize((32, 32)),
transforms.Grayscale(1),
transforms.ToTensor()]))
print (dataset.classes)
print (dataset.class_to_idx)
类别索引并没有按“1、 2、 3……”这样的排列方式,不知道这对训练数据时有没有什么影响,希望有大佬看到了能帮我解释一下,谢谢~~