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 + openpyxl处理excel2007文档思路以及心得
Jul 14 Python
Python查询阿里巴巴关键字排名的方法
Jul 08 Python
Python selenium如何设置等待时间
Sep 15 Python
Python max内置函数详细介绍
Nov 17 Python
python导入csv文件出现SyntaxError问题分析
Dec 15 Python
基于MTCNN/TensorFlow实现人脸检测
May 24 Python
一行代码让 Python 的运行速度提高100倍
Oct 08 Python
Python函数式编程实例详解
Jan 17 Python
python连接PostgreSQL过程解析
Feb 09 Python
使用Pycharm分段执行代码
Apr 15 Python
keras 实现轻量级网络ShuffleNet教程
Jun 19 Python
PIP和conda 更换国内安装源的方法步骤
Sep 21 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中文URL编解码(urlencode()rawurlencode()
2010/07/03 PHP
PHP中date()日期函数有关参数整理
2011/07/19 PHP
php文件上传、下载和删除示例
2020/08/28 PHP
PHP新特性之字节码缓存和内置服务器
2017/08/11 PHP
PHP调用微博接口实现微博登录的方法示例
2018/09/22 PHP
javascript 面向对象编程 function也是类
2009/09/17 Javascript
Fixie.js 自动填充内容的插件
2012/06/28 Javascript
浅谈checkbox的一些操作(实战经验)
2013/11/20 Javascript
深入浅析JSON.parse()、JSON.stringify()和eval()的作用详解
2016/04/03 Javascript
JS实现图片延迟加载并淡入淡出效果的简单方法
2016/08/25 Javascript
jQuery图片前后对比插件beforeAfter用法示例【附demo源码下载】
2016/09/20 Javascript
js模拟微博发布消息
2017/02/23 Javascript
全面解析Node.js 8 重要功能和修复
2017/06/02 Javascript
详解用函数式编程对JavaScript进行断舍离
2017/09/18 Javascript
jQuery实现标签子元素的添加和赋值方法
2018/02/24 jQuery
antd Upload 文件上传的示例代码
2018/12/14 Javascript
关于js陀螺仪的理解分析
2019/04/11 Javascript
在博客园博文中添加自定义右键菜单的方法详解
2020/02/05 Javascript
操作Windows注册表的简单的Python程序制作教程
2015/04/07 Python
Python中的urllib模块使用详解
2015/07/07 Python
Python正则简单实例分析
2017/03/21 Python
python妙用之编码的转换详解
2017/04/21 Python
wxPython的安装图文教程(Windows)
2017/12/28 Python
tensorflow TFRecords文件的生成和读取的方法
2018/02/06 Python
Window 64位下python3.6.2环境搭建图文教程
2018/09/19 Python
python保存字典和读取字典的实例代码
2019/07/07 Python
Python pandas自定义函数的使用方法示例
2019/11/20 Python
tensorflow2.0与tensorflow1.0的性能区别介绍
2020/02/07 Python
python+opencv实现移动侦测(帧差法)
2020/03/20 Python
python爬取招聘要求等信息实例
2020/11/20 Python
AmazeUI折叠式卡片布局,整合内容列表、表格组件实现
2020/08/20 HTML / CSS
日本高岛屋百货购物网站:TAKASHIMAYA
2019/03/24 全球购物
2014领导班子四风问题查摆思想汇报
2014/09/13 职场文书
施工单位工程部经理岗位职责
2015/04/09 职场文书
护士医德医风心得体会
2016/01/25 职场文书
2019年自助餐厅创业计划书模板
2019/08/22 职场文书