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 random模块(获取随机数)常用方法和使用例子
May 13 Python
在Python中操作字符串之rstrip()方法的使用
May 19 Python
详解python调度框架APScheduler使用
Mar 28 Python
python自定义异常实例详解
Jul 11 Python
python机器学习理论与实战(二)决策树
Jan 19 Python
Python中装饰器学习总结
Feb 10 Python
python实现多线程网页下载器
Apr 15 Python
python 遍历列表提取下标和值的实例
Dec 25 Python
python下载库的步骤方法
Oct 12 Python
Python 文件数据读写的具体实现
Jan 24 Python
pycharm激活码快速激活及使用步骤
Mar 12 Python
pycharm无法安装第三方库的问题及解决方法以scrapy为例(图解)
May 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实现的简单三角形、矩形周长面积计算器分享
2014/11/18 PHP
php正则匹配html中带class的div并选取其中内容的方法
2015/01/13 PHP
PHP的Yii框架入门使用教程
2016/02/15 PHP
在PHP语言中使用JSON和将json还原成数组的方法
2016/07/19 PHP
HTTP头隐藏PHP版本号实现过程解析
2020/12/09 PHP
javascript 限制输入脚本大全
2009/11/03 Javascript
JavaScript 高级篇之函数 (四)
2012/04/07 Javascript
基于jquery自定义图片热区效果
2012/07/21 Javascript
jquery简单瀑布流实现原理及ie8下测试代码
2013/01/23 Javascript
原生js编写设为首页兼容ie、火狐和谷歌
2014/06/05 Javascript
jQuery中animate动画第二次点击事件没反应
2015/05/07 Javascript
jQuery实现图片走马灯效果的原理分析
2016/01/16 Javascript
基于jquery实现轮播焦点图插件
2016/03/31 Javascript
浅谈Angular的$q, defer, promise
2016/12/20 Javascript
原生JS发送异步数据请求
2017/06/08 Javascript
Openlayers实现测量功能
2020/09/25 Javascript
vue3+typeScript穿梭框的实现示例
2020/12/29 Vue.js
[00:33]2018DOTA2亚洲邀请赛TNC出场
2018/04/04 DOTA
python利用dir函数查看类中所有成员函数示例代码
2017/09/08 Python
python3之模块psutil系统性能信息使用
2018/05/30 Python
删除python pandas.DataFrame 的多重index实例
2018/06/08 Python
使用python脚本自动创建pip.ini配置文件代码实例
2019/09/20 Python
Python lxml模块的基本使用方法分析
2019/12/21 Python
python中pow函数用法及功能说明
2020/12/04 Python
Steiff台湾官网:德国金耳釦泰迪熊
2019/12/26 全球购物
军训自我鉴定
2014/01/22 职场文书
2014小学数学教研组工作总结
2014/12/06 职场文书
建筑质检员岗位职责
2015/04/08 职场文书
小学教师师德师风承诺书
2015/04/28 职场文书
大学宣传委员竞选稿
2015/11/19 职场文书
2016班级元旦联欢会开幕词
2016/03/04 职场文书
护理自荐信
2019/05/14 职场文书
python 模块重载的五种方法
2021/04/24 Python
Redis入门教程详解
2021/08/30 Redis
nginx 添加http_stub_status_module模块
2022/05/25 Servers
Python日志模块logging用法
2022/06/05 Python