PyTorch图像预处理包torchvision.transforms

本文详细介绍了PyTorchtorchvision库中的数据预处理工具,包括图像裁剪(如随机裁剪、中心裁剪和长宽比裁剪)、翻转(水平和垂直)、变换(标准化、填充和颜色调整)等,以及如何在实际项目中操作这些功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一 概述

torchvision包主要由3个子包组成:

  1. torchvision.datasets:可以用来生成图片和视频数据集;
  2. torchvision.models:导入预训练模型 ;
  3. torchvision.transforms: 图像预处理。

其中 torchvision.transforms中有三大类:

 1.裁剪
  
 	- 中心裁剪:transforms.CenterCrop
 	- 随机裁剪:transforms.RandomCrop
	- 随机长宽比裁剪:transforms.RandomResizedCrop
	- 上下左右中心裁剪:transforms.FiveCrop
	- 上下左右中心裁剪后翻转,transforms.TenCrop

————————————————

 2.翻转
 
    - 依概率p水平翻转:transforms.RandomHorizontalFlip(p=0.5)
 	- 依概率p垂直翻转:transforms.RandomVerticalFlip(p=0.5)
	- 随机旋转:transforms.RandomRotation

————————————————

	 3.变换
 
    - 标准化:transforms.Normalize
 	- 填充:transforms.Pad
	- 修改亮度、对比度和饱和度:transforms.ColorJitter 
	- 转灰度图:transforms.Grayscale 
	- 线性变换:transforms.LinearTransformation() 
	- 仿射变换:transforms.RandomAffine 
	- 依概率p转为灰度图:transforms.RandomGrayscale 
	- 将数据转换为PILImage:transforms.ToPILImage

二 实操

示例图片:(300, 500, 4)
在这里插入图片描述
加载图像

   import matplotlib.pyplot as plt
   from PIL import Image

   path = "E:\\test\\h9.png"

   # 加载图片
   img = Image.open(path)

   # 将图片格式转为np.array
   img_arr = np.array(img)

   # 显示图片
   plt.imshow(img_arr)
   plt.show()
   

在这里插入图片描述

1 裁剪(Crop)

1.1 随机裁剪:transforms.RandomCrop
torchvision.transforms.RandomCrop(size,padding = None,\
pad_if_needed = False,fill = 0,padding_mode ='constant'
 - size(sequence/int) - 输出大小。
		如果size是int而不是像(h,w)这样的序列,则进行正方形裁剪。

 - padding(int/sequence,optional) - 对图像每个边框上进行填充。可选。
 		默认值为None,即无填充。
 		如果提供长度为4的序列(1,2,3,4),则分别填充左1,上2,右3,下4的边界。
 		如果提供长度为2的序列(1,2),则分别用于填充左/右1,上/下2的边界。
 		
 - pad_if_needed(boolean) - 如果小于输出大小,填充自动图像以避免引发异常。
 
 - fill - 恒定填充的像素填充值。
 		默认值为0。
 		如果长度为3的元组,则分别用于填充R,G,B通道。仅当padding_mode为常量时才使用此值。
 		
 - padding_mode-填充类型。
	 	恒定,边缘,反射或对称。默认值是常量。
			常量:具有常量值的焊盘,该值用填充指定
			edge:填充图像边缘的最后一个值
			反射:具有图像反射的垫(不重复边缘上的最后一个值),填充[1,2,3,4]在反射模式下两侧有2个元素将导致[3,2,1,2,3,4,3,2]
			对称:具有图像反射的垫(重复边缘上的最后一个值),填充[1,2,3,4]在对称模式下两侧有2个元素将导致[2,1,1,2,3,4,4,3]
1.2 中心裁剪:transforms.CenterCrop
torchvision.transforms.CenterCrop(size) 

 - size(sequence/int) - 输出大小。
		如果size是int而不是像(h,w)这样的序列,则进行正方形裁剪。
1.3 随机长宽比裁剪 transforms.RandomResizedCrop

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

 - size - 每条边的预期输出大小
 - scale - 裁剪的原始尺寸的大小范围
 - ratio - 裁剪的原始宽高比的宽高比范围
 - interpolation - 默认值:PIL.Image.BILINEAR
1.4 上下左右中心裁剪:transforms.FiveCrop

torchvision.transforms.FiveCrop(size)

 - size(sequence/int) - 输出大小。
		如果size是int而不是像(h,w)这样的序列,则进行正方形裁剪。
		对图片进行上下左右以及中心裁剪,获得5张图片,返回一个4D-tensor 参数
1.5 上下左右中心裁剪后翻转: transforms.TenCrop

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

 - size(sequence/int) - 输出大小。
		如果size是int而不是像(h,w)这样的序列,则进行正方形裁剪。
 - vertical_flip(bool) - 使用垂直翻转而不是水平翻转。

2 翻转予旋转(Flip or Rotation)

2.1 依概率p水平翻转transforms.RandomHorizontalFlip

torchvision.transforms.RandomHorizontalFlip(p=0.5)

 - p- 概率,默认值为0.5
		以给定的概率随机水平翻转图像。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

努力当总裁的郭琛予

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值