pytorch之ImageFolder使用详解

 更新时间:2020年01月06日 17:56:42   作者:朴素.无恙  
今天小编就为大家分享一篇pytorch之ImageFolder使用详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

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和文件夹名的映射关系。

图片结构如下所示:

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用reduce和map把字符串转为数字的方法

    python用reduce和map把字符串转为数字的方法

    最近在复习高阶函数的时候,有一道题想了半天解不出来。于是上午搜索资料,看了下别人的解法,发现学习编程,思维真的很重要。下面这篇文章就来给大家介绍了python利用reduce和map把字符串转为数字的思路及方法,有需要的朋友们可以参考借鉴,下面来一起看看吧。
    2016-12-12
  • python中函数的参数详解

    python中函数的参数详解

    本文详细讲解了python中函数的参数,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-07-07
  • 如何使用Python修改matplotlib.pyplot.colorbar的位置以对齐主图

    如何使用Python修改matplotlib.pyplot.colorbar的位置以对齐主图

    使用matplotlib.colors模块可以完成大多数常见的任务,下面这篇文章主要给大家介绍了关于如何使用Python修改matplotlib.pyplot.colorbar的位置以对齐主图的相关资料,需要的朋友可以参考下
    2022-07-07
  • Python中schedule模块关于定时任务使用方法

    Python中schedule模块关于定时任务使用方法

    这篇文章主要介绍了Python中schedule模块关于定时任务使用方法,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-05-05
  • 利用python模拟sql语句对员工表格进行增删改查

    利用python模拟sql语句对员工表格进行增删改查

    这篇文章主要给大家介绍了关于利用python模拟sql语句实现对员工表格进行增删改查的相关资料,文中介绍了详细的需求以及示例代码,对大家的理解和学习具有一定的参考学习价值,需要的朋友们下面来一起看看吧。
    2017-07-07
  • Python 文本文件与csv文件的读取与写入

    Python 文本文件与csv文件的读取与写入

    这篇文章主要介绍了Python文本文件与csv文件的读取与写入,有读取文件的 read()方法、读取文件的readline() 方法、读取文件的 readlines()方法等相关读写内容,需要的小伙伴可以参考一下
    2022-03-03
  • python给指定csv表格中的联系人群发邮件(带附件的邮件)

    python给指定csv表格中的联系人群发邮件(带附件的邮件)

    这篇文章主要介绍了python给指定csv表格中的联系人群发邮件,本文通过代码讲解的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-12-12
  • Python中实现进度条的多种方法总结

    Python中实现进度条的多种方法总结

    在Python编程中,进度条是一个非常有用的功能,它能让用户直观地了解任务的进度,提升用户体验,本文将介绍几种在Python中实现进度条的常用方法,并通过代码示例和案例来展示它们的具体应用,需要的朋友可以参考下
    2025-01-01
  • 30秒轻松实现TensorFlow物体检测

    30秒轻松实现TensorFlow物体检测

    这篇文章主要为大家详细介绍了30秒轻松实现TensorFlow物体检测,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-03-03
  • python中的__slots__使用示例

    python中的__slots__使用示例

    这篇文章主要介绍了python中的__slots__使用示例,__slots__用来限制class能添加的属性,需要的朋友可以参考下
    2015-02-02

最新评论