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中的True,False条件判断实例分析
Jan 12 Python
Linux下用Python脚本监控目录变化代码分享
May 21 Python
用Python进行简单图像识别(验证码)
Jan 19 Python
python如何生成网页验证码
Jul 28 Python
CentOS 7下安装Python3.6 及遇到的问题小结
Nov 08 Python
pandas读取CSV文件时查看修改各列的数据类型格式
Jul 07 Python
python 获取sqlite3数据库的表名和表字段名的实例
Jul 17 Python
如何表示python中的相对路径
Jul 08 Python
解决python中0x80072ee2错误的方法
Jul 19 Python
如何利用python之wxpy模块玩转微信
Aug 17 Python
pandas提升计算效率的一些方法汇总
May 30 Python
Python还能这么玩之只用30行代码从excel提取个人值班表
Jun 05 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数据库操作面向对象的优点
2006/10/09 PHP
php在服务器执行exec命令失败的解决方法
2012/03/03 PHP
分享一个PHP数据流应用的简单例子
2012/06/01 PHP
php selectradio和checkbox默认选择的实现方法详解
2013/06/29 PHP
smarty中js的调用方法示例
2014/10/27 PHP
PHP中md5()函数的用法讲解
2019/03/30 PHP
PHP实现微信公众号验证Token的示例代码
2019/12/16 PHP
asp批量修改记录的代码
2008/06/25 Javascript
javascript客户端解决方案 缓存提供程序
2010/07/14 Javascript
使用indexOf等在JavaScript的数组中进行元素查找和替换
2013/09/18 Javascript
三种检测iPhone/iPad设备方向的方法
2014/04/23 Javascript
js实现获取两个日期之间所有日期的方法
2016/06/17 Javascript
再谈javascript注入 黑客必备!
2016/09/14 Javascript
Bootstrap学习笔记之进度条、媒体对象实例详解
2017/03/09 Javascript
Vue插件写、用详解(附demo)
2017/03/20 Javascript
js时间查询插件使用详解
2017/04/07 Javascript
Vue路由跳转问题记录详解
2017/06/15 Javascript
jQuery实现的事件绑定功能基本示例
2017/10/11 jQuery
vue-cli初始化项目中使用less的方法
2018/08/09 Javascript
小程序实现新用户判断并跳转激活的方法
2019/05/20 Javascript
[42:00]完美世界DOTA2联赛PWL S3 Phoenix vs INK ICE 第一场 12.13
2020/12/17 DOTA
Windows下Python使用Pandas模块操作Excel文件的教程
2016/05/31 Python
python:pandas合并csv文件的方法(图书数据集成)
2018/04/12 Python
python爬取酷狗音乐排行榜
2019/02/20 Python
Python自定义函数计算给定日期是该年第几天的方法示例
2019/05/30 Python
基于YUV 数据格式详解及python实现方式
2019/12/09 Python
详解canvas drawImage()方法绘制图片不显示的问题
2018/10/08 HTML / CSS
Eclipse面试题
2014/03/22 面试题
家庭教育先进个人事迹材料
2014/01/24 职场文书
个性发展自我评价
2014/02/11 职场文书
致标枪运动员加油稿
2014/02/15 职场文书
优秀食品类广告词
2014/03/19 职场文书
2014年培训工作总结范文
2014/11/27 职场文书
党性教育心得体会(共6篇)
2016/01/21 职场文书
Mysql数据库手动及定时备份步骤
2021/11/07 MySQL
Python 匹配文本并在其上一行追加文本
2022/05/11 Python