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 相关文章推荐
使用Nginx+uWsgi实现Python的Django框架站点动静分离
Mar 21 Python
Collatz 序列、逗号代码、字符图网格实例
Jun 22 Python
django中模板的html自动转意方法
May 27 Python
Python 读取某个目录下所有的文件实例
Jun 23 Python
python批量复制图片到另一个文件夹
Sep 17 Python
pycharm 配置远程解释器的方法
Oct 28 Python
python2与python3中关于对NaN类型数据的判断和转换方法
Oct 30 Python
Python OOP类中的几种函数或方法总结
Feb 22 Python
Python实现的统计文章单词次数功能示例
Jul 08 Python
python 实现dict转json并保存文件
Dec 05 Python
使用TensorFlow直接获取处理MNIST数据方式
Feb 10 Python
PythonPC客户端自动化实现原理(pywinauto)
May 28 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 应用程序安全防范技术研究
2009/09/25 PHP
php延迟静态绑定实例分析
2015/02/08 PHP
php根据某字段对多维数组进行排序的方法
2015/03/07 PHP
PHP数据的提交与过滤基本操作实例详解
2016/11/11 PHP
php使用正则表达式获取字符串中的URL
2016/12/29 PHP
PHP使用SMTP邮件服务器发送邮件示例
2018/08/28 PHP
PHP获取ttf格式文件字体名的方法示例
2019/03/06 PHP
jquery入门——事件机制之事件中的冒泡现象示例解释
2020/09/12 Javascript
js异常捕获方法介绍
2013/04/10 Javascript
jQuery与getJson结合的用法实例
2015/08/07 Javascript
JavaScript实现九九乘法表的简单实例
2016/06/07 Javascript
Vue2.0 slot分发内容与props验证的方法
2017/12/12 Javascript
详解Angular系列之变化检测(Change Detection)
2018/02/26 Javascript
jQuery+Cookie实现切换皮肤功能【附源码下载】
2018/03/25 jQuery
Nuxt.js SSR与权限验证的实现
2018/11/21 Javascript
koa2 从入门到精通(小结)
2019/07/23 Javascript
基于vue的tab-list类目切换商品列表组件的示例代码
2020/02/14 Javascript
vue3自定义dialog、modal组件的方法
2021/01/04 Vue.js
[03:18]DOTA2放量测试专访820:希望玩家加入国服大家庭
2013/08/25 DOTA
[01:39:42]Fnatic vs Mineski 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
python写日志封装类实例
2015/06/28 Python
Python使用wxPython实现计算器
2018/01/30 Python
Python切片操作实例分析
2018/03/16 Python
基于Python实现签到脚本过程解析
2019/10/25 Python
python内置模块collections知识点总结
2019/12/19 Python
Python新手学习标准库模块命名
2020/05/29 Python
python实现逻辑回归的示例
2020/10/09 Python
使用 HTML5 Canvas 制作水波纹效果点击图片就会触发
2014/09/15 HTML / CSS
HTML5添加禁止缩放功能
2017/11/03 HTML / CSS
HTML5单选框、复选框、下拉菜单、文本域的实现代码
2020/12/01 HTML / CSS
《维生素c的故事》教学反思
2014/02/18 职场文书
预备党员转正思想汇报
2014/09/26 职场文书
企业愿景口号
2015/12/25 职场文书
Node.js实现断点续传
2021/06/23 Javascript
muduo TcpServer模块源码分析
2022/04/26 Redis
IDEA中sout快捷键无效问题的解决方法
2022/07/23 Java/Android