pytorch之ImageFolder使用详解


Posted in Python onJanuary 06, 2020

pytorch之ImageFolder

torchvision已经预先实现了常用的Dataset,包括前面使用过的CIFAR-10,以及ImageNet、COCO、MNIST、LSUN等数据集,可通过诸如torchvision.datasets.CIFAR10来调用。在这里介绍一个会经常使用到的Dataset——ImageFolder。

ImageFolder假设所有的文件按文件夹保存,每个文件夹下存储同一个类别的图片,文件夹名为类名,其构造函数如下:

ImageFolder(root, transform=None, target_transform=None, loader=default_loader)

它主要有四个参数:

root:在root指定的路径下寻找图片

transform:对PIL Image进行的转换操作,transform的输入是使用loader读取图片的返回对象

target_transform:对label的转换

loader:给定路径后如何读取图片,默认读取为RGB格式的PIL Image对象

label是按照文件夹名顺序排序后存成字典,即{类名:类序号(从0开始)},一般来说最好直接将文件夹命名为从0开始的数字,这样会和ImageFolder实际的label一致,如果不是这种命名规范,建议看看self.class_to_idx属性以了解label和文件夹名的映射关系。

图片结构如下所示:

pytorch之ImageFolder使用详解

from torchvision import transforms as T
import matplotlib.pyplot as plt
from torchvision.datasets import ImageFolder


dataset = ImageFolder('data/dogcat_2/')

# cat文件夹的图片对应label 0,dog对应1
print(dataset.class_to_idx)

# 所有图片的路径和对应的label
print(dataset.imgs)

# 没有任何的transform,所以返回的还是PIL Image对象
#print(dataset[0][1])# 第一维是第几张图,第二维为1返回label
#print(dataset[0][0]) # 为0返回图片数据
plt.imshow(dataset[0][0])
plt.axis('off')
plt.show()

加上transform

normalize = T.Normalize(mean=[0.4, 0.4, 0.4], std=[0.2, 0.2, 0.2])
transform = T.Compose([
     T.RandomResizedCrop(224),
     T.RandomHorizontalFlip(),
     T.ToTensor(),
     normalize,
])
dataset = ImageFolder('data1/dogcat_2/', transform=transform)

# 深度学习中图片数据一般保存成CxHxW,即通道数x图片高x图片宽
#print(dataset[0][0].size())

to_img = T.ToPILImage()
# 0.2和0.4是标准差和均值的近似
a=to_img(dataset[0][0]*0.2+0.4)
plt.imshow(a)
plt.axis('off')
plt.show()

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

Python 相关文章推荐
python中的reduce内建函数使用方法指南
Aug 31 Python
简单介绍Python中的readline()方法的使用
May 24 Python
python爬虫中get和post方法介绍以及cookie作用
Feb 08 Python
推荐10款最受Python开发者欢迎的Python IDE
Sep 16 Python
Python基于聚类算法实现密度聚类(DBSCAN)计算【测试可用】
Dec 26 Python
OpenCV搞定腾讯滑块验证码的实现代码
May 18 Python
Python中函数参数匹配模型详解
Jun 09 Python
Python实现12306火车票抢票系统
Jul 04 Python
python实现桌面托盘气泡提示
Jul 29 Python
OpenCV 表盘指针自动读数的示例代码
Apr 10 Python
python调用有道智云API实现文件批量翻译
Oct 10 Python
如何基于python实现单目三维重建详解
Jun 25 Python
pytorch之inception_v3的实现案例
Jan 06 #Python
pytorch之添加BN的实现
Jan 06 #Python
PyTorch学习:动态图和静态图的例子
Jan 06 #Python
pytorch动态网络以及权重共享实例
Jan 06 #Python
selenium中get_cookies()和add_cookie()的用法详解
Jan 06 #Python
pytorch中的自定义反向传播,求导实例
Jan 06 #Python
PyTorch中 tensor.detach() 和 tensor.data 的区别详解
Jan 06 #Python
You might like
提升PHP执行速度全攻略(上)
2006/10/09 PHP
WordPress中获取指定分类及其子分类下的文章数目
2015/12/31 PHP
Zend Framework教程之Application和Bootstrap用法详解
2016/03/10 PHP
功能强大的PHP POST提交数据类
2016/07/15 PHP
php字符集转换
2017/01/23 PHP
常用js脚本
2006/12/03 Javascript
两个DIV等高的JS的实现代码
2007/12/23 Javascript
单击复制文字兼容各浏览器的完美解决方案
2013/07/04 Javascript
javascipt匹配单行和多行注释的正则表达式
2013/11/20 Javascript
express的中间件bodyParser详解
2014/12/04 Javascript
AngularJs Modules详解及示例代码
2016/09/01 Javascript
angularjs中的$eval方法详解
2017/04/24 Javascript
Vue文件配置全局变量的实例
2018/09/06 Javascript
vue 进阶之实现父子组件间的传值
2019/04/26 Javascript
微信小程序Echarts覆盖正常组件问题解决
2019/07/13 Javascript
微信小程序里引入SVG矢量图标的方法
2019/09/20 Javascript
使用Python脚本来控制Windows Azure的简单教程
2015/04/16 Python
Python递归函数定义与用法示例
2017/06/02 Python
TensorFlow高效读取数据的方法示例
2018/02/06 Python
python微信跳一跳系列之棋子定位颜色识别
2018/02/26 Python
Python2.7 实现引入自己写的类方法
2018/04/29 Python
selenium+python 去除启动的黑色cmd窗口方法
2018/05/22 Python
Python selenium根据class定位页面元素的方法
2019/02/26 Python
Python django框架输入汉字,数字,字符生成二维码实现详解
2019/09/24 Python
通过实例解析python描述符原理作用
2020/01/22 Python
在pycharm中为项目导入anacodna环境的操作方法
2020/02/12 Python
Python实现扫码工具的示例代码
2020/10/09 Python
新西兰领先的内衣店:Bendon Lingerie新西兰
2018/07/11 全球购物
Linux如何为某个操作添加别名
2015/02/05 面试题
Prototype中如何为一个元素添加一个方法
2014/12/08 面试题
生物科学专业职业规划书范文
2014/02/11 职场文书
乳制品整治工作方案
2014/05/29 职场文书
工作违纪检讨书范文
2015/01/26 职场文书
MySQL中的布尔值,怎么存储false或true
2021/06/04 MySQL
python图像处理基本操作总结(PIL库、Matplotlib及Numpy)
2021/06/08 Python
MongoDB数据库的安装步骤
2021/06/18 MongoDB