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实现合并字典的方法
Jul 07 Python
Flask框架的学习指南之用户登录管理
Nov 20 Python
Django 生成登陆验证码代码分享
Dec 12 Python
使用Python从零开始撸一个区块链
Mar 14 Python
python去除文件中重复的行实例
Jun 29 Python
Python中的 enum 模块源码详析
Jan 09 Python
python实现双色球随机选号
Jan 01 Python
Python字符串中删除特定字符的方法
Jan 15 Python
Python要如何实现列表排序的几种方法
Feb 21 Python
Python enumerate内置库用法解析
Feb 24 Python
python 实现图片修复(可用于去水印)
Nov 19 Python
Anaconda安装pytorch及配置PyCharm 2021环境
Jun 04 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
yii框架源码分析之创建controller代码
2011/06/28 PHP
PHP多进程之pcntl_fork的实例详解
2017/10/15 PHP
php校验公钥是否可用的实例方法
2019/09/17 PHP
js中日期的加减法
2015/05/06 Javascript
JQuery标签页效果的两个实例讲解(4)
2015/09/17 Javascript
JavaScript+html5 canvas制作色彩斑斓的正方形效果
2016/01/27 Javascript
jQuery 获取屏幕高度、宽度的简单实现案例
2016/05/17 Javascript
jQuery实现iframe父窗体和子窗体的相互调用
2016/06/17 Javascript
基于JS如何实现给字符加千分符(65,541,694,158)
2016/08/03 Javascript
angular-ui-sortable实现可拖拽排序列表
2016/12/28 Javascript
CodeMirror js代码加亮使用总结
2017/03/25 Javascript
关于axios返回空对象的问题解决
2017/04/04 Javascript
JS严格模式知识点总结
2018/02/27 Javascript
微信小程序按钮去除边框线分享页面功能
2018/08/27 Javascript
JS原生带缩略图的图片切换效果
2018/10/10 Javascript
vue transition 在子组件中失效的解决
2019/11/12 Javascript
Cython 三分钟入门教程
2009/09/17 Python
python中循环语句while用法实例
2015/05/16 Python
Python中使用多进程来实现并行处理的方法小结
2017/08/09 Python
python3库numpy数组属性的查看方法
2018/04/17 Python
OpenCV+python手势识别框架和实例讲解
2018/08/03 Python
pygame游戏之旅 计算游戏中躲过的障碍数量
2018/11/20 Python
关于sys.stdout和print的区别详解
2019/12/05 Python
HTML5超炫酷粒子效果的进度条的实现示例
2019/08/23 HTML / CSS
澳大利亚儿童和婴儿产品在线商店:Lime Tree Kids
2017/10/05 全球购物
英国演唱会订票网站:Ticket Selection
2018/03/27 全球购物
Java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类?
2012/05/30 面试题
网络事业创业计划书范文
2014/01/09 职场文书
乡镇综治宣传月活动总结
2014/07/02 职场文书
教师批评与自我批评总结
2014/10/16 职场文书
山东省召开党的群众路线教育实践活动总结大会新闻稿
2014/10/21 职场文书
让子弹飞观后感
2015/06/11 职场文书
2015年度考核个人工作总结
2015/10/24 职场文书
sass 常用备忘案例详解
2021/09/15 HTML / CSS
Mysql排序的特性详情
2021/11/01 MySQL
zabbix配置nginx监控的实现
2022/05/25 Servers