首页 > 其他分享 >pytorch中的ImageFolder 用法

pytorch中的ImageFolder 用法

时间:2024-11-14 13:44:16浏览次数:3  
标签:标签 ImageFolder transform 用法 pytorch 文件夹 transforms 图像

ImageFolder 是 PyTorch 中 torchvision.datasets 模块提供的一个常用类,用于从文件夹中加载图像数据。它是一种非常方便的方式来加载按文件夹结构组织的图像数据集。这个类能够自动将文件夹中的子目录作为标签,并且将其中的图像文件加载为 PyTorch 张量。

1. 基本概念

ImageFolder 假定数据集的文件夹结构是这样的:

root/
    ├── class_1/
    │   ├── img1.jpg
    │   ├── img2.jpg
    │   └── ...
    ├── class_2/
    │   ├── img1.jpg
    │   ├── img2.jpg
    │   └── ...
    ├── class_3/
    │   ├── img1.jpg
    │   ├── img2.jpg
    │   └── ...
    └── ...

每个子文件夹(例如 class_1class_2)代表一个类别,文件夹中的图像文件属于该类别。ImageFolder 会根据每个文件夹的名称来为图像分配标签(例如,class_1 对应标签 0,class_2 对应标签 1,依此类推)。

2. ImageFolder 的使用

创建 ImageFolder 对象

你可以通过指定数据集所在的根目录来创建 ImageFolder 对象。例如:

from torchvision import datasets, transforms

# 数据集的根目录
root = 'path/to/your/dataset'

# 数据预处理的转换操作
transform = transforms.Compose([
    transforms.Resize((128, 128)),  # 将图像调整为 128x128 大小
    transforms.ToTensor(),          # 将图像转换为 Tensor
])

# 创建 ImageFolder 数据集对象
dataset = datasets.ImageFolder(root=root, transform=transform)
ImageFolder 类的关键参数
  • root: 数据集的根目录,通常是包含所有类别文件夹的上级目录。
  • transform: 用于数据增强和预处理的 transform 操作。它会被应用到每张图像上。例如,你可以使用 transforms.Resize()transforms.ToTensor() 等。
  • target_transform: 用于标签的变换操作,类似于 transform,但作用于标签(类别)。
  • loader: 默认情况下,ImageFolder 使用 PIL 图像加载器加载图像。你可以传入自定义的加载函数。
ImageFolder 返回的数据结构

ImageFolder 类返回一个包含两部分的元组:

  1. 图像: 图像数据通常是一个 PIL 图像对象或者经过 transform 转换后的 PyTorch 张量。
  2. 标签: 图像的标签,通常是一个整数,表示图像所属的类别。标签是根据文件夹名称生成的,class_1 的标签为 0,class_2 的标签为 1,依此类推。

3. 如何使用 ImageFolder

访问图像和标签

通过索引,你可以获取 ImageFolder 中的图像和标签:

image, label = dataset[0]
  • image 是经过预处理后的 PyTorch 张量(例如,(C, H, W) 的张量)。
  • label 是图像对应的类别标签(整数)。
使用 DataLoader 迭代数据

为了方便批量加载数据,你通常会将 ImageFolderDataLoader 结合使用:

from torch.utils.data import DataLoader

# 创建 DataLoader
dataloader = DataLoader(dataset, batch_size=32, shuffle=True)

# 迭代 DataLoader 获取数据
for images, labels in dataloader:
    print(images.shape)  # 输出形状,例如 (32, 3, 128, 128)
    print(labels)        # 输出对应的标签

4. 示例代码

假设我们有以下文件夹结构:

data/
    ├── dogs/
    │   ├── dog1.jpg
    │   ├── dog2.jpg
    │   └── ...
    ├── cats/
    │   ├── cat1.jpg
    │   ├── cat2.jpg
    │   └── ...

我们可以使用 ImageFolder 来加载这个数据集,并进行处理:

from torchvision import datasets, transforms
from torch.utils.data import DataLoader

# 设置图像预处理操作
transform = transforms.Compose([
    transforms.Resize((128, 128)),
    transforms.ToTensor(),
])

# 创建 ImageFolder 数据集对象
dataset = datasets.ImageFolder(root='data', transform=transform)

# 创建 DataLoader 对象
dataloader = DataLoader(dataset, batch_size=32, shuffle=True)

# 迭代数据
for images, labels in dataloader:
    print(images.shape)  # 例如 (32, 3, 128, 128)
    print(labels)        # 例如 tensor([0, 1, 0, 1, ..., 0, 1]),0 表示狗,1 表示猫

