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,一经查实,立即删除!

相关文章

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()…

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方法,也非常有用,但是也有可能在具体的问题中需要开发…

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

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

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

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

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

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

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

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

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

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

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

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

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

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

PyTorch框架学习十一——网络层权值初始化

PyTorch框架学习十一——网络层权值初始化一、均匀分布初始化二、正态分布初始化三、常数初始化四、Xavier 均匀分布初始化五、Xavier正态分布初始化六、kaiming均匀分布初始化前面的笔记介绍了网络模型的搭建,这次将介绍网络层权值的初始化,适当的初始化…

W3C 战败:无权再制定 HTML 和 DOM 标准!

来源:CSDN历史性时刻!——近日,W3C正式宣告战败:HTML和DOM标准制定权将全权移交给浏览器厂商联盟WHATWG。由苹果、Google、微软和Mozilla四大浏览器厂商组成的WHATWG已经与万维网联盟(World Wide Web Consortium&#…

PyTorch框架学习十二——损失函数

PyTorch框架学习十二——损失函数一、损失函数的作用二、18种常见损失函数简述1.L1Loss(MAE)2.MSELoss3.SmoothL1Loss4.交叉熵CrossEntropyLoss5.NLLLoss6.PoissonNLLLoss7.KLDivLoss8.BCELoss9.BCEWithLogitsLoss10.MarginRankingLoss11.HingeEmbedding…

化合物半导体的机遇

来源:国盛证券半导体材料可分为单质半导体及化合物半导体两类,前者如硅(Si)、锗(Ge)等所形成的半导体,后者为砷化镓(GaAs)、氮化镓(GaN)、碳化硅(…

PyTorch框架学习十三——优化器

PyTorch框架学习十三——优化器一、优化器二、Optimizer类1.基本属性2.基本方法三、学习率与动量1.学习率learning rate2.动量、冲量Momentum四、十种常见的优化器(简单罗列)上次笔记简单介绍了一下损失函数的概念以及18种常用的损失函数,这次…

最全芯片产业报告出炉,计算、存储、模拟IC一文扫尽

来源:智东西最近几年, 半导体产业风起云涌。 一方面, 中国半导体异军突起, 另一方面, 全球产业面临超级周期,加上人工智能等新兴应用的崛起,中美科技摩擦频发,全球半导体现状如何&am…

python向CSV文件写内容

f open(r"D:\test.csv", w) f.write(1,2,3\n) f.write(4,5,6\n) f.close() 注意:上面例子中的123456这6个数字会分别写入不同的单元格里,即以逗号作为分隔符将字符串内容分开放到不同单元格 上面例子的图: 如果要把变量的值放入…

PyTorch框架学习十四——学习率调整策略

PyTorch框架学习十四——学习率调整策略一、_LRScheduler类二、六种常见的学习率调整策略1.StepLR2.MultiStepLR3.ExponentialLR4.CosineAnnealingLR5.ReduceLRonPlateau6.LambdaLR在上次笔记优化器的内容中介绍了学习率的概念,但是在整个训练过程中学习率并不是一直…