一、transforms的介绍


在pytorch中,图像的预处理过程中常常需要对图片的格式、尺寸等做一系列的变化,这就需要借助transforms。

__all__ = ["Compose", "ToTensor", "PILToTensor", "ConvertImageDtype", "ToPILImage", "Normalize", "Resize", "Scale","CenterCrop", "Pad", "Lambda", "RandomApply", "RandomChoice", "RandomOrder", "RandomCrop","RandomHorizontalFlip", "RandomVerticalFlip", "RandomResizedCrop", "RandomSizedCrop", "FiveCrop", "TenCrop","LinearTransformation", "ColorJitter", "RandomRotation", "RandomAffine", "Grayscale", "RandomGrayscale","RandomPerspective", "RandomErasing", "GaussianBlur", "InterpolationMode", "RandomInvert", "RandomPosterize","RandomSolarize", "RandomAdjustSharpness", "RandomAutocontrast", "RandomEqualize"]

这是官方文档里所有的transforms下的操作,以下就根据官方文档和我自己的理解介绍几个常用的transforms方法。

1、transforms.ToTensor()

ToTensor就是将 "PIL Image" 或者 "numpy.ndarray" 格式转换为tensor格式,tensor格式的数据可以直接作为网络的输入。

from PIL import Image
from torchvision import transformsimg = Image.open("../**.png")
trans_totensor = transforms.ToTensor()
img_tensor = trans_totensor(img)

运行上述范例代码可以很清楚的看到transforms.ToTensor前后的变化。

#原始的图片信息
<PIL.PngImagePlugin.PngImageFile image mode=RGB size=477x362 at 0x1E58CEB8FD0>#transforms.ToTensor后的图片信息
tensor([[[0.2510, 0.2431, 0.2392,  ..., 0.2392, 0.2275, 0.2314],[0.2471, 0.2392, 0.2353,  ..., 0.2471, 0.2627, 0.2627],[0.2549, 0.2549, 0.2549,  ..., 0.2549, 0.2471, 0.2471],...,[0.2784, 0.2902, 0.2784,  ..., 0.9843, 0.9961, 1.0000],[0.3020, 0.3059, 0.2824,  ..., 0.9608, 0.9843, 0.9647],[0.3176, 0.2902, 0.2863,  ..., 1.0000, 0.9686, 0.9608]],[[0.2510, 0.2431, 0.2392,  ..., 0.2392, 0.2275, 0.2314],[0.2471, 0.2392, 0.2353,  ..., 0.2471, 0.2627, 0.2627],[0.2549, 0.2549, 0.2549,  ..., 0.2549, 0.2471, 0.2471],...,[0.2784, 0.2902, 0.2784,  ..., 0.9843, 0.9961, 1.0000],[0.3020, 0.3059, 0.2824,  ..., 0.9608, 0.9843, 0.9647],[0.3176, 0.2902, 0.2863,  ..., 1.0000, 0.9686, 0.9608]],[[0.2510, 0.2431, 0.2392,  ..., 0.2392, 0.2275, 0.2314],[0.2471, 0.2392, 0.2353,  ..., 0.2471, 0.2627, 0.2627],[0.2549, 0.2549, 0.2549,  ..., 0.2549, 0.2471, 0.2471],...,[0.2784, 0.2902, 0.2784,  ..., 0.9843, 0.9961, 1.0000],[0.3020, 0.3059, 0.2824,  ..., 0.9608, 0.9843, 0.9647],[0.3176, 0.2902, 0.2863,  ..., 1.0000, 0.9686, 0.9608]]])

2、transforms.Normalize

Normalize就是使用均值和标准差对张量进行归一化处理,其输出通道计算方法为:

output[channel] = (input[channel] - mean[channel]) / std[channel]

举例说明,这里设置均值和标准差都为0.5,

trans_norm = transforms.Normalize([0.5, 0.5, 0.5], [0.5, 0.5, 0.5])
img_norm = trans_norm(img_tensor)

那么output=(input-0.5)/0.5=2*input-1,根据这个公式计算出对应的输出,结果为:

