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 相关文章推荐
使用django-suit为django 1.7 admin后台添加模板
Nov 18 Python
Python实现获取网站PR及百度权重
Jan 21 Python
Jupyter中直接显示Matplotlib的图形方法
May 24 Python
Python 对输入的数字进行排序的方法
Jun 23 Python
浅谈Python在pycharm中的调试(debug)
Nov 29 Python
Python3.0中普通方法、类方法和静态方法的比较
May 03 Python
python使用time、datetime返回工作日列表实例代码
May 09 Python
Python Pandas 转换unix时间戳方式
Dec 07 Python
python 正则表达式参数替换实例详解
Jan 17 Python
如何使用PyCharm将代码上传到GitHub上(图文详解)
Apr 27 Python
QML实现钟表效果
Jun 02 Python
浅谈Python中对象是如何被调用的
Apr 06 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加密解密函数(动态加密)
2013/06/19 PHP
解析在zend Farmework下如何创立一个FORM表单
2013/06/28 PHP
php字符串分割函数用法实例
2015/03/17 PHP
详解PHP+AJAX无刷新分页实现方法
2015/11/03 PHP
php大小写转换函数(strtolower、strtoupper)用法介绍
2017/11/17 PHP
php自动加载代码实例详解
2021/02/26 PHP
JS 参数传递的实际应用代码分析
2009/09/13 Javascript
40款非常有用的 jQuery 插件推荐(系列一)
2011/12/21 Javascript
Angularjs实现搜索关键字高亮显示效果
2017/01/17 Javascript
简单谈谈vue的过渡动画(推荐)
2017/10/11 Javascript
vuex 项目结构目录及一些简单配置介绍
2018/04/08 Javascript
微信小程序 腾讯地图SDK 获取当前地址实现解析
2019/08/12 Javascript
原生js实现的移动端可拖动进度条插件功能详解
2019/08/15 Javascript
vue点击页面空白处实现保存功能
2019/11/06 Javascript
浅谈vue中组件绑定事件时是否加.native
2019/11/09 Javascript
vue ajax 拦截原理与实现方法示例
2019/11/29 Javascript
深入理解Python变量与常量
2016/06/02 Python
Python使用arrow库优雅地处理时间数据详解
2017/10/10 Python
python爬虫_实现校园网自动重连脚本的教程
2018/04/22 Python
python机器学习之KNN分类算法
2018/08/29 Python
Python中作用域的深入讲解
2018/12/10 Python
python区块及区块链的开发详解
2019/07/03 Python
基于python的Paxos算法实现
2019/07/03 Python
django自带调试服务器的使用详解
2019/08/29 Python
浅谈Python中range与Numpy中arange的比较
2020/03/11 Python
Python 通过爬虫实现GitHub网页的模拟登录的示例代码
2020/08/17 Python
HTML5 video视频字幕的使用和制作方法
2018/05/03 HTML / CSS
英国在线泳装店:Simply Swim
2019/05/05 全球购物
学前教育求职自荐信范文
2013/12/25 职场文书
消防安全承诺书
2014/05/22 职场文书
节能环保演讲稿
2014/08/28 职场文书
乡文化站暑期培训方案
2014/08/28 职场文书
2016年三八节红领巾广播稿
2015/12/17 职场文书
浅谈node.js中间件有哪些类型
2021/04/29 Javascript
OpenCV-Python使用cv2实现傅里叶变换
2021/06/09 Python
ICOM R71E和R72E图文对比解说
2022/04/07 无线电