pytorch中torchvision模块下ImageFolder的简单理解与实际运用

pytorch中torchvision模块下ImageFolder的简单理解与实际运用

ImageFolder函数定义

ImageFolder(root,transform=None,target_transform=None,loader=default_loader)

root: 图片总目录,子层级为各类型对应的文件目录。
transform: 对PIL image进行转换操作,transform输入的loader读取图片返回的对象
target_transform: 对label进行变换
loader: 指定加载图片的函数,默认操作是读取为RGB格式的PIL image对象 
使用ImageFolder需要的目录结构

基本结构如下:
基本结构
具体参考:
目录结构
说明:
根目录root : my_data
子分类目录: classA , classB
classA与classB目录之下才是具体图片

注意点:

  1. root路径必须指向到分类文件目录同级。也就是my_data下,而不能指向具体分类目录。即不能指向my_data/classA
  2. 通过ImageFolder读取后,所有类别的所有图片都会被一同读取进来,而不是分类读取。
    len(data)的长度为7,即所有图片。
  3. ImageFolder会将所有分类给一个类别标签索引值,该类别标签索引值从0开始
    data.class_to_idx 结果为:{‘classA’: 0, ‘classB’: 1}
  4. ImageFolder生成的结果是一个列表,而该列表里的每个元素是一个元组,每个元组对应一张图片信息。具体内容为:(PIL图片,类别标签索引)

读取实例

from torchvision import transforms,utils
from torchvision import datasets
import torch
import matplotlib.pyplot as plt

#对图片进行随机裁剪256的大小
trans = transforms.Compose([
    transforms.RandomResizedCrop(256)
])

#使用ImageFolder读取图片
data = datasets.ImageFolder('my_data',transform=trans)

#读取了所有类别下的所有图片
len(data)
#7

#获取类别
data.classes
#['classA', 'classB']

#类别与标签索引
data.class_to_idx
#{'classA': 0, 'classB': 1}

#图片对应类别标签
data.targets
[0, 0, 0, 0, 1, 1, 1]

#每个元素是元组
data[0]
#(<PIL.Image.Image image mode=RGB size=256x256 at 0x23836184828>, 0)


#查看所有图片路径与类别标签
data.imgs
#
[('my_data\\classA\\a.png', 0),
 ('my_data\\classA\\b.png', 0),
 ('my_data\\classA\\c.png', 0),
 ('my_data\\classA\\d.png', 0),
 ('my_data\\classB\\m1.png', 1),
 ('my_data\\classB\\m2.png', 1),
 ('my_data\\classB\\m3.png', 1)]

查看单张图片

plt.imshow(data[0][0])

  • 13
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: `torchvision.datasets.ImageFolder`是PyTorch的一个内置数据集类,用于加载存储在文件夹的图像数据集。该类会将所有的图像按照其所在的文件夹进行分类,并将每个文件夹视为一个类别。可以通过指定`root`参数来指定图像数据集所在的文件夹的路径,同时还可以通过`transform`参数指定需要对图像进行的预处理操作,例如缩放、裁剪、旋转等。在创建`ImageFolder`对象后,可以通过调用`__getitem__`方法来获取指定索引的图像及其对应的标签。该类的使用非常方便,适合用于加载小型的图像数据集。 ### 回答2: torchvision.datasets.ImageFolderPyTorch一个用于加载图像数据集的类。它可用于加载带有标签的图像数据集,以便进行各种类型的图像分类任务。 使用ImageFolder,我们可以指定一个包含子文件夹的根目录,每个子文件夹代表一个类别,包含该类别的图像样本。ImageFolder会自动遍历这些文件夹,并为每个样本分配一个类标签。这个类标签是基于文件夹的索引顺序,例如根目录下的第一个文件夹被分配类标签0,第二个文件夹被分配类标签1,依此类推。 在使用ImageFolder加载数据集时,我们还可以选择是否在加载图像时应用一些预处理操作,如缩放、裁剪、标准化等。这些预处理操作可以在数据加载过程被定义并应用于所有图像。这在训练深度学习模型时非常有用,可以提高数据效率和数据质量。 使用ImageFolder加载数据集后,我们可以通过迭代器方式访问每个图像样本及其对应的类标签。可以使用这些样本和类标签来进行模型训练、验证和测试。此外,可以与PyTorch的其他数据加载工具(如DataLoader)结合使用,以实现数据的批处理、并行加载等功能。 总之,torchvision.datasets.ImageFolder是一个功能强大的类,可以简化图像分类任务数据集的加载和处理过程。它提供了灵活且易于使用的接口,使得加载图像数据集变得更加方便快捷。 ### 回答3: torchvision.datasets.ImageFolderPyTorch的一个数据加载工具,用于从文件夹加载图像数据集。 ImageFolder类需要指定一个包含图像数据的文件夹路径作为输入。该文件夹路径下应该有多个子文件夹,每个子文件夹代表一个类别,其包含属于该类别的图像。 ImageFolder类可以通过以下几个重要的参数来进行配置。首先,可以通过transform参数传入一个数据转换函数,用于对图像进行预处理操作,如缩放、裁剪、归一化等。其次,可以通过target_transform参数传入一个目标转换函数,用于对目标进行预处理操作。例如,可以将类别标签从类别名称转换为数字编码。除此之外,还可以通过loader参数指定图像加载函数,默认为PIL加载图像。 使用ImageFolder加载数据集非常简单。首先,需要导入torchvision.datasets模块。然后,使用ImageFolder类实例化一个数据加载器对象,传入数据集文件夹路径和其他可选参数。接下来,可以使用数据加载器对象的属性和方法来访问和操作数据集。例如,可以使用属性classes获取所有类别的名称,使用属性class_to_idx获取类别到索引的映射关系,使用len函数获取数据集的大小,使用getitem方法获取具体的样本数据。 总的来说,torchvision.datasets.ImageFolder是一个方便实用的工具,可以帮助我们加载和操作图像数据集。它可以与其他PyTorch的数据加载工具(如DataLoader)配合使用,为模型训练和评估提供了便利。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值