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中while true的使用
Oct 13 Python
Python单例模式的两种实现方法
Aug 14 Python
Python如何实现MySQL实例初始化详解
Nov 06 Python
windows下添加Python环境变量的方法汇总
May 14 Python
Python最小二乘法矩阵
Jan 02 Python
Python实现查找最小的k个数示例【两种解法】
Jan 08 Python
python正则表达式匹配IP代码实例
Dec 28 Python
Python响应对象text属性乱码解决方案
Mar 31 Python
python求解汉诺塔游戏
Jul 09 Python
基于Python爬取素材网站音频文件
Oct 21 Python
pytorch 如何使用amp进行混合精度训练
May 24 Python
python基础之错误和异常处理
Oct 24 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
windwos下使用php连接oracle数据库的过程分享
2014/05/26 PHP
wampserver改变默认网站目录的办法
2015/08/05 PHP
初学prototype,发个JS接受URL参数的代码
2006/09/25 Javascript
原创javascript小游戏实现代码
2010/08/19 Javascript
js二维数组定义和初始化的三种方法总结
2014/03/03 Javascript
jQuery调用ajax请求的常见方法汇总
2015/03/24 Javascript
纯js代码实现简单计算器
2015/12/02 Javascript
深入剖析JavaScript面向对象编程
2016/07/12 Javascript
JS自定义函数对web前端上传的文件进行类型大小判断
2016/10/19 Javascript
移动端日期插件Mobiscroll.js使用详解
2016/12/19 Javascript
vue axios 在页面切换时中断请求方法 ajax
2018/03/05 Javascript
微信小程序实现图片上传放大预览删除代码
2020/06/28 Javascript
浅析Vue项目中使用keep-Alive步骤
2018/07/27 Javascript
vuejs实现ready函数加载完之后执行某个函数的方法
2018/08/31 Javascript
vue数据初始化initState的实例详解
2019/04/11 Javascript
搭建一个nodejs脚手架的方法步骤
2019/06/28 NodeJs
小程序实现日历左右滑动效果
2019/10/21 Javascript
微信小程序自定义导航栏(模板化)
2019/11/15 Javascript
el-form 多层级表单的实现示例
2020/09/10 Javascript
python实现的二叉树算法和kmp算法实例
2014/04/25 Python
python学习之面向对象【入门初级篇】
2017/01/21 Python
浅谈python中copy和deepcopy中的区别
2017/10/23 Python
不知道这5种下划线的含义,你就不算真的会Python!
2018/10/09 Python
python统计指定目录内文件的代码行数
2019/09/19 Python
python 单线程和异步协程工作方式解析
2019/09/28 Python
利用python Selenium实现自动登陆京东签到领金币功能
2019/10/31 Python
python 伯努利分布详解
2020/02/25 Python
windows python3安装Jupyter Notebooks教程
2020/04/13 Python
python+requests实现接口测试的完整步骤
2020/10/27 Python
美国浴缸、水槽和水龙头购物网站:Vintage Tub & Bath
2019/11/05 全球购物
电大自我鉴定
2013/10/27 职场文书
公司培训欢迎词
2014/01/10 职场文书
小学教师师德师风自我剖析材料
2014/09/29 职场文书
2015年团队工作总结范文
2015/05/04 职场文书
廉洁自律准则学习心得体会
2016/01/13 职场文书
小学音乐课教学反思
2016/02/18 职场文书