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 相关文章推荐
在Mac OS上部署Nginx和FastCGI以及Flask框架的教程
May 02 Python
Python对list列表结构中的值进行去重的方法总结
May 07 Python
python使用SMTP发送qq或sina邮件
Oct 21 Python
Python简单读取json文件功能示例
Nov 30 Python
使用django-crontab实现定时任务的示例
Feb 26 Python
Python用for循环实现九九乘法表
May 31 Python
python字典的setdefault的巧妙用法
Aug 07 Python
Python倒排索引之查找包含某主题或单词的文件
Nov 13 Python
python 实现图片批量压缩的示例
Dec 18 Python
django注册用邮箱发送验证码的实现
Apr 18 Python
Python opencv缺陷检测的实现及问题解决
Apr 24 Python
解析python中的jsonpath 提取器
Jan 18 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
php开启安全模式后禁用的函数集合
2011/06/26 PHP
js用图作提交按钮或超连接
2008/03/26 Javascript
数组Array进行原型prototype扩展后带来的for in遍历问题
2010/02/07 Javascript
node.js中的events.emitter.removeListener方法使用说明
2014/12/10 Javascript
jQuery获得包含margin的outerWidth和outerHeight的方法
2015/03/25 Javascript
jQuery简单实现遍历数组的方法
2015/04/14 Javascript
Jquery中$.post和$.ajax的用法小结
2015/04/28 Javascript
node.js操作mysql(增删改查)
2015/07/24 Javascript
javascript学习总结之js使用技巧
2015/09/02 Javascript
js中常用的Tab切换效果(推荐)
2016/08/30 Javascript
jQuery与js实现颜色渐变的方法
2016/12/30 Javascript
JavaScript实现动态增删表格的方法
2017/03/09 Javascript
jquery实现简单实用的轮播器
2017/05/23 jQuery
Javascript实现基本运算器
2017/07/15 Javascript
JS实现的加减乘除四则运算计算器示例
2017/08/09 Javascript
Bootstrap导航菜单点击后无法自动添加active的处理方法
2018/08/10 Javascript
JS浅拷贝和深拷贝原理与实现方法分析
2019/02/28 Javascript
vue实现点击追加选中样式效果
2019/11/01 Javascript
Python的print用法示例
2014/02/11 Python
Python3.5.3下配置opencv3.2.0的操作方法
2018/04/02 Python
解决Django连接db遇到的问题
2019/08/29 Python
Lentiamo荷兰:在线订购隐形眼镜、隐形眼镜液和太阳镜
2019/10/25 全球购物
Oracle的内存结构(Memory structures)
2015/06/10 面试题
大学生自荐书范文
2013/12/10 职场文书
图书室管理制度
2014/01/19 职场文书
大学辅导员事迹材料
2014/02/05 职场文书
模具毕业生推荐信
2014/02/15 职场文书
改作风抓落实促发展心得体会
2014/09/10 职场文书
单位委托书范本(3篇)
2014/09/18 职场文书
微笑面对生活演讲稿
2014/09/23 职场文书
2015年党员岗位承诺书
2015/04/27 职场文书
元旦联欢晚会主持词
2015/07/01 职场文书
2016国庆促销广告语
2016/01/28 职场文书
python数据库批量插入数据的实现(executemany的使用)
2021/04/30 Python
Windows7下FTP搭建图文教程
2022/08/05 Servers
TypeScript 内置高级类型编程示例
2022/09/23 Javascript