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 相关文章推荐
wxpython 学习笔记 第一天
Mar 16 Python
Python实现豆瓣图片下载的方法
May 25 Python
Python脚本实现12306火车票查询系统
Sep 30 Python
windows下ipython的安装与使用详解
Oct 20 Python
Python+Socket实现基于UDP协议的局域网广播功能示例
Aug 31 Python
Python爬虫常用小技巧之设置代理IP
Sep 13 Python
NLTK 3.2.4 环境搭建教程
Sep 19 Python
对pandas将dataframe中某列按照条件赋值的实例讲解
Nov 29 Python
python实现两张图片的像素融合
Feb 23 Python
python set集合使用方法解析
Nov 05 Python
python matplotlib画盒图、子图解决坐标轴标签重叠的问题
Jan 19 Python
Python判断变量是否是None写法代码实例
Oct 09 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使用Jpgraph创建3D饼形图效果示例
2017/02/15 PHP
Laravel下生成验证码的类
2017/11/15 PHP
如何让您的中波更粗更长 - 中波框形天线制作
2021/03/10 无线电
javascript 控制 html元素 显示/隐藏实现代码
2009/09/01 Javascript
asp.net+js 实现无刷新上传解析csv文件的代码
2010/05/17 Javascript
js+xml生成级联下拉框代码
2012/07/24 Javascript
jQuery渐变发光导航菜单的实例代码
2013/03/27 Javascript
Javascript 绘制 sin 曲线过程附图
2014/08/21 Javascript
JQuery实现的购物车功能(可以减少或者添加商品并自动计算价格)
2015/01/13 Javascript
JS+CSS实现可以凹陷显示选中单元格的方法
2015/03/02 Javascript
javascript实现图片上传前台页面
2015/08/18 Javascript
Angularjs中如何使用filterFilter函数过滤
2016/02/06 Javascript
基于Bootstrap+jQuery.validate实现表单验证
2016/05/30 Javascript
基于React+Redux的SSR实现方法
2018/07/03 Javascript
微信小程序实现两边小中间大的轮播效果的示例代码
2018/12/07 Javascript
用js限制网页只在微信浏览器中打开(或者只能手机端访问)
2020/12/24 Javascript
使用Element的InfiniteScroll 无限滚动组件报错的解决
2020/07/27 Javascript
关于JavaScript数组去重的一些理解汇总
2020/09/10 Javascript
vue3.0搭配.net core实现文件上传组件
2020/10/29 Javascript
python使用百度翻译进行中翻英示例
2014/04/14 Python
python中类和实例如何绑定属性与方法示例详解
2017/08/18 Python
python打包压缩、读取指定目录下的指定类型文件
2018/04/12 Python
使用pandas读取csv文件的指定列方法
2018/04/21 Python
Python切片索引用法示例
2018/05/15 Python
Python实现的特征提取操作示例
2018/12/03 Python
Python FtpLib模块应用操作详解
2019/12/12 Python
python绘图pyecharts+pandas的使用详解
2020/12/13 Python
html5 canvas-1.canvas介绍(hello canvas)
2013/01/07 HTML / CSS
90后毕业生的求职信范文
2013/09/21 职场文书
优质的学校老师推荐信
2013/10/28 职场文书
司机岗位职责
2013/11/15 职场文书
股票投资建议书
2014/05/19 职场文书
党员教师四风问题对照检查材料
2014/09/26 职场文书
2014年结对帮扶工作总结
2014/12/17 职场文书
护理心得体会范文
2016/01/22 职场文书
Python实现科学占卜 让视频自动打码
2022/04/09 Python