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

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

  • 一、transforms运行机制
  • 二、transforms的具体方法
    • 1.裁剪
      • (1)随机裁剪:transforms.RandomCrop()
      • (2)中心裁剪:transforms.CenterCrop()
      • (3)随机长宽比裁剪:transforms.RandomCrop()
      • (4)上下左右中心裁剪:transforms.FiveCrop()
      • (5)上下左右中心裁剪后翻转:transforms.TenCrop()
    • 2.翻转、旋转
      • (1)依概率p水平翻转:transforms.RandomHorizontalFlip()
      • (2)依概率p垂直翻转:transforms.RandomVerticalFlip()
      • (3)随机旋转:transforms.RandomRotation()

一、transforms运行机制

介绍transforms之前先简单介绍一下torchvision。

torchvision是PyTorch的计算机视觉工具包,包含了一些与CV相关的处理。有三个需要重要介绍:

  1. torchvision.transforms:包含了常用的图像预处理方法,如数据中心化、标准化、缩放、裁剪等。
  2. torchvision.datasets:包含了常用数据集的dataset实现,如MNIST、CIFAR-10、ImageNet等。
  3. torchvision.model:包含了常用的预训练模型,如AlexNet、VGG、ResNet、GoogleNet等。

在transforms中除了具体的预处理方法之外,有一个Compose操作,这里提前介绍,它可以将一系列transforms操作有序地组合包装,以此按顺序执行每一项操作。

torchvision.transforms.Compose(transforms)

参数:
在这里插入图片描述
如:

>>> transforms.Compose([
>>>     transforms.CenterCrop(10),
>>>     transforms.ToTensor(),
>>> ])

二、transforms的具体方法

transforms的操作一般的目的是为了图像预处理和数据增强,所谓数据增强,又称数据增广、数据扩增,它是对训练集进行变换,使训练集更丰富,从而让模型更具泛化能力。下面将介绍二十多种具体的transforms的方法。

1.裁剪

(1)随机裁剪:transforms.RandomCrop()

功能:从图片中随机裁剪出尺寸为size的部分,图像可以是PIL格式或者是张量。

torchvision.transforms.RandomCrop(size, padding=None, pad_if_needed=False, fill=0, padding_mode='constant')

参数如下:
在这里插入图片描述

  1. size:(序列或int)若为int,则是(size,size)的大小,若为序列如(h,w),则大小为(h,w)。
  2. padding:(序列或int,可选)默认为None,当为整数a时,上下左右的边均要填充a个像素;当为(a, b)时,上下两边填充b个像素,左右两边填充a个;当为(a, b, c, d)时,左、上、右、下分别填充a、b、c、d个像素。
  3. pad_if_need:(布尔型)如果输入的图像尺寸小于要裁剪的尺寸size,则填充,以防报错。
  4. fill:padding_mode中constant模式时设置填充的像素值,默认为0。
  5. padding_mode:填充模式,有四种,constant、edge、reflect和symmetric,默认为constant,而且目前symmetric模式不支持输入为张量(Tensor)。constant模式:像素值由fill设定;edge模式:由图像边缘像素决定;reflect模式:镜像填充,最后一个像素不镜像,如[1, 2, 3, 4]→[3, 2, 1, 2, 3, 4, 3, 2];symmetric模式:镜像填充,最后一个像素也镜像,如[1, 2, 3, 4]→[2, 1, 1, 2, 3, 4, 4, 3]。

下面看一下随机裁剪的几个例子及其效果,变换前图片的原始尺寸为224×224,如下图所示:
在这里插入图片描述

(1)随机裁剪尺寸为224,padding=16,即四边都填充16个像素,就是在256×256的范围随机裁剪224×224的大小,效果如下图所示:

transforms.RandomCrop(224, padding=16)

在这里插入图片描述
(2)随机裁剪尺寸为224,padding=(16, 64),即左右填充16个像素,上下填充64个像素,就是在256×352 的范围随机裁剪224×224的大小,效果如下图所示:

transforms.RandomCrop(224, padding=(16, 64))

在这里插入图片描述
(3)与(1)不同之处就在于像素的填充,这里设定了填充的像素值为(255, 0, 0),效果如下图所示:

transforms.RandomCrop(224, padding=16, fill=(255, 0, 0))