tensor([[[-0.4980, -0.5137, -0.5216,  ..., -0.5216, -0.5451, -0.5373],[-0.5059, -0.5216, -0.5294,  ..., -0.5059, -0.4745, -0.4745],[-0.4902, -0.4902, -0.4902,  ..., -0.4902, -0.5059, -0.5059],...,[-0.4431, -0.4196, -0.4431,  ...,  0.9686,  0.9922,  1.0000],[-0.3961, -0.3882, -0.4353,  ...,  0.9216,  0.9686,  0.9294],[-0.3647, -0.4196, -0.4275,  ...,  1.0000,  0.9373,  0.9216]],[[-0.4980, -0.5137, -0.5216,  ..., -0.5216, -0.5451, -0.5373],[-0.5059, -0.5216, -0.5294,  ..., -0.5059, -0.4745, -0.4745],[-0.4902, -0.4902, -0.4902,  ..., -0.4902, -0.5059, -0.5059],...,[-0.4431, -0.4196, -0.4431,  ...,  0.9686,  0.9922,  1.0000],[-0.3961, -0.3882, -0.4353,  ...,  0.9216,  0.9686,  0.9294],[-0.3647, -0.4196, -0.4275,  ...,  1.0000,  0.9373,  0.9216]],[[-0.4980, -0.5137, -0.5216,  ..., -0.5216, -0.5451, -0.5373],[-0.5059, -0.5216, -0.5294,  ..., -0.5059, -0.4745, -0.4745],[-0.4902, -0.4902, -0.4902,  ..., -0.4902, -0.5059, -0.5059],...,[-0.4431, -0.4196, -0.4431,  ...,  0.9686,  0.9922,  1.0000],[-0.3961, -0.3882, -0.4353,  ...,  0.9216,  0.9686,  0.9294],[-0.3647, -0.4196, -0.4275,  ...,  1.0000,  0.9373,  0.9216]]])

这里可以稍做验证,取第一个数0.2510,计算“(0.2510-0.5)/0.5=-0.4980”,发现与结果吻合,其他同理,可自行挑选验证。

3、transforms.Resize

Resize就是对图像的尺寸进行变换,这种变换并不会改变图像的格式。

trans_resize = transforms.Resize((224, 224))
img_resize = trans_resize(img)

输出结果为:

<PIL.Image.Image image mode=RGB size=224x224 at 0x2129684C130>

4、transforms.Compose

Compose的功能就是将多个transforms组合起来,这里举例来说明,还是对图片的尺寸进行变换,然后转换为tensor形式

trans_resize_2 = transforms.Resize((224, 224))
trans_compose = transforms.Compose([trans_resize_2, trans_totensor])
img_resize_2 = trans_compose(img)

输出结果为:

tensor([[[0.2471, 0.2588, 0.2510,  ..., 0.2392, 0.2431, 0.2431],[0.2510, 0.2471, 0.2471,  ..., 0.2471, 0.2471, 0.2471],[0.2510, 0.2510, 0.2510,  ..., 0.2510, 0.2392, 0.2510],...,[0.2824, 0.2902, 0.3020,  ..., 0.3255, 0.7608, 0.9882],[0.2863, 0.2784, 0.2784,  ..., 0.5686, 0.9412, 0.9922],[0.3020, 0.2863, 0.2863,  ..., 0.8471, 0.9804, 0.9725]],[[0.2471, 0.2588, 0.2510,  ..., 0.2392, 0.2431, 0.2431],[0.2510, 0.2471, 0.2471,  ..., 0.2471, 0.2471, 0.2471],[0.2510, 0.2510, 0.2510,  ..., 0.2510, 0.2392, 0.2510],...,[0.2824, 0.2902, 0.3020,  ..., 0.3255, 0.7608, 0.9882],[0.2863, 0.2784, 0.2784,  ..., 0.5686, 0.9412, 0.9922],[0.3020, 0.2863, 0.2863,  ..., 0.8471, 0.9804, 0.9725]],[[0.2471, 0.2588, 0.2510,  ..., 0.2392, 0.2431, 0.2431],[0.2510, 0.2471, 0.2471,  ..., 0.2471, 0.2471, 0.2471],[0.2510, 0.2510, 0.2510,  ..., 0.2510, 0.2392, 0.2510],...,[0.2824, 0.2902, 0.3020,  ..., 0.3255, 0.7608, 0.9882],[0.2863, 0.2784, 0.2784,  ..., 0.5686, 0.9412, 0.9922],[0.3020, 0.2863, 0.2863,  ..., 0.8471, 0.9804, 0.9725]]])

5、transforms.RandomCrop

RandomCrop是对图像进行随机裁剪,这里可以用来进行数据增强等,具体实现代码如范例程序。

trans_random = transforms.RandomCrop(224)
trans_compose_2 = transforms.Compose([trans_random, trans_totensor])
for i in range(10):img_crop = trans_compose_2(img)

以上就是一些常见的transforms操作,为了更加直观的看出图像预处里过程,可以使用tensorboard。


以上就是我关于tansforms中一些常见操作的介绍,写的不是很规范,欢迎大家批评与讨论,我们一起进步!

