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实现的一个简单LRU cache
Sep 26 Python
浅谈Python中copy()方法的使用
May 21 Python
Python的Django框架可适配的各种数据库介绍
Jul 15 Python
python3操作mysql数据库的方法
Jun 23 Python
Python实现字典按照value进行排序的方法分析
Dec 23 Python
在Python中表示一个对象的方法
Jun 25 Python
Python整数对象实现原理详解
Jul 01 Python
利用python Selenium实现自动登陆京东签到领金币功能
Oct 31 Python
python去除删除数据中\u0000\u0001等unicode字符串的代码
Mar 06 Python
新建文件时Pycharm中自动设置头部模板信息的方法
Apr 17 Python
Python 防止死锁的方法
Jul 29 Python
Python根据字符串调用函数过程解析
Nov 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提交表单时判断 if($_POST[submit])与 if(isset($_POST[submit])) 的区别
2011/02/08 PHP
PHP缓存技术的多种方法小结
2012/08/14 PHP
Codeigniter上传图片出现“You did not select a file to upload”错误解决办法
2014/06/12 PHP
Thinkphp 框架配置操作之配置加载与读取配置实例分析
2020/05/15 PHP
Thinkphp5+Redis实现商品秒杀代码实例讲解
2020/12/29 PHP
基于JQuery的类似新浪微博展示信息效果的代码
2012/07/23 Javascript
js获取图片宽高的方法
2015/11/25 Javascript
深入理解Java线程编程中的阻塞队列容器
2015/12/07 Javascript
javascript产生随机数方法汇总
2016/01/25 Javascript
JavaScript 链式结构序列化详解
2016/09/30 Javascript
vue实现简单实时汇率计算功能
2017/01/15 Javascript
Javascript中 toFixed四舍六入方法
2017/08/21 Javascript
浅谈Vue2.0父子组件间事件派发机制
2018/01/08 Javascript
vue cli2.0单页面title修改方法
2018/06/07 Javascript
详细讲解如何创建, 发布自己的 Vue UI 组件库
2019/05/29 Javascript
解决Layui 表格自适应高度的问题
2019/11/15 Javascript
vue 计算属性和侦听器的使用小结
2021/01/25 Vue.js
Python实现拼接多张图片的方法
2014/12/01 Python
用Python创建声明性迷你语言的教程
2015/04/13 Python
linux平台使用Python制作BT种子并获取BT种子信息的方法
2017/01/20 Python
python+selenium开发环境搭建图文教程
2017/08/11 Python
深入理解Django的自定义过滤器
2017/10/17 Python
python按综合、销量排序抓取100页的淘宝商品列表信息
2018/02/24 Python
利用matplotlib为图片上添加触发事件进行交互
2020/04/23 Python
Django分组聚合查询实例分享
2020/04/29 Python
Python中内建模块collections如何使用
2020/05/27 Python
python3.4中清屏的处理方法
2020/07/06 Python
CK澳大利亚官网:Calvin Klein澳大利亚
2020/12/12 全球购物
使用C#编写创建一个线程的代码
2013/01/22 面试题
新闻记者实习自我鉴定
2013/09/19 职场文书
揠苗助长教学反思
2014/02/04 职场文书
办公室综合文员岗位职责范本
2014/02/13 职场文书
项目合作协议书范本
2014/04/16 职场文书
2014年十一国庆节爱国演讲稿
2014/09/23 职场文书
个性与发展自我评价
2015/03/06 职场文书
贷款工资证明范本
2015/06/12 职场文书