在这里插入图片描述
(4)随机裁剪的尺寸为512,大于原始图像的尺寸224,所以pad_if_needed必须设置为True来进行自动填充,扩大尺寸(填充是随机的),效果如下图所示:

transforms.RandomCrop(512, pad_if_needed=True)

在这里插入图片描述
(5)与(1)或(3)不同的是,填充模式设定为‘edge’,效果如下图所示:

transforms.RandomCrop(224, padding=64, padding_mode='edge')

在这里插入图片描述
(6)与(1)或(3)或(5)不同的是,填充模式设定为 ‘reflect’ ,效果如下图所示:

transforms.RandomCrop(224, padding=64, padding_mode='reflect')

在这里插入图片描述
(7)最后看一个综合一点的:

transforms.RandomCrop(1024, padding=1024, padding_mode='symmetric')

在这里插入图片描述

(2)中心裁剪:transforms.CenterCrop()

功能:从图像中心裁剪图片,图片可以是PIL格式或是张量。

torchvision.transforms.CenterCrop(size)

在这里插入图片描述
例子如下:

transforms.CenterCrop(128)

在这里插入图片描述

transforms.CenterCrop(512)

在这里插入图片描述

(3)随机长宽比裁剪:transforms.RandomCrop()

功能:随机大小、长宽比裁剪图片,图片可以是PIL格式或是张量。

torchvision.transforms.RandomResizedCrop(size, scale=(0.08, 1.0), ratio=(0.75, 1.3333333333333333), interpolation=2)

参数如下:
在这里插入图片描述

  1. size:同上。
  2. scale:随机裁剪的大小区间,如scale=(0.08, 1.0),即随机裁剪出的图片面积会在原始面积的0.08倍至1.0倍之间。
  3. ratio:随机长宽比的范围,默认为(3/4,4/3)。
  4. interpolation:插值方法,有三种,分别为PIL.Image.NEAREST、PIL.Image.BILINEAR、PIL.Image.BICUBIC,默认为PIL.Image.BILINEAR。

例子如下:裁剪出来的部分是原来部分面积的0.5倍,但是大小又必须为224不变,所以用了默认了插值方法PIL.Image.BILINEAR。

transforms.RandomResizedCrop(size=224, scale=(0.5, 0.5))

在这里插入图片描述

(4)上下左右中心裁剪:transforms.FiveCrop()

功能:对给定图像的四个角以及中心进行裁剪,图片可以是PIL格式或是张量,返回一个包含五个元素的元组(tuple),一般都要紧跟一个将元组转变为张量的操作,而且还要注意前后代码尺寸上的匹配

torchvision.transforms.FiveCrop(size)

参数size同上。

例子如下,紧跟了一个将元组变换为张量的操作:

transforms.FiveCrop(112)
transforms.Lambda(lambda crops: torch.stack([(transforms.ToTensor()(crop)) for crop in crops])),

在这里插入图片描述

(5)上下左右中心裁剪后翻转:transforms.TenCrop()

功能:在图像(PIL格式或者是张量)的上下左右四个角以及中心裁剪出尺寸为size的5张图片,TenCrop对这5张图片进行水平或垂直镜像从而获得10张图片。

torchvision.transforms.TenCrop(size, vertical_flip=False)

参数如下:
在这里插入图片描述

  1. size:同上。
  2. vertical_flip:设置为True时,会垂直翻转,为False时,会水平翻转,默认为False。
transforms.TenCrop(112, vertical_flip=False)
transforms.Lambda(lambda crops: torch.stack([(transforms.ToTensor()(crop)) for crop in crops])),

在这里插入图片描述

2.翻转、旋转

(1)依概率p水平翻转:transforms.RandomHorizontalFlip()

功能:依概率水平翻转,输入图像为PIL格式或是张量。

torchvision.transforms.RandomHorizontalFlip(p=0.5)

参数:
在这里插入图片描述
例子如下:

transforms.RandomHorizontalFlip(p=1)

在这里插入图片描述

(2)依概率p垂直翻转:transforms.RandomVerticalFlip()

功能:依概率垂直翻转,输入图像为PIL格式或是张量。

torchvision.transforms.RandomVerticalFlip(p=0.5)

在这里插入图片描述
例子如下:

transforms.RandomVerticalFlip(p=1)

