pytorch torchvision.ImageFolder的用法介绍


Posted in Python onFebruary 20, 2020

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])

以上这篇pytorch torchvision.ImageFolder的用法介绍就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python 用户登录验证的小例子
Mar 06 Python
python使用三角迭代计算圆周率PI的方法
Mar 20 Python
Python学生信息管理系统修改版
Mar 13 Python
Python实用技巧之列表、字典、集合中根据条件筛选数据详解
Jul 11 Python
Python绘制并保存指定大小图像的方法
Jan 10 Python
python调用matlab的m自定义函数方法
Feb 18 Python
详解python读取image
Apr 03 Python
利用python在大量数据文件下删除某一行的例子
Aug 21 Python
python飞机大战 pygame游戏创建快速入门详解
Dec 17 Python
Python基于class()实现面向对象原理详解
Mar 26 Python
Python绘制全球疫情变化地图的实例代码
Apr 20 Python
Python制作简单的剪刀石头布游戏
Dec 10 Python
详解python常用命令行选项与环境变量
Feb 20 #Python
用什么库写 Python 命令行程序(示例代码详解)
Feb 20 #Python
在 Linux/Mac 下为Python函数添加超时时间的方法
Feb 20 #Python
Python os模块常用方法和属性总结
Feb 20 #Python
Python requests获取网页常用方法解析
Feb 20 #Python
pytorch实现保证每次运行使用的随机数都相同
Feb 20 #Python
Python argparse模块使用方法解析
Feb 20 #Python
You might like
黑夜路人出的几道php笔试题
2009/08/04 PHP
浅析php中如何在有限的内存中读取大文件
2013/07/02 PHP
用PHP代替JS玩转DOM的思路及示例代码
2014/06/15 PHP
PHP中使用CURL获取页面title例子
2015/01/07 PHP
超链接的禁用属性Disabled使用示例
2014/07/31 Javascript
js实现从中间开始往上下展开网页窗口的方法
2015/03/02 Javascript
JavaScript控制两个列表框listbox左右交换数据的方法
2015/03/18 Javascript
深入分析jsonp协议原理
2015/09/26 Javascript
JS弹出对话框实现方法(三种方式)
2015/12/18 Javascript
浅析Javascript匿名函数与自执行函数
2016/02/06 Javascript
JS实现Ajax的方法分析
2016/12/20 Javascript
bootstrapValidator 重新启用提交按钮的方法
2017/02/20 Javascript
Bootstrap Table使用整理(四)之工具栏
2017/06/09 Javascript
vue项目实现github在线预览功能
2018/06/20 Javascript
M2实现Nodejs项目自动部署的方法步骤
2019/05/05 NodeJs
js纯前端实现腾讯cos文件上传功能的示例代码
2019/05/14 Javascript
JQuery复选框全选效果如何实现
2020/05/08 jQuery
Vue中 axios delete请求参数操作
2020/08/25 Javascript
Python的gevent框架的入门教程
2015/04/29 Python
Python中list初始化方法示例
2016/09/18 Python
Python使用中文正则表达式匹配指定中文字符串的方法示例
2017/01/20 Python
彻底搞懂Python字符编码
2018/01/23 Python
我们为什么要减少Python中循环的使用
2019/07/10 Python
OpenCV 模板匹配
2019/07/10 Python
Python中PyQt5/PySide2的按钮控件使用实例
2019/08/17 Python
jupyter notebook指定启动目录的方法
2021/03/02 Python
意大利消费电子产品购物网站:SLG Store
2019/12/26 全球购物
大学毕业生最详细的自我评价分享
2013/11/18 职场文书
政法大学毕业生自荐信范文
2014/01/01 职场文书
创业计划书的写作技巧及要点
2014/01/31 职场文书
总经理岗位职责描述
2014/02/08 职场文书
珍惜水资源建议书
2014/03/12 职场文书
企业党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
幼儿园见习总结
2015/06/23 职场文书
解决go在函数退出后子协程的退出问题
2021/04/30 Golang
总结python多进程multiprocessing的相关知识
2021/06/29 Python