pytorch torchvision.ImageFolder的用法介绍

作者:慢行厚积 时间:2023-05-29 17:20:49 

torchvision.datasets

Datasets 拥有以下API:

__getitem__

__len__

Datasets都是 torch.utils.data.Dataset的子类,所以,他们也可以通过torch.utils.data.DataLoader使用多线程(python的多进程)。

举例说明:

torch.utils.data.DataLoader(coco_cap, batch_size=args.batchSize, shuffle=True, num_workers=args.nThreads)

在构造函数中,不同的数据集直接的构造函数会有些许不同,但是他们共同拥有 keyword 参数。

transform: 一个函数,原始图片作为输入,返回一个转换后的图片。

target_transform - 一个函数,输入为target,输出对其的转换。例子,输入的是图片标注的string,输出为word的索引。

ImageFolder

一个通用的数据加载器,数据集中的数据以以下方式组织


root/dog/xxx.png
root/dog/xxy.png
root/dog/xxz.png

root/cat/123.png
root/cat/nsdf3.png
root/cat/asd932_.png

既其默认你的数据集已经自觉按照要分配的类型分成了不同的文件夹,一种类型的文件夹下面只存放一种类型的图片

运行命令为:

import torchvision.datasets as dset

dset.ImageFolder(root="root folder path", [transform, target_transform])

root : 指定图片存储的路径,在下面的例子中是'./data/dogcat_2'

transform: 一个函数,原始图片作为输入,返回一个转换后的图片。

target_transform - 一个函数,输入为target,输出对其的转换。例子,输入的是图片标注的string,输出为word的索引。

有以下成员变量:

self.classes - 用一个list保存 类名

self.class_to_idx - 类名对应的 索引

self.imgs - 保存(img-path, class) tuple的list

即后面可以通过查看返回的数据集对象来查看相应的值,下面举例说明:

图片为:

pytorch torchvision.ImageFolder的用法介绍

可见分成了cat和dog两类


import torchvision.datasets as dset
dataset = dset.ImageFolder('./data/dogcat_2') #没有transform,先看看取得的原始图像数据
print(dataset.classes) #根据分的文件夹的名字来确定的类别
print(dataset.class_to_idx) #按顺序为这些类别定义索引为0,1...
print(dataset.imgs) #返回从所有文件夹中得到的图片的路径以及其类别

返回:


['cat', 'dog']
{'cat': 0, 'dog': 1}
[('./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)]

如果在数据下面又添加了一个类型'others',那么访问类型的时候返回的就是:


['cat', 'dog', 'others']
{'cat': 0, 'dog': 1, 'others': 2}

查看得到的图片数据:


#从返回结果可见得到的数据仍是PIL Image对象
print(dataset[0])
print(dataset[0][0])
print(dataset[0][1]) #得到的是类别0,即cat

返回:


(<PIL.Image.Image image mode=RGB size=497x500 at 0x11D99A9B0>, 0)
<PIL.Image.Image image mode=RGB size=497x500 at 0x11DD24278>
0

然后定义一个对数据进行处理的transform:


#可以看出来此时得到的图片数据已经是处理过后的tensor数据了
print(dataset[0][0])
print(dataset[0][0].size()) #大小也是经过设定后的大小224
print(dataset[0][1]) #得到的是类别0,即cat

返回:


tensor([[[-0.7412, -0.7490, -0.7725, ..., 0.3176, 0.3412, 0.3725],
  [-0.7333, -0.7412, -0.7882, ..., 0.3255, 0.3647, 0.4039],
  [-0.7098, -0.7569, -0.8039, ..., 0.3255, 0.3725, 0.4039],
  ...,
  [ 0.3961, 0.3961, 0.4039, ..., 0.2627, 0.2627, 0.2549],
  [ 0.4196, 0.4039, 0.4118, ..., 0.2549, 0.2392, 0.2314],
  [ 0.4275, 0.4275, 0.4431, ..., 0.2314, 0.2314, 0.2235]],

[[-0.7412, -0.7490, -0.7725, ..., 0.3882, 0.3725, 0.3569],
  [-0.7333, -0.7412, -0.7882, ..., 0.3961, 0.3961, 0.3882],
  [-0.7098, -0.7569, -0.8039, ..., 0.3882, 0.4039, 0.3882],
  ...,
  [ 0.0431, 0.0510, 0.0667, ..., -0.0824, -0.0824, -0.0902],
  [ 0.0510, 0.0431, 0.0588, ..., -0.0824, -0.1059, -0.1137],
  [ 0.0353, 0.0353, 0.0510, ..., -0.0902, -0.1059, -0.1216]],

[[-0.8353, -0.8431, -0.8667, ..., 0.3255, 0.3255, 0.3255],
  [-0.8196, -0.8275, -0.8824, ..., 0.3333, 0.3490, 0.3569],
  [-0.7804, -0.8353, -0.8667, ..., 0.3333, 0.3569, 0.3569],
  ...,
  [-0.2863, -0.2784, -0.2627, ..., -0.3569, -0.3569, -0.3647],
  [-0.2549, -0.2706, -0.2549, ..., -0.3569, -0.3804, -0.3882],
  [-0.2235, -0.2471, -0.2392, ..., -0.3569, -0.3804, -0.4039]]])
torch.Size([3, 224, 224])

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

标签:pytorch,torchvision,ImageFolder
0
投稿

猜你喜欢

  • 用Python的Tornado框架结合memcached页面改善博客性能

    2023-07-21 09:14:20
  • python编写的最短路径算法

    2021-01-15 20:54:14
  • Python使用pyecharts控件绘制图表

    2023-11-08 17:59:54
  • 深入了解和应用Python 装饰器 @decorator

    2024-01-02 09:20:05
  • Python OpenCV读取显示视频的方法示例

    2023-07-02 16:13:42
  • 国外404错误页面的创意设计欣赏

    2007-08-19 15:44:00
  • 详解Python数据结构与算法中的顺序表

    2023-12-31 01:47:04
  • Python中的asyncio代码详解

    2022-03-14 00:01:33
  • 如何在python中执行另一个py文件

    2022-04-09 14:57:51
  • ASP Recordset 分页显示数据的方法(修正版)

    2011-04-10 10:42:00
  • python中列表添加的四种方法小结

    2023-12-10 21:59:47
  • PHP商品秒杀问题解决方案实例详解【mysql与redis】

    2023-09-27 10:49:04
  • php下使用iconv需要注意的问题

    2023-11-23 03:05:09
  • 安装pytorch时报sslerror错误的解决方案

    2022-01-01 05:20:53
  • Python 编程操作连载之字符串,列表,字典和集合处理

    2021-08-16 11:27:54
  • jsp include文件时的一个乱码解决方法

    2024-03-27 19:34:28
  • Oracle如何直接运行OS命令(下)第1/2页

    2010-07-30 13:26:00
  • 解决python3 urllib中urlopen报错的问题

    2022-01-11 10:33:32
  • Python变量及数据类型用法原理汇总

    2022-12-04 11:11:41
  • ASP函数指针试探-GetRef

    2009-10-12 12:39:00
  • asp之家 网络编程 m.aspxhome.com