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模块介绍的更多相关文章

  1. [Python]-torchvision.transforms模块-图像预处理

    PyTorch框架中常用torchvision模块来辅助计算机视觉算法的搭建,transforms用于图像的预处理. from torchvision import transforms 预处理操作集 ...

  2. 【小白学PyTorch】7 最新版本torchvision.transforms常用API翻译与讲解

    文章来自:微信公众号[机器学习炼丹术].欢迎关注支持原创 也欢迎添加作者微信:cyx645016617. 参考目录: 目录 1 基本函数 1.1 Compose 1.2 RandomChoice 1. ...

  3. CSS3_概述、发展史、模块介绍、与浏览器之间的关系

    一.CSS3概述和CSS3的发展史: 1.css3概述: CSS3是CSS2的升级版本,3只是版本号,它在CSS2.1的基础上增加了很多强大的新功能.    目前主流浏览器chrome.safari. ...

  4. PyTorch源码解读之torchvision.transforms(转)

    原文地址:https://blog.csdn.net/u014380165/article/details/79167753 版权声明:本文为博主原创文章,未经博主允许不得转载. https://bl ...

  5. [PyTorch 学习笔记] 2.2 图片预处理 transforms 模块机制

    PyTorch 的数据增强 我们在安装PyTorch时,还安装了torchvision,这是一个计算机视觉工具包.有 3 个主要的模块: torchvision.transforms: 里面包括常用的 ...

  6. webkit模块介绍

    一.Webkit模块   用到的第三方库如下:   cairo 一个2D绘图库 casqt Unicode处理用的库,从QT中抽取部分代码形成的 expat 一个XML SAX解析器的库 freety ...

  7. 【液晶模块系列基础视频】1.2.iM_RGB模块介绍

    [液晶模块系列基础视频]1.2.iM_RGB模块介绍(上) [液晶模块系列基础视频]1.2.iM_RGB模块介绍(下) ============================== 技术论坛:http ...

  8. 【液晶模块系列基础视频】1.1.iHMI43模块介绍

    [液晶模块系列基础视频]1.1.iHMI43模块介绍(上) [液晶模块系列基础视频]1.1.iHMI43模块介绍(下) ============================== 技术论坛:http ...

  9. 嵌入式系统图形库GUI核心模块介绍

    本文转载自:http://blog.csdn.net/xteda/article/details/6575278 (作者 冯青华 信庭嵌入式工作室(www.xteda.com)- CEO Blog:h ...

随机推荐

  1. 20180809-Java继承

    // A.java public class A{ private int i; protected int j; public void func(){ }} // B.javapublic cla ...

  2. [WC2012]记忆中的水杉树

    https://www.luogu.org/problemnew/show/P4125 题解 首先一开始所有的线段互不相交. 那么对于第二问来说,一定存在一种方法使得所有线段都朝着一个方向动. 比如说 ...

  3. js 通过浏览器直接打开应用程序(IOS,Android)

    实现效果 如下图所示,在手机浏览器中访问京东的手机版网站(m.jd.com),顶部会有一个广告图,点击这个广告图,如果手机上已经安装了京东App,则直接打开,如果没有安装,则开始下载. 实现方式 1. ...

  4. 基于ES6的tinyJquery

    原文地址:Bougie的博客 jQuery作为曾经Web前端的必备利器,随着MVVM框架的兴起,如今已稍显没落.但它操作DOM的便利性无出其右.我用ES6写了一个基于class简化版的jQuery,包 ...

  5. scau 1142 巡逻的士兵(分治)

    1142 巡逻的士兵 时间限制:1000MS  内存限制:65536K 提交次数:217 通过次数:58 题型: 编程题   语言: G++;GCC Description 有N个士兵站成一队列, 现 ...

  6. IHttpHandler

    https://docs.microsoft.com/en-us/dotnet/api/system.web.ihttphandler?view=netframework-4.8 Defines th ...

  7. hadoop分布式环境安装

    1. 下载hadoop和jdk安装包到指定目录,并安装java环境. 2.解压hadoop到指定目录,配置环境变量.vim /etc/profile export JAVA_HOME=/home/xi ...

  8. 简单了解winform

    WinForm是·Net开发平台中对Windows Form的一种称谓. Windows窗体可用于设计窗体和可视控件,以创建丰富的基于Windows的窗体应用程序.可以访问数据库中的数据,并在窗体上显 ...

  9. Linux 命令详解 - ps

    完整文档 ps 命令用于显示命令执行瞬间的进程状态(Process Status).如果想动态查看进程状态可以使用 top 命令. 进程的概念 进程类型 前台进程:由终端初始化,可以通过命令行进行交互 ...

  10. 16/7/11_PHP-数据库操作

    PHP支持哪些数据库 PHP通过安装相应的扩展来实现数据库操作,现代应用程序的设计离不开数据库的应用,当前主流的数据库有MsSQL,MySQL,Sybase,Db2,Oracle,PostgreSQL ...