在这里插入图片描述

(3)随机旋转:transforms.RandomRotation()

功能:随机旋转图片。

torchvision.transforms.RandomRotation(degrees, resample=False, expand=False, center=None, fill=None)

参数如下:
在这里插入图片描述

  1. degrees:旋转的角度,当为a时,在(-a, a)之间选择旋转角度;当为(a, b)时,在(a, b)之间选择角度。
  2. resample:(可选)重采样方法(以后细学)。
  3. expand:(布尔,可选)若为True,则会自动扩大输出尺寸,以保证原图信息不丢失;若为False或省略,输出尺寸保持和输入一致。
  4. center:(可选)旋转中心,以左上角为原点(0,0),默认旋转中心为图像中心点。
  5. fill:像素填充值,默认为0,只支持pillow>=5.2.0版本。

注意:expand的计算公式是针对中心点旋转的,若设置为左上角旋转或者其他点为旋转中心,则不能保证保持原图信息。

下面看几个例子:
(1)中心点旋转,范围(-90度,90度):

transforms.RandomRotation(90)

在这里插入图片描述
(2)设置expand保持原图信息,图像尺寸自动扩大:

transforms.RandomRotation((90), expand=True)

在这里插入图片描述
(3)旋转中心改为左上角:

transforms.RandomRotation(30, center=(0, 0))

在这里插入图片描述

(4)旋转中心为左上角并进行expand:

transforms.RandomRotation(30, center=(0, 0), expand=True)

结果不能保证保持原图信息:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/491710.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

机器之心 GitHub 项目地址:

机器之心 GitHub 项目地址:https://github.com/jiqizhixin/ML-Tutorial-Experiment

IBM Watson大裁70% 员工,撕掉了国内大批伪AI企业最后一块遮羞布!

来源:新医路Watson 是IBM 的重量级AI 系统;近年IBM 大力发展AI 医疗,在2015 年成立独立的 Watson Health 部门,并收购多家医疗数据公司,前景看好。然而短短三年,这个明星部门就要裁员50% 到70% 的员工,代表…

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

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

新浪微博学习的知识点

