pytorch中图像的数据格式实例


Posted in Python onFebruary 11, 2020

计算机视觉方面朋友都需要跟图像打交道,在pytorch中图像与我们平时在matlab中见到的图像数据格式有所不同。matlab中我们通常使用函数imread()来轻松地读入一张图像,我们在变量空间中可看到数据的存储方式是H x W x C的顺序(其中H、W、C分别表示图像的高、宽和通道数,通道数一般为RGB三通道),另外,其中的每一个数据都是[0,255]的整数。

在使用pytorch的时候,我们通常要使用pytorch中torchvision包下面的datasets模块和transforms模块。而通常情况下在我们使用了这两个模块之后,所处理的图像数据格式已经不是我们所熟知的格式了。

下面按照代码来进行讲解:

#导入需要的包和模块
import torch
from torchvision import datasets, transforms
import os
 
#transforms指明了需要对原始图像做何种变换
data_transforms = transforms.Compose([
    transforms.RandomResizedCrop(224),
    transforms.RandomHorizontalFlip(),
    transforms.ToTensor(),
    transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
  ])
 
#指明了图像存放的位置;里面可能有好几个文件夹,分别存放不同种类的图像
data_dir = 'original_data'
image_dataset = datasets.ImageFolder(data_dir, data_transforms)
dataloader = torch.utils.data.DataLoader(image_dataset, batch_size=4, shuffle=True, num_workers=4)

代码中首先使用datasets模块读取图像数据,输出的图像类型为PILImage,并且图像中的每一个数据大小范围已经不再是[0,255],而是[0,1]。datasets模块下有好几个读取图像的类,比如CIFAR10、MNIST等能够直接获取标准数据库;而我们代码中所使用的类是ImageFolder,它能够读取本地存放的图像。其中需要指定图像所在文件路径和需要对数据进行的变换。

从上面的data_transforms变量中我们能够看出进行了多种变换,而Compose就是将多种变换组合起来的方法。data_transforms中一共包含了四个变换,前两个是对PILImage进行的,分别对其进行随机大小(默认原始图像大小的0.08-1.0)和随机宽高比(默认原始图像宽高比的3/4-4/3)的裁剪,之后resize到指定大小224;以及对原始图像进行随机(默认0.5概率)的水平翻转。

第三个transforms.ToTensor()的变换操作是关键一步,它将PILImage转变为torch.FloatTensor的数据形式,这种数据形式一定是C x H x W的图像格式加上[0,1]的大小范围。它将颜色通道这一维从第三维变换到了第一维。

后面的Normalize变换是对tensor这种数据格式进行的,它的操作是用给定的均值和标准差分别对每个通道的数据进行正则化。具体来说,给定均值(M1,...,Mn),给定标准差(S1,..,Sn),其中n是通道数(一般是3),对每个通道进行如下操作:

output[channel] = (input[channel] - mean[channel]) / std[channel]

经过上面一系列的转换之后,我们可以得出的结论是,图像的数据格式首先在维度的排序上发生了改变,其次数据的范围也发生了改变。

以上这篇pytorch中图像的数据格式实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python抓取网页图片示例(python爬虫)
Apr 27 Python
python使用sorted函数对列表进行排序的方法
Apr 04 Python
把MySQL表结构映射为Python中的对象的教程
Apr 07 Python
Python实现一个转存纯真IP数据库的脚本分享
May 21 Python
Python利用ElementTree模块处理XML的方法详解
Aug 31 Python
python3 字符串/列表/元组(str/list/tuple)相互转换方法及join()函数的使用
Apr 03 Python
OpenCV图像颜色反转算法详解
May 13 Python
Python实现 PS 图像调整中的亮度调整
Jun 28 Python
Pytorch: 自定义网络层实例
Jan 07 Python
python 实现人和电脑猜拳的示例代码
Mar 02 Python
python安装dlib库报错问题及解决方法
Mar 16 Python
Python Pytorch查询图像的特征从集合或数据库中查找图像
Apr 09 Python
对tensorflow中tf.nn.conv1d和layers.conv1d的区别详解
Feb 11 #Python
python中文分词库jieba使用方法详解
Feb 11 #Python
Transpose 数组行列转置的限制方式
Feb 11 #Python
Tensorflow:转置函数 transpose的使用详解
Feb 11 #Python
tensorflow多维张量计算实例
Feb 11 #Python
python误差棒图errorbar()函数实例解析
Feb 11 #Python
解决Python3.8用pip安装turtle-0.0.2出现错误问题
Feb 11 #Python
You might like
无线电广播的开始
2002/01/30 无线电
php记录日志的实现代码
2011/08/08 PHP
基于preg_match_all采集后数据处理的一点心得笔记(编码转换和正则匹配)
2014/01/31 PHP
jQuery+PHP实现的掷色子抽奖游戏实例
2015/01/04 PHP
Javascript的闭包
2009/12/31 Javascript
js创建对象的几种常用方式小结(推荐)
2010/10/24 Javascript
Node.js实现的简易网页抓取功能示例
2014/12/05 Javascript
javascript引用赋值(地址传值)用法实例
2015/01/13 Javascript
JavaScript函数使用的基本教程
2015/06/04 Javascript
JavaScript的jQuery库中ready方法的学习教程
2015/08/14 Javascript
JSP基于Bootstrap分页显示实例解析
2016/06/12 Javascript
Vue2.0利用 v-model 实现组件props双向绑定的优美解决方案
2017/03/13 Javascript
jQuery实现的动态文字变化输出效果示例【附演示与demo源码下载】
2017/03/24 jQuery
Vue.js学习教程之列表渲染详解
2017/05/17 Javascript
angular directive的简单使用总结
2017/05/24 Javascript
js+html制作简单日历的方法
2017/06/27 Javascript
基于JS递归函数细化认识及实用实例(推荐)
2017/08/07 Javascript
Vue 创建组件的两种方法小结(必看)
2018/02/23 Javascript
react配置antd按需加载的使用
2019/02/11 Javascript
微信小程序BindTap快速连续点击目标页面跳转多次问题处理
2019/04/08 Javascript
node实现简单的增删改查接口实例代码
2019/08/22 Javascript
Vue 自定义指令功能完整实例
2019/09/17 Javascript
VSCode搭建Vue项目的方法
2020/04/30 Javascript
vue接口请求加密实例
2020/08/11 Javascript
详解Python中的Cookie模块使用
2015/07/06 Python
Python设计模式之观察者模式简单示例
2018/01/10 Python
python中使用.py配置文件的方法详解
2020/11/23 Python
Under Armour澳大利亚官网:美国知名的高端功能性运动品牌
2018/02/22 全球购物
应届生法律求职信
2013/10/22 职场文书
计划生育标语
2014/06/23 职场文书
2015年党日活动总结范文
2015/03/25 职场文书
乡镇法制宣传日活动总结
2015/05/05 职场文书
上甘岭观后感
2015/06/10 职场文书
2015年社区国庆节活动总结
2015/07/30 职场文书
导游词之重庆渣滓洞
2020/01/08 职场文书
MySQL 使用索引扫描进行排序
2021/06/20 MySQL