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实现视频下载功能
Mar 14 Python
Python方法的延迟加载的示例代码
Dec 18 Python
pycharm打开命令行或Terminal的方法
Jan 16 Python
python列表使用实现名字管理系统
Jan 30 Python
python利用Opencv实现人脸识别功能
Apr 25 Python
win10系统下python3安装及pip换源和使用教程
Jan 06 Python
利用keras加载训练好的.H5文件,并实现预测图片
Jan 24 Python
Python使用urllib模块对URL网址中的中文编码与解码实例详解
Feb 18 Python
使用Nibabel库对nii格式图像的读写操作
Jul 01 Python
python 删除系统中的文件(按时间,大小,扩展名)
Nov 19 Python
变长双向rnn的正确使用姿势教学
May 31 Python
Python音乐爬虫完美绕过反爬
Aug 30 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
ThinkPHP采用模块和操作分析
2011/04/18 PHP
用 Composer构建自己的 PHP 框架之基础准备
2014/10/30 PHP
php unlink()函数使用教程
2018/07/12 PHP
laravel框架数据库操作、查询构建器、Eloquent ORM操作实例分析
2019/12/20 PHP
php 使用ActiveMQ发送消息,与处理消息操作示例
2020/02/23 PHP
表单提交时自动复制内容到剪贴板的js代码
2007/03/16 Javascript
Javascript面象对象成员、共享成员变量实验
2010/11/19 Javascript
JQuery 获取json数据$.getJSON方法的实例代码
2013/08/02 Javascript
JavaScript检测浏览器cookie是否已经启动的方法
2015/02/27 Javascript
Jsonp post 跨域方案
2015/07/06 Javascript
使用coffeescript编写node.js项目的方法汇总
2015/08/05 Javascript
jquery实现红色竖向多级向右展开的导航菜单效果
2015/08/31 Javascript
js 中文汉字转Unicode、Unicode转中文汉字、ASCII转换Unicode、Unicode转换ASCII、中文转换
2016/12/06 Javascript
AngularJS 验证码60秒倒计时功能的实现
2017/06/05 Javascript
修改 bootstrap table 默认detailRow样式的实例代码
2017/07/21 Javascript
vue mint-ui学习笔记之picker的使用
2017/10/11 Javascript
[04:12]第二届DOTA2亚洲邀请赛选手传记-Newbee.Sccc
2017/04/03 DOTA
Python描述器descriptor详解
2015/02/03 Python
Python实现截屏的函数
2015/07/25 Python
python字符串str和字节数组相互转化方法
2017/03/18 Python
django2 快速安装指南分享
2018/01/05 Python
详解Django中六个常用的自定义装饰器
2018/07/04 Python
利用python实现对web服务器的目录探测的方法
2019/02/26 Python
python实现祝福弹窗效果
2019/04/07 Python
Django项目使用CircleCI的方法示例
2019/07/14 Python
Python使用指定端口进行http请求的例子
2019/07/25 Python
python实现tail -f 功能
2020/01/17 Python
详解Selenium-webdriver绕开反爬虫机制的4种方法
2020/10/28 Python
美国南加州的原创极限运动潮牌:Vans(范斯)
2016/08/05 全球购物
美国围栏公司:Walpole Outdoors
2019/11/19 全球购物
毕业自我鉴定
2013/11/05 职场文书
四风查摆问题及整改措施
2014/10/10 职场文书
2014年保洁员工作总结
2014/11/19 职场文书
国庆庆典邀请函
2015/02/02 职场文书
2016年学校安全教育月活动总结
2016/04/06 职场文书
CSS实现多个元素在盒子内两端对齐效果
2021/03/30 HTML / CSS