instancetype 默认会识别当前是哪个类或者对象调用,就会转换成对应的类的对象 模型设计思想:Item:就是苹果的模型命名规范 tabBarItem: 决定着 tabBar 上按钮的内容 NSMutableDictionary *att [[NSMutableDictionary alloc] init]; att[NSForegroundColorAttributeName] […

numpy方法读取加载mnist数据集

方法来自机器之心公众号 首先下载mnist数据集,并将里面四个文件夹解压出来,下载方法见前面的博客 import tensorflow as tf import numpy as np import osdataset_path rD:\PycharmProjects\tensorflow\MNIST_data # 这是我存放mnist数据集的位置 is_…

纳米线传感器来了,传感芯片还会远吗

来源:科学网“无旁路电路”纳米线桥接生长方案 黄辉供图微型气体检测仪 黄辉供图人工智能、可穿戴装备、物联网等信息技术迅猛发展,需要海量的传感器提供支持,大数据和云计算等业务也需要各种传感器实时采集数据来支撑。但目前的传感器存在国…

PyTorch框架学习七——自定义transforms方法

PyTorch框架学习七——自定义transforms方法一、自定义transforms注意要素二、自定义transforms步骤三、自定义transforms实例:椒盐噪声虽然前面的笔记介绍了很多PyTorch给出的transforms方法,也非常有用,但是也有可能在具体的问题中需要开发…

Fashion-MNIST下载地址

训练集的图像:60000,http://fashion-mnist.s3-website.eu-central-1.amazonaws.com/train-images-idx3-ubyte.gz 训练集的类别标签:60000,http://fashion-mnist.s3-website.eu-central-1.amazonaws.com/train-labels-idx1-ubyte.…

dfs算法

一般bfs算法都是使用递归 //下面简单的代码 visited[Max]; dfs(_graph g,int vo){ print(vo); visited[vo]1 for(int i0;i<Max;i){ if(visited[i]0){ dfs(g,i); } } }转载于:https://www.cnblogs.com/dick159/p/4900935.html

美国芯片简史:军方大力扶持下的产物 但一度被日 韩超越

来源&#xff1a;知乎专栏腾讯科技近日发起系列策划&#xff0c;聚焦各个芯片大国的发展历程。第四期&#xff1a;《美国芯片简史》。集成电路是电子信息产业的的基石&#xff0c;电子信息产业对国民经济与社会发展具有重大推动作用。从全球集成电路产业发展历程来看&#xff0…

PyTorch框架学习八——PyTorch数据读取机制(简述)

PyTorch框架学习八——PyTorch数据读取机制&#xff08;简述&#xff09;一、数据二、DataLoader与Dataset1.torch.utils.data.DataLoader2.torch.utils.data.Dataset三、数据读取整体流程琢磨了一段时间&#xff0c;终于对PyTorch的数据读取机制有了一点理解&#xff0c;并自己…

使用feed_dict不一定要用占位符

使用feed_dict一般会伴有占位符&#xff0c;如 x tf.placeholder(tf.float32) 但是没有tf.placeholder也可以使用feed_dict方法&#xff0c;如下面这个例子&#xff1a; import tensorflow as tfinput1 tf.constant([2], dtypetf.float32) input2 tf.constant([3], dtype…

报告 | 2019年全球数字化转型现状研究报告

来源&#xff1a;Prophet2019年&#xff0c;战略数字化转型的重要性已经不止于IT领域&#xff0c;而影响着全公司的竞争力。企业的相关预算直线攀升&#xff0c;利益相关方所关注的颠覆性技术数量急剧增加。数字化项目开始由首席高管主导&#xff0c;并由相互协作的跨职能团队管…

Android调用binder实现权限提升-android学习之旅(81)

当进程A权限较低&#xff0c;而B权限较高时&#xff0c;容易产生提权漏洞 fuzz测试的测试路径 First level Interface是服务 Second level Interface是服务中对应的接口 1.首先获取第一层和第二层接口&#xff0c;及服务以及对应服务提供的接口 2.根据以上信息结合参数类型信息…

PyTorch框架学习九——网络模型的构建

PyTorch框架学习九——网络模型的构建一、概述二、nn.Module三、模型容器Container1.nn.Sequential2.nn.ModuleList3.nn.ModuleDict()4.总结笔记二到八主要介绍与数据有关的内容&#xff0c;这次笔记将开始介绍网络模型有关的内容&#xff0c;首先我们不追求网络内部各层的具体…

将张量转换为 int32 类型

tf.to_int32函数&#xff1a; tf.to_int32(x,nameToInt32 ) 函数参数&#xff1a; x&#xff1a;一个 Tensor 、SparseTensor、list或ndarrayname&#xff1a;操作的名称&#xff08;可选&#xff09;。 函数返回值&#xff1a; tf.to_int32函数返回一个 Tensor 或 SparseT…

中国17种稀土有啥军事用途?没它们,美军技术优势将归零

来源&#xff1a;陶慕剑观察 稀土就是化学元素周期表中镧系元素——镧(La)、铈(Ce)、镨(Pr)、钕(Nd)、钷(Pm)、钐(Sm)、铕(Eu)、钆(Gd)、铽(Tb)、镝(Dy)、钬(Ho)、铒(Er)、铥(Tm)、镱(Yb)、镥(Lu)&#xff0c;再加上钪(Sc)和钇(Y)共17种元素。中国稀土占据着众多的世界第一&…

swiper链接href无效

preventClicks:false,加上属性转载于:https://www.cnblogs.com/wesky/p/4906468.html

PyTorch框架学习十——基础网络层(卷积、转置卷积、池化、反池化、线性、激活函数)

PyTorch框架学习十——基础网络层&#xff08;卷积、转置卷积、池化、反池化、线性、激活函数&#xff09;一、卷积层二、转置卷积层三、池化层1.最大池化nn.MaxPool2d2.平均池化nn.AvgPool2d四、反池化层最大值反池化nn.MaxUnpool2d五、线性层六、激活函数层1.nn.Sigmoid2.nn.…

一个招标书文件的需求分析

时间&#xff1a;2015年10月20日 地点&#xff1a;二教302 人员&#xff1a;郑成&#xff0c;刘中睿&#xff0c;李琦 内容&#xff1a; 问题&#xff1a;找出民间组织管理系统的利益相关者 讨论过程&#xff1a;   出资人&#xff1a;民政厅&#xff0c;民管局 功能的使用者…