Pytorch——ImageFolder使用

  • Post author:
  • Post category:其他


ImageFolder是一个通用的数据加载器,数据集应当按照指定的格式进行存储。

1 数据集构造方式

比如我们的数据集一共包括两个类别:cat、dog,每个类别包括四张图片。所有的图片按文件夹保存,每个文件夹下存储同一个类别的图片,文件夹名为类名。

2 ImageFolder

2.1 调用

import torchvision.datasets
dataset=ImageFolder(root, transform=None, target_transform=None, loader=default_loader)

2.2 参数

(1)root

在root指定的路径下寻找图片,比如

import torchvision.datasets
dataset = ImageFolder('./data/dogcat_2')

(2)transform

对PIL Image进行的转换操作,transform的输入是使用loader读取图片的返回对象,比如

import torchvision.datasets

transform = transforms.Compose([  
        transforms.Grayscale(),  
        transforms.Resize([28, 28]),  
        transforms.ToTensor(),  
        transforms.Normalize(mean=(0,0,0),std=(1,1,1))
])

dataset = ImageFolder('./data/dogcat_2',transform=transform)

(3)target_transform

对label的转换。

2.3 成员变量

可以通过成员变量查看ImageFolder返回的内容。

(1)classes

根据分的文件夹的名字来确定的类别,如[‘cat’, ‘dog’]。

(2)class_to_idx

按顺序为这些类别定义索引为0,1…,如{‘cat’: 0, ‘dog’: 1}。

(3)imgs

返回从所有文件夹中得到的图片的路径以及其类别,一个列表,列表中的每个元素都是一个(img-path, class_index)的元组,如

[(‘./data/dogcat_2/cat/cat.12484.jpg’, 0), (‘./data/dogcat_2/cat/cat.12485.jpg’, 0), (‘./data/dogcat_2/cat/cat.12486.jpg’, 0), (‘./data/dogcat_2/cat/cat.12487.jpg’, 0), (‘./data/dogcat_2/dog/dog.12496.jpg’, 1), (‘./data/dogcat_2/dog/dog.12497.jpg’, 1), (‘./data/dogcat_2/dog/dog.12498.jpg’, 1), (‘./data/dogcat_2/dog/dog.12499.jpg’, 1)]。

2.4 ImageFolder返回的对象

如果不进行transform,返回PIL Image对象,进行transform,返回tensor。

ImageFolder的返回值,第一维代表的是第几张图片(所有类别的图片顺序排列),如dataset[0]代表第0张图片,即(‘./data/dogcat_2/cat/cat.12484.jpg’, 0)。第二维只有0和1两个值,0返回图片数据,1返回label。

参考:pytorch torchvision.ImageFolder的使用(

https://www.cnblogs.com/wanghui-garcia/p/10649364.html



版权声明:本文为qq_29774003原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。