transforms的使用方法相关推荐

  1. pytorch(7)——二十二种transforms数据预处理方法

    **一.数据增强** 数据增强:叫数据增广,数据扩增,他是对训练集进行变换,使训练集更丰富从而让模型更具泛化能力. 二.transforms--裁剪 1)transforms.Centercrop 功 ...

  2. 深度学习(PyTorch)——Transforms的使用方法与技巧

    B站UP主"我是土堆"视频内容 Transforms主要是对数据进行特定的变化 Transforms的结构及其用法 在pycharm输入from torchvision impor ...

  3. 常见的Transforms的使用方法

    常见的Transforms使用方法 目录 前言 一.pythion中__call__()方法的用法 二.ToTensor的使用 三.Normalize(归一化)的使用 四.Resize的使用 五.在C ...

  4. PyTorch框架学习六——图像预处理transforms(二)

    PyTorch框架学习六--图像预处理transforms(二) (续)二.transforms的具体方法 4.图像变换 (1)尺寸变换:transforms.Resize() (2)标准化:tran ...

  5. PyTorch框架学习五——图像预处理transforms(一)

    PyTorch框架学习五--图像预处理transforms(一) 一.transforms运行机制 二.transforms的具体方法 1.裁剪 (1)随机裁剪:transforms.RandomCr ...

  6. 深度之眼Pytorch打卡(九):Pytorch数据预处理——预处理过程与数据标准化(transforms过程、Normalize原理、常用数据集均值标准差与数据集均值标准差计算)

    前言   前段时间因为一些事情没有时间或者心情学习,现在两个多月过去了,事情结束了,心态也调整好了,所以又来接着学习Pytorch.这篇笔记主要是关于数据预处理过程.数据集标准化与数据集均值标准差计算 ...

  7. 【深度学习】图像数据集处理常用方法合集(部分基于pytorch)

    [深度学习]图像数据集处理常用方法合集(部分基于pytorch) 1 图像数据集预处理的目的1.1 灰度图转化1.2 高斯滤波去除高斯噪声 2 使用双峰法进行图像二值化处理2.1 图像直方图2.2 双 ...

  8. pytorch自定义图片输入

    pytorch使用其自带的数据集制作训练集和测试集是简单的,但我们需要训练自己的数据集时就要自己写函数来进行图片划分,转义,输入等操作了. 这里我以四种天气数据为例来说明如果用pytorch进行自定义 ...

  9. 深度学习之图像隐写去除(DDSP模型 Steganography Removal)

    文章目录 一 前言 二 论文内容 2.1 Abstract 2.2 Introduction 2.3 Background 2.3.1 Prior Work 2.3.2 Super Resolutio ...

  10. 完整代码及解析!!手写数字识别系统(手写数字测试识别 + pytoch实现 + 完整代码及解析)

    基于深度学习的手写数字识别系统 一.实验目的 ​ 1.任选实验环境及深度学习框架,实现手写数字识别系统: ​ 2.掌握所采用的深度血迹框架构建方式. 二.实验理论基础 1.MNIST数据集 ​ MNI ...

最新文章

  1. C++动态二维数组演示的代码
  2. 失眠——耳部按摩(组图)
  3. java map类型转换_Java string类型转换成map代码实例
  4. 以基因大数据推进“精准医疗”规划
  5. Vmware 虚拟机提示:无法打开磁盘***.vmdk 无法启动虚拟机 解决办法
  6. AWS 人工智能黑客马拉松正式开启!用实力演绎科技向善!
  7. 微信小程序把玩(三十四)Audio API
  8. python定位文件位置_在Python中定位文件位置
  9. 数学建模4 拟合算法
  10. 开源天生就不是为了赚钱!
  11. 在python中使用sort_详解python中sort排序使用
  12. Vue:打印组件PrintPage
  13. Nature Reviews Neuroscience综述:认知和行为的灵活性-神经机制和临床考虑
  14. win7保护眼睛的颜色设置方法
  15. 解决IDEA : Could not autowire. No beans of ‘xxxx‘ type found
  16. 7-156 输出大写英文字母 (15 分)
  17. 8in1模拟器v2模拟飞行_重新想象飞行模拟器:过去和现在
  18. 智慧工厂之化工厂人员定位系统给化工厂带来了巨大的改变-新导智能
  19. [加载XlUE组件失败,迅雷看看桌面图标已损坏,请重新安装。]问题处理
  20. asar文件用什么打开_AppData可以删除吗?AppData文件夹是什么用的?

热门文章

  1. 图中最深的根 (25分)
  2. 机器学习笔记1-What is Machine Learning
  3. [js]整合google,51ditu和mapbar的地图API [此博文包含图片]
  4. android 播放器全屏模式,ArtVideoPlayer 一个灵活的Android视频播放器,支持全屏,小屏播放...
  5. 2021周记16:父母和4平米的出租房
  6. POSTGRESQL 设置hugepage 可以让系统使用内存更有效率,防止OOM
  7. 数字图像处理基础-第三章图像预处理
  8. winedit 改字体大小
  9. linux系统文件夹(转)
  10. 三位数的茎叶图怎么看_如何看懂茎叶图