在这个例子中,ImageFolder 会根据文件夹 dogscats 的名称自动分配标签。对于 dogs 文件夹中的图像,标签是 0;对于 cats 文件夹中的图像,标签是 1。

5. 总结

  • ImageFolder 是一个非常方便的类,可以自动从文件夹结构中加载图像,并为每个类别生成标签。
  • 它适用于经典的图像分类任务,其中图像按类别存储在不同的文件夹中。
  • 你可以通过 transform 参数自定义图像预处理流程(例如调整大小、转换为张量等),并通过 DataLoader 实现批量加载和数据迭代。

标签:标签,ImageFolder,transform,用法,pytorch,文件夹,transforms,图像
From: https://blog.csdn.net/m0_54249271/article/details/143722838

相关文章

  • Oracle Where子句用法
    OracleWHERE子句简介WHERE子句指定SELECT语句返回符合搜索条件的行记录。下面说明了WHERE子句的语法:SELECTcolumn_1,column_2,...FROMtable_nameWHEREsearch_conditionORDERBYcolumn_1,column_2;WHERE子句出现在FROM子句之后但......
  • PyTorch——从入门到精通:PyTorch简介与安装(最新版)【PyTorch系统学习】
    前言        在这个由数据驱动的时代,深度学习已经成为了推动技术进步的核心力量。而PyTorch,作为当今最流行的深度学习框架之一,以其动态计算图、易用性和灵活性,受到了全球开发者和研究者的青睐。为了帮助更多的学习者和开发者掌握这一强大的工具,我决定在CSDN开设一个专......
  • css2D变换用法
    文章目录CSS2D变换详解与代码案例一、CSS2D变换的基本属性二、transform属性的使用三、变换原点的设置四、代码案例1.移动元素2.旋转元素3.缩放元素4.倾斜元素5.多重变换五、CSS2D变换的应用场景CSS2D变换详解与代码案例CSS2D变换是CSS3引入的一组功能......
  • 深度学习 PyTorch 中的 logits 和交叉熵损失函数
    在深度学习中,理解损失函数是训练模型的关键一步。在分类任务中,交叉熵损失函数是最常用的损失函数之一。本文将详细解释PyTorch中的logits、交叉熵损失函数的工作原理,并展示如何调整张量的形状以确保计算正确的损失。什么是logits?logits是模型输出的未归一化预测值,通常......
  • BigDecimal的基本用法
    初始化BigDecimalamount=newBigDecimal("15");加减乘除publicstaticvoidmain(String[]args){BigDecimalamount=newBigDecimal("15");BigDecimalamount2=newBigDecimal("3");//加BigDecima......
  • 【自动驾驶-感知】CenterNet与CenterFusion融合目标检测的目标检测模型实战代码-基于P
    【自动驾驶-感知】CenterNet与CenterFusion融合目标检测的目标检测模型实战代码一.CenterNet目标检测模型1.中心点热力图2.物体尺寸回归3.分类任务4.损失函数二、融合目标检测CenterFusion算法原理三.实现案例与代码数据集与实验环境数据预处理与增强模型定义......
  • shell正则表达式、sed基本用法及sed应用案例
    一、正则表达式●可以使用若干符号配合某工具对字符串进行增删改查操作1.1基本正则列表正则符号描述^匹配行首$匹配行尾[]集合,匹配集合中任意单个字符[^]对集合取反.匹配任意字符*匹配前一个字符任意次数【*不允许单独使用】\{n,m}匹配......
  • 英语中常见引导词的介绍和用法
    这些引导词可以分为几大类:关系代词、关系副词、从属连词等。我们将分别讨论它们的用法和例句。1.关系代词(RelativePronouns)关系代词用于引导定语从句,修饰先行词。常见的关系代词有who,whom,whose,which,that。1.1 who用法:指人,作主语。例句:Themanwhospoketo......
  • 基于YOLOV8模型的西红柿目标检测系统(PyTorch+Pyside6+YOLOv8模型)
    摘要:基于YOLOV8模型的西红柿目标检测系统可用于日常生活中检测与定位西红柿目标,利用深度学习算法可实现图片、视频、摄像头等方式的目标检测,另外本系统还支持图片、视频等格式的结果可视化与结果导出。本系统采用YOLOv8目标检测算法训练数据集,使用Pysdie6库来搭建前端页面展示......
  • C语言指针详解:用法与实例
    目录C语言指针详解:用法与实例引言1.指针基础1.1什么是指针?1.2如何声明指针?1.3获取变量的地址1.4解引用指针2.指针的高级用法2.1指针和数组2.2指针和函数参数2.3指针和动态内存分配3.指针的注意事项3.1空指针3.2悬空指针3.3指针运算C语言指针详......