torchvision.transforms模块介绍
torchvision.transforms模块
官网地址:https://pytorch.org/docs/stable/torchvision/transforms.html#
torchvision是独立于PyTorch的关于图像操作的一个工具库,目前包括六个模块:
- torchvision.datasets:几个常用视觉数据集,可以下载和加载,以及如何编写自己的Dataset。
- torchvision.models:经典模型,例如AlexNet、VGG、ResNet等,以及训练好的参数。
- torchvision.transforms:常用的图像操作,例随机切割、旋转、数据类型转换、tensor与numpy 和PIL Image的互换等。
- torchvision.ops:提供CV中常用的一些操作,比如NMS、ROI_Align、ROI_Pool等。
- torchvision.io:提供输入输出的一些操作,目前针对的是视频的写入写出。
- torchvision.utils:其他工具,比如产生一个图像网格等。
这里主要介绍torchvision.transforms模块。
torchvision.transforms模块按照功能,可分为5个部分,所有转换均可用torchvision.transforms.Compose() 来组合。
- Transforms on PIL Image:在PIL Image上进行的转换,比如随机翻转、剪切等。
- Transforms on torch.Tensor:在tensor上进行的转换,最常用的是归一化操作transforms.Normalize(mean, std, inplace=False)。
- Conversion Transforms:PIL.Image/numpy.ndarray与Tensor的相互转换。
- Generic Transforms:提供自定义转换接口。
- Functional Transforms:不同于前面的转换,这里可以提供更细粒度的控制,需要自己提供随机生成器或指定参数。
下面重点介绍PIL.Image/numpy.ndarray与Tensor的相互转换,归一化,对PIL.Image进行裁剪、缩放等操作。
1 PIL.Image/numpy.ndarray与Tensor的相互转换
PIL.Image/numpy.ndarray转化为Tensor,常常用在训练模型阶段的数据读取,而Tensor转化为PIL.Image/numpy.ndarray则用在验证模型阶段的数据输出。
from torchvision import transforms
transform1 = transforms.Compose([
transforms.ToTensor() #PIL Image/ndarray (H,W,C) [0,255] to tensor (C,H,W) [0.0,1.0]
])
##numpy.ndarray与Tensor的相互转换
import cv2
import numpy as np
img_path = 'Lenna.png'
img1 = cv2.imread(img_path) #img1格式为ndarray (512,512,3) uint8 BGR
img_1 = transform1(img1) #tensor (3,512,512) float32 范围是[0.0,1.0]
#将转换后的tensor还原成ndarray
img_11 = (img_1.numpy() * 255).astype('uint8')
img_11 = np.transpose(img_11, (1,2,0))
#判断两者是否相等
print((img1==img_11).all()) #True
#显示
cv2.imshow('img_11', img_11)
cv2.waitKey()
##PIL.Image与Tensor的相互转换
from PIL import Image
img2 = Image.open(img_path) #为PIL图像对象,即PIL.PngImagePlugin.PngImageFile,默认RGB
img_2 = transform1(img2) #tensor (3,512,512) float32 范围是[0.0,1.0]
#将转换后的tensor还原成PIL Image
img_22 = transforms.ToPILImage()(img_2) #PIL.Image.Image
img_22.show()
2 归一化 transforms.Normalize
transforms.Normalize使用该公式进行归一化:channel = (channel-mean) / std.
上面的示例中,将transform1改成下面的transform2,即可将tensor数据的范围由[0.0,1.0]归一化到[-1.0, 1.0]
transform2 = transforms.Compose([
transforms.ToTensor(),
transforms.Normalize(mean = (0.5, 0.5, 0.5), std = (0.5, 0.5, 0.5))
])
3 PIL.Image的缩放裁剪等操作
transforms还提供了裁剪缩放等操作,以便进行数据增强。下面就看一个随机裁剪的例子,这个例子中,仍然使用 Compose 将 transforms 组合在一起。注意,这里对图像的操作主要是针对PIL.Image对象,所以需要先转换成PIL.Image格式。
transform3 = transforms.Compose([
transforms.ToTensor(),
transforms.ToPILImage(),
transforms.RandomCrop((300,300)),
])
img = Image.open(img_path)
img3 = transform3(img)
img3.show()
Reference:
torchvision.transforms模块介绍的更多相关文章
- [Python]-torchvision.transforms模块-图像预处理
PyTorch框架中常用torchvision模块来辅助计算机视觉算法的搭建,transforms用于图像的预处理. from torchvision import transforms 预处理操作集 ...
- 【小白学PyTorch】7 最新版本torchvision.transforms常用API翻译与讲解
文章来自:微信公众号[机器学习炼丹术].欢迎关注支持原创 也欢迎添加作者微信:cyx645016617. 参考目录: 目录 1 基本函数 1.1 Compose 1.2 RandomChoice 1. ...
- CSS3_概述、发展史、模块介绍、与浏览器之间的关系
一.CSS3概述和CSS3的发展史: 1.css3概述: CSS3是CSS2的升级版本,3只是版本号,它在CSS2.1的基础上增加了很多强大的新功能. 目前主流浏览器chrome.safari. ...
- PyTorch源码解读之torchvision.transforms(转)
原文地址:https://blog.csdn.net/u014380165/article/details/79167753 版权声明:本文为博主原创文章,未经博主允许不得转载. https://bl ...
- [PyTorch 学习笔记] 2.2 图片预处理 transforms 模块机制
PyTorch 的数据增强 我们在安装PyTorch时,还安装了torchvision,这是一个计算机视觉工具包.有 3 个主要的模块: torchvision.transforms: 里面包括常用的 ...
- webkit模块介绍
一.Webkit模块 用到的第三方库如下: cairo 一个2D绘图库 casqt Unicode处理用的库,从QT中抽取部分代码形成的 expat 一个XML SAX解析器的库 freety ...
- 【液晶模块系列基础视频】1.2.iM_RGB模块介绍
[液晶模块系列基础视频]1.2.iM_RGB模块介绍(上) [液晶模块系列基础视频]1.2.iM_RGB模块介绍(下) ============================== 技术论坛:http ...
- 【液晶模块系列基础视频】1.1.iHMI43模块介绍
[液晶模块系列基础视频]1.1.iHMI43模块介绍(上) [液晶模块系列基础视频]1.1.iHMI43模块介绍(下) ============================== 技术论坛:http ...
- 嵌入式系统图形库GUI核心模块介绍
本文转载自:http://blog.csdn.net/xteda/article/details/6575278 (作者 冯青华 信庭嵌入式工作室(www.xteda.com)- CEO Blog:h ...
随机推荐
- 【説明する】DS
其实就是数据结构课后题整理....只会一个是什么鬼 染色问题: 线段树? 功能太强大了! 我们并不需要那么多的功能 运用并查集!!! 将相同的并为一段 BZOJ 2375(讲真我没找到这个题在哪里.. ...
- 27 August
高精度 struct bigint{ int a[1000],an; bigint operator = (int b){ an=0; while (b){a[an++]=b%10;b/=10;} r ...
- eclipse 启动 tomcat 报错:Server mylocalhost was unable to start within 45 seconds
这个专门转载一篇博文也是为了讽刺一下自己二逼的程序员职业,哈哈. eclipse启动tomcat服务器报错:Server mylocalhost was unable to start within ...
- 如何实现全屏遮罩(附Vue.extend和el-message源码学习)
[Vue]如何实现全屏遮罩(附Vue.extend和el-message源码学习) 在做个人项目的时候需要做一个类似于电子相册浏览的控件,实现过程中首先要实现全局遮罩,结合自己的思路并阅读了(饿了么) ...
- 北风设计模式课程---备忘录(Memento)模式
北风设计模式课程---备忘录(Memento)模式 一.总结 一句话总结: 备忘录模式也是一种比较常用的模式用来保存对象的部分用于恢复的信息,和原型模式有着本质的区别,广泛运用在快照功能之中.同样的使 ...
- Docker容器日常操作命令
在Docker的运用中,从下载镜像,启动容器,在容器中输入命令来运行程序,这些命令都是手工一条条往里输入的,无法重复利用,而且效率很低.所以就需要一 种文件或脚本,我们把想执行的操作以命令的方式写入其 ...
- P1040加分二叉树
据说窝回去的那几天考了n次试 过去了一个月才想起来补锅 传送 首先来区分一下什么是中序遍历,什么又是前序遍历 中序遍历:左,根,右(也就是说给出一个序列(按照中序遍历的序列),第i个点左边的点都是i的 ...
- Skyline(6.x)-二次开发手册使用技巧
毕业设计选择 Skyline 的 Web 端二次开发,由于以前没有接触过 ActiveX 控件的使用,二次开发手册是英文的读起来有点吃力,并且 IE 直接控制台输出 ActiveX 控件创建的对象看不 ...
- Vue自定义事件:触发自定义事件
一 项目结构 二 子组件(Mongo.vue) <template> <button @click="eat">按钮</button> < ...
- Linux下复杂PC问题——多进程编程/信号量通信/共享存储区
进程相关函数 pid_t fork(); 头文件:unistd.h,sys/types.h 作用:建立一个新进程(子进程),子进程与原进程(父进程)共享代码段,并拥有父进程的其他资源(数据.堆栈等)的 ...