网上做分销代销哪个网站好,外国人做那个视频网站吗,网站策划案4500,网络 设计文章目录 0. 前言1. ImageFolder功能2 基本使用方法及参数解析2.1 基本调用方式2.2 构造参数说明2.3 属性2.4 方法 3. PyTorch实例说明3.1 实例数据集3.2 实例说明 0. 前言 按照国际惯例#xff0c;首先声明#xff1a;本文只是我自己学习的理解#xff0c;虽然参考了他人的… 文章目录 0. 前言1. ImageFolder功能2 基本使用方法及参数解析2.1 基本调用方式2.2 构造参数说明2.3 属性2.4 方法 3. PyTorch实例说明3.1 实例数据集3.2 实例说明 0. 前言 按照国际惯例首先声明本文只是我自己学习的理解虽然参考了他人的宝贵见解及成果但是内容可能存在不准确的地方。如果发现文中错误希望批评指正共同进步。 torchvision.datasets.ImageFolder 是 PyTorch 中用于加载图像分类数据集的一个实用类。它特别适用于图像分类任务可以说是图像分类任务离不开ImageFolder因为它能够自动将文件夹结构映射到类别标签上。
本文将基于实例详细介绍ImageFolder类。
1. ImageFolder功能
ImageFolder 自动遍历指定目录下的所有子文件夹并将每个子文件夹视为一个不同的类别或标签。它允许用户轻松地加载和迭代训练/验证集中的图像数据同时自动提供对应的类别标签。可以方便地与 PyTorch 数据加载器DataLoader结合使用实现批量化、并行化数据加载这对于深度学习模型训练非常关键。
2 基本使用方法及参数解析
2.1 基本调用方式
from torchvision.datasets import ImageFolder
from torchvision import transforms
import PILroot ...
transforms transforms.Compose([...])
target_transform transforms.Compose([...])folder ImageFolder(rootroot, transformtransforms,target_transform target_transform, loaderPIL.Image.open)2.2 构造参数说明
root必需字符串类型表示数据集所在的根目录。transform可选几乎是必须一个 transforms 对象用于对读取的图像进行一系列预处理操作如调整大小、转为 tensor、标准化等。target_transform可选对目标标签进行转换的函数或变换对象。loader可选从没用过用于加载图像文件的函数。
2.3 属性
classes一个包含所有类别名称的列表按照文件夹名字排序。class_to_idx一个字典key为类别名称value为对应的整数索引。imgs:一个元组形为(image path, class_index)
2.4 方法
__getitem__(index)通过索引获取单个数据项返回一个元组 (image, target)其中 image 是经过 transform 处理后的图像 tensortarget 是对应的类别索引。
利用 ImageFolder 和 DataLoader 结合的方式可以高效地准备和访问数据从而大大简化了图像分类任务中数据预处理和加载的工作流程。
3. PyTorch实例说明
3.1 实例数据集
使用之前文章用过的hymenoptera数据集的简化版其文件结构如下
hymenoptera/hymenoptera_dataset/
├── train #训练组
│ ├── ants #4张图像
│ └── bees #5张图像
└── val #验证组├── ants #6张图像└── bees #7张图像3.2 实例说明
ImageFolder的属性实例说明
from torchvision.datasets import ImageFolderimage_path1 .\hymenoptera
image_path2 .\hymenoptera\hymenoptera_data
image_path3 .\hymenoptera\hymenoptera_data\\trainfolder1 ImageFolder(rootimage_path1)
print(folder1.classes, |,folder1.class_to_idx,|, folder1.imgs)
folder2 ImageFolder(rootimage_path2)
print(folder2.classes, |,folder2.class_to_idx,|, folder2.imgs)
folder3 ImageFolder(rootimage_path3)
print(folder3.classes, |,folder3.class_to_idx,|, folder3.imgs)输出为
[hymenoptera_data] | {hymenoptera_data: 0} | [(.\\hymenoptera\\hymenoptera_data\\train\\ants\\0013035.jpg, 0), ...)]
[train, val] | {train: 0, val: 1} | [(.\\hymenoptera\\hymenoptera_data\\train\\ants\\0013035.jpg, 0), ...)]
[ants, bees] | {ants: 0, bees: 1} | [(.\\hymenoptera\\hymenoptera_data\\train\\ants\\0013035.jpg, 0), ...)]这里可以看出虽然是同一个数据集但是root选择的文件夹层级不同会有不同的classes和自动编号的classes_id。但是无论选择哪个文件夹层级imgs都能自动遍历所选文件路径下的所有图像。从下面的方法说明也能看出
ImageFolder的方法实例说明
from torchvision.datasets import ImageFolderimage_path1 .\hymenoptera
image_path2 .\hymenoptera\hymenoptera_data
image_path3 .\hymenoptera\hymenoptera_data\\trainfolder1 ImageFolder(rootimage_path1)
folder2 ImageFolder(rootimage_path2)
folder3 ImageFolder(rootimage_path3)print(len(folder1),len(folder2),len(folder3)) #输出22 22 9for img,id in folder3:print(img,|,id)输出
PIL.Image.Image image modeRGB size768x512 at 0x20AA7E5D550 | 0
PIL.Image.Image image modeRGB size500x375 at 0x20AA7E5D7D0 | 0
PIL.Image.Image image modeRGB size500x369 at 0x20AA7E5ECD0 | 0
PIL.Image.Image image modeRGB size500x181 at 0x20AA7E5D850 | 0
PIL.Image.Image image modeRGB size500x450 at 0x20AA7E5D7D0 | 1
PIL.Image.Image image modeRGB size500x412 at 0x20AA7E5ECD0 | 1
PIL.Image.Image image modeRGB size500x334 at 0x20AA7E5D850 | 1
PIL.Image.Image image modeRGB size500x400 at 0x20AA7E5D7D0 | 1
PIL.Image.Image image modeRGB size500x173 at 0x20AA7E5ECD0 | 1
print(folder3[0]) #输出:(PIL.Image.Image image modeRGB size768x512 at 0x20AA7E5D850, 0)