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

  • (续)二、transforms的具体方法
    • 4.图像变换
      • (1)尺寸变换:transforms.Resize()
      • (2)标准化:transforms.Normalize()
      • (3)转为tensor:transforms.ToTensor()
      • (4)将数据转换为PILImage:transforms.ToPILImage()
      • (5)填充:transforms.Pad()
      • (6)修改亮度、对比度、饱和度:transforms.ColorJitter()
      • (7)转灰度图:transforms.Grayscale()
      • (8)依概率p转为灰度图:transforms.RandomGrayscale()
      • (9)仿射变换:transforms.RandomAffine()
      • (10)随机遮挡:transforms.RandomErasing()
    • 5.transforms的操作
      • (1)transforms.Lambda()
      • (2)transforms.RandomChoice()
      • (3)transforms.RandomApply()
      • (4)transforms.RandomOrder()

这次笔记是续PyTorch框架第五次笔记,上次笔记链接为:https://blog.csdn.net/qq_40467656/article/details/107914085

(续)二、transforms的具体方法

4.图像变换

(1)尺寸变换:transforms.Resize()

功能:将输入图像的尺寸resize到给定的尺寸。
操作对象:PIL格式或是张量。

torchvision.transforms.Resize(size, interpolation=2)

参数如下:

  1. size:同上(上次笔记)。
  2. interpolation:同上(上次笔记)。

原始图像尺寸(224,224):(注意坐标轴)

transforms.Resize((512, 512))

resize后的结果,注意坐标轴

(2)标准化:transforms.Normalize()

功能:逐通道的标准化图像,公式为
output[channel] = (input[channel] - mean[channel]) / std[channel]
操作对象:张量。

torchvision.transforms.Normalize(mean, std, inplace=False)

参数如下:

  1. mean:(序列)每个通道的均值。
  2. std:(序列)每个通道的标准差。
  3. inplace:(布尔,可选)是否为原地操作。

标准化的作用:可以加快模型的收敛。

例子如下,这是RGB三通道图像,所以均值标准差都要有三个:

norm_mean = [0.485, 0.456, 0.406]
norm_std = [0.229, 0.224, 0.225]
transforms.Normalize(norm_mean, norm_std)

(3)转为tensor:transforms.ToTensor()

功能:将 PIL Image 或 numpy.ndarray 转变为tensor。
操作对象:PIL格式或是ndarray。

torchvision.transforms.ToTensor


将一个尺寸为(H×W×C)像素值范围[0, 255]的PIL图像或numpy的ndarray转变为尺寸为(C×H×W)像素值范围[0.0, 1.0]。

transforms.ToTensor()


因为像素值都小于等于1,所以显示不出来,其实像素值是有值的。

(4)将数据转换为PILImage:transforms.ToPILImage()

功能:将张量或ndarray转换为PIL图像,同时保留值的范围。
操作对象:ndarray或是张量。

torchvision.transforms.ToPILImage(mode=None)

参数如下:

(5)填充:transforms.Pad()

功能:对图片的边缘进行填充。
操作对象:PIL格式或是张量。

torchvision.transforms.Pad(padding, fill=0, padding_mode='constant')

参数如下:

  1. padding:设置填充的大小。若为a,则四边都填充a个像素距离;若为(a,b),则左右两边填充a个,上下两边填充b个;若为(a,b,c,d),则分别对应左、上、右、下四个边。
  2. fill:只有padding_mode设置为constant时有效,constant模式下要填充的像素值(R、G、B)或(Gray),默认为0。
  3. padding_mode:填充模式,有constant、edge、reflect和symmetric四种,同上。

几个例子如下:

(1)四边都填充32像素,模式为constant,填充值为(255, 0, 0)(红色)。

transforms.Pad(padding=32, fill=(255, 0, 0), padding_mode='constant')


(2)padding不一样,其他和(1)一样:

transforms.Pad(padding=(8, 64), fill=(255, 0, 0), padding_mode='constant')


(3)padding不一样,其他和(1)一样:

transforms.Pad(padding=(8, 16, 32, 64), fill=(255, 0, 0), padding_mode='constant')


(4)模式改成了symmetric,此时的fill无效:

transforms.Pad(padding=(8, 16, 32, 64), fill=(255, 0, 0), padding_mode='symmetric')

(6)修改亮度、对比度、饱和度:transforms.ColorJitter()

功能:调整亮度、对比度、饱和度和色相。
操作对象:PIL格式或是张量。

torchvision.transforms.ColorJitter(brightness=0, contrast=0, saturation=0, hue=0)

参数如下:

  1. brightness:亮度调整因子,当为a时,从[max(0, 1-a), 1+a]中随机选择;当为(a, b)时,从[a, b]中随机选择。
  2. contrast:对比度参数,同brightness。
  3. saturation:饱和度参数,同brightness。
  4. hue:色相参数,当为a时,从[-a, a]中选择,0<=a<=0.5;当为(a, b)时,从[a, b]中随机选择,-0.5<=a<=b<=0.5。

例子如下:

(1)亮度:

transforms.ColorJitter(brightness=0.5)

即亮度在[0.5, 1.5]之间选择:

(2)对比度:

transforms.ColorJitter(contrast=0.5)


(3)饱和度:

transforms.ColorJitter(saturation=0.5)


(4)色相:

transforms.ColorJitter(hue=0.3)

(7)转灰度图:transforms.Grayscale()

功能:将图像转变为灰度图,返回类型为PIL图像。
操作对象:PIL图像。

torchvision.transforms.Grayscale(num_output_channels=1)

参数:

注意它的返回,通道为3时,三通道的值相等:

例子如下:

transforms.Grayscale(num_output_channels=3)

(8)依概率p转为灰度图:transforms.RandomGrayscale()

功能:依概率将图片转换为灰度图。
操作对象:PIL图像。

torchvision.transforms.RandomGrayscale(p=0.1)

(9)仿射变换:transforms.RandomAffine()

功能:对图像进行仿射变换,仿射变换是二维的线性变换,由五种基本原子构成,分别是旋转、平移、缩放、错切和翻转。
操作对象:PIL格式(或是张量?不清楚张量可不可以)。

torchvision.transforms.RandomAffine(degrees, translate=None, scale=None, shear=None, resample=False, fillcolor=0)

参数如下:

  1. degrees:旋转角度,同RandomRotation()。
  2. translate:平移区间设置,如(a,b),则水平平移距离在(-img_width×a,img_width×a)区间内选择,垂直平移距离在(-img_height×b,img_height×b)区间内选择,默认不平移。
  3. scale:缩放比例,默认不缩放。
  4. shear:错切角度设置,若为a,则图像会沿着x轴方向错切,错切角度在(-a,a)范围内;若为(a,b),则图像会沿着x轴方向错切,错切角度在(a,b)范围内;若为(a,b,c,d),则图像会沿着x轴方向错切,错切角度在(a,b)范围内,并且沿着y轴错切,错切角度在(c,d)范围内。
  5. resample:插值方法。
  6. fillcolor:填充颜色设置,(R,G,B)或(Gray)。

例子如下:

(1)旋转

transforms.RandomAffine(degrees=30)


(2)平移

transforms.RandomAffine(degrees=0, translate=(0.2, 0.2), fillcolor=(255, 0, 0))


(3)缩放

transforms.RandomAffine(degrees=0, scale=(0.7, 0.7))


(4)y方向错切

transforms.RandomAffine(degrees=0, shear=(0, 0, 0, 45))


(5)x方向错切

transforms.RandomAffine(degrees=0, shear=90, fillcolor=(255, 0, 0))

(10)随机遮挡:transforms.RandomErasing()

功能:在图像中随机选择一个矩阵区域并遮挡其像素。
操作对象:张量。

torchvision.transforms.RandomErasing(p=0.5, scale=(0.02, 0.33), ratio=(0.3, 3.3), value=0, inplace=False)

参数如下:

  1. p:执行随机遮挡操作的概率。
  2. scale:遮挡区域的面积。
  3. ratio:遮挡区域的长宽比。
  4. value:设置遮挡区域的像素值,(R,G,B)或(Gray)。
  5. inplace:是否原地操作,默认False。

例子如下:

(1)

transforms.RandomErasing(p=1, scale=(0.02, 0.33), ratio=(0.3, 3.3), value=(254/255, 0, 0))


(2)value若是一个字符串,则会是随机填充。

transforms.RandomErasing(p=1, scale=(0.02, 0.33), ratio=(0.3, 3.3), value='1234')

5.transforms的操作

(1)transforms.Lambda()

功能:用户自定义lambda方法。

torchvision.transforms.Lambda(lambd)

参数:

格式为:
lambda[ arg1 [,arg2,…] ]:expression
其中:
arg1 [,arg2,…]为输入参数,expression为要做的操作以及返回的内容。

例子如下:

transforms.TenCrop(112, vertical_flip=False)
transforms.Lambda(lambda crops: torch.stack([(transforms.ToTensor()(crop)) for crop in crops]))

这里的操作是将TenCrop生成的十个图像拼接成一个张量。

(2)transforms.RandomChoice()

功能:从一系列transforms方法中随机挑选一个。

torchvision.transforms.RandomChoice(transforms)

格式为:

transforms.RandomChoice([transforms1, transforms2, transforms3,...])

如:要么垂直翻转,要么水平翻转。

transforms.RandomChoice([transforms.RandomVerticalFlip(p=1), transforms.RandomHorizontalFlip(p=1)])

(3)transforms.RandomApply()

功能:依据概率执行一组transforms操作。

torchvision.transforms.RandomApply(transforms, p=0.5)

如:0.5的概率执行仿射变换后灰度化。

transforms.RandomApply([transforms.RandomAffine(degrees=0, shear=45, fillcolor=(255, 0, 0)), transforms.Grayscale(num_output_channels=3)], p=0.5)

(4)transforms.RandomOrder()

功能:对一组transforms方法打乱,然后顺序执行。

torchvision.transforms.RandomOrder(transforms)

如:

transforms.RandomOrder([transforms.RandomRotation(15),transforms.Pad(padding=32),transforms.RandomAffine(degrees=0, translate=(0.01, 0.1), scale=(0.9, 1.1))]),

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

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

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

  2. PyTorch框架学习二十——模型微调(Finetune)

    PyTorch框架学习二十--模型微调(Finetune) 一.Transfer Learning:迁移学习 二.Model Finetune:模型的迁移学习 三.看个例子:用ResNet18预训练模 ...

  3. PyTorch框架学习十六——正则化与Dropout

    PyTorch框架学习十六--正则化与Dropout 一.泛化误差 二.L2正则化与权值衰减 三.正则化之Dropout 补充: 这次笔记主要关注防止模型过拟合的两种方法:正则化与Dropout. 一 ...

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

    PyTorch框架学习七--自定义transforms方法 一.自定义transforms注意要素 二.自定义transforms步骤 三.自定义transforms实例:椒盐噪声 虽然前面的笔记介绍 ...

  5. PyTorch框架学习(二) — 一文精通张量操作

    PyTorch框架学习(二) - 张量操作与线性回归 1 张量的操作 1.1 拼接 1.2 切分 1.3 索引 1.4 变换 2 张量的数学运算 2.1 加法运算 2.2 减法运算 2.3 哈达玛积运 ...

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

    PyTorch框架学习十二--损失函数 一.损失函数的作用 二.18种常见损失函数简述 1.L1Loss(MAE) 2.MSELoss 3.SmoothL1Loss 4.交叉熵CrossEntropy ...

  7. PyTorch框架学习二——基本数据结构(张量)

    PyTorch框架学习二--基本数据结构(张量) 一.什么是张量? 二.Tensor与Variable(PyTorch中) 1.Variable 2.Tensor 三.Tensor的创建 1.直接创建 ...

  8. PyTorch系列入门到精通——图像预处理transforms

    PyTorch系列入门到精通--图像预处理transforms

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

    PyTorch框架学习十--基础网络层(卷积.转置卷积.池化.反池化.线性.激活函数) 一.卷积层 二.转置卷积层 三.池化层 1.最大池化nn.MaxPool2d 2.平均池化nn.AvgPool2 ...

最新文章

  1. sosoApi 环境搭建
  2. python编译安装pyaudio
  3. [剑指offer]8.重建二叉树
  4. ScriptManager.RegisterAsyncPostBackControl 方法
  5. jboss maven_使用Maven配置JBoss / Wildfly数据源
  6. 【交往智慧】005.做一个愿意聆听的人
  7. keil c语言字符型变量的值,面向51单片机的Keil uVision4的四种基本数据类型
  8. PHP --字符串编码转换(自动识别原编码)
  9. java中sql 语句格式转换_Java字符串转Sql语句In格式工具方法
  10. 【Cocos2d入门教程五】Cocos2d-x动作篇
  11. amp sqlserver中 什么意思_股票术语中的做空到底是什么意思?
  12. 具体数学-第8课(取整进阶)
  13. caffe---测试模型分类结果并输出(python )
  14. 用jsp编写一个猜26个小写英文字母的web小游戏
  15. fly bird用java怎么写,java-flybird_wang-51CTO博客
  16. 网络和计算机加密驱动,如何解决笔记本电脑连接不上加密无线网络的问题
  17. 【Python爬虫】:使用高性能异步多进程爬虫获取豆瓣电影Top250
  18. 扫码点餐小程序源码_做个扫码点餐的小程序贵吗?
  19. 《国产操作系统之银河麒麟》桌面环境
  20. VIM7.3中文手册

热门文章

  1. jdbctemplate 开启事务_Spring(四):事务管理
  2. (十四)【RecSys 2016】Personalized Recommendations using Knowledge Graphs: A Probabilistic【看不懂】
  3. 深度剖析RPC框架的核心设计
  4. PaddlePaddle预训练模型大合集
  5. python实现requests访问接口,比如es接口
  6. spring cloud eureka注册原理-注册失败填坑
  7. 弄懂goroutine调度原理
  8. 18-ESP8266 SDK开发基础入门篇--TCP 服务器 RTOS版,串口透传,TCP客户端控制LED
  9. $.getJSON()
  10. 浅谈Spring的AOP实现-代理机制