本站原创文章,转载请说明来自《老饼讲解-深度学习》www.bbbdata.com
本文展示pytorch的torchvision.transforms的各个API的使用示例代码
包括Resize、RandomCrop、CenterCrop、ColorJitter等常用的缩放、裁剪、颜色修改等API
方便学习、了解和使用torchvision.transforms时快速借鉴使用
前言
本文展示pytorch的torchvision.transforms的各个API的使用示例代码
示例代码中所使用的图片素材为:
将图片保存并其命名为img_01.jpg就可以运行下述示例代码
transforms的缩放API代码与效果示例如下:
import matplotlib.pyplot as plt
import torchvision
from torchvision.transforms import v2
import torch
torch.manual_seed(999)
axs = plt.figure(figsize=(13,2)).subplots(1, 4) # 初始化画布
# ---------原始图像-------
img = torchvision.io.read_image('img_01.jpg' ) # 读取图片
axs[0].imshow(v2.ToPILImage()(img)) # 展示原始图片
axs[0].set_title('src') # 展示原始图片标题
# ---------用Resize对图片对进行转换-------
transform = v2.Resize((70,120)) # 初始化转换
img_trans = transform(img) # 对图片进行转换
axs[1].imshow(v2.ToPILImage()(img_trans)) # 展示转换后的图片
axs[1].set_title('Resize') # 展示转换后的图片标题
# ---------用Resize对图片对进行转换-------
transform = v2.RandomShortestSize([50,60,70]) # 初始化转换
img_trans = transform(img) # 对图片进行转换
axs[2].imshow(v2.ToPILImage()(img_trans)) # 展示转换后的图片
axs[2].set_title('RandomShortestSize') # 展示转换后的图片标题
# ---------用Resize对图片对进行转换-------
transform = v2.RandomResize(50,70) # 初始化转换
img_trans = transform(img) # 对图片进行转换
axs[3].imshow(v2.ToPILImage()(img_trans)) # 展示转换后的图片
axs[3].set_title('RandomResize') # 展示转换后的图片标题
运行结果如下:
transforms的剪切转换示例代码如下:
import matplotlib.pyplot as plt
import torchvision
import torch
from torchvision.transforms import v2
torch.manual_seed(999)
axs = plt.figure(figsize=(13,2)).subplots(1, 4) # 初始化画布
# ---------原始图像-------
img = torchvision.io.read_image('img_01.jpg' ) # 读取图片
axs[0].imshow(v2.ToPILImage()(img)) # 展示原始图片
axs[0].set_title('src') # 展示原始图片标题
# ---------用RandomCrop对图片对进行转换-------
transform = v2.RandomCrop((40,80)) # 初始化转换
img_trans = transform(img) # 对图片进行转换
axs[1].imshow(v2.ToPILImage()(img_trans)) # 展示转换后的图片
axs[1].set_title('RandomCrop') # 展示转换后的图片标题
# ---------用RandomResizedCrop对图片对进行转换-------
transform = v2.RandomResizedCrop((40,80),scale=(0.5,0.5),ratio=(3.0/4.0,4.0/3.0)) # 初始化转换
img_trans = transform(img) # 对图片进行转换
axs[2].imshow(v2.ToPILImage()(img_trans)) # 展示转换后的图片
axs[2].set_title('RandomResizedCrop') # 展示转换后的图片标题
# ---------用CenterCrop对图片对进行转换-------
transform = v2.CenterCrop((60,80)) # 初始化转换
img_trans = transform(img) # 对图片进行转换
axs[3].imshow(v2.ToPILImage()(img_trans)) # 展示转换后的图片
axs[3].set_title('CenterCrop') # 展示转换后的图片标题
运行结果如下:
五裁剪FiveCrop的示例代码如下:
import matplotlib.pyplot as plt
import torchvision
import torch
from torchvision.transforms import v2
torch.manual_seed(999)
axs = plt.figure(figsize=(13,2)).subplots(1, 6) # 初始化画布
# ---------原始图像-------
img = torchvision.io.read_image('img_01.jpg' ) # 读取图片
axs[0].imshow(v2.ToPILImage()(img)) # 展示原始图片
axs[0].set_title('src') # 展示原始图片标题
# ---------用Resize对图片对进行转换-------
transform = v2.FiveCrop((60,80)) # 初始化转换
img_trans = transform(img) # 对图片进行转换
axs[1].imshow(v2.ToPILImage()(img_trans[0]));axs[1].set_title('1') # 展示转换后的图片
axs[2].imshow(v2.ToPILImage()(img_trans[1]));axs[2].set_title('2') # 展示转换后的图片
axs[3].imshow(v2.ToPILImage()(img_trans[2]));axs[3].set_title('3') # 展示转换后的图片
axs[4].imshow(v2.ToPILImage()(img_trans[3]));axs[4].set_title('4') # 展示转换后的图片
axs[5].imshow(v2.ToPILImage()(img_trans[4]));axs[5].set_title('5') # 展示转换后的图片
plt.suptitle("FiveCrop")
运行结果如下:
transforms的颜色转换示例代码如下:
import matplotlib.pyplot as plt
import torchvision
import torch
from torchvision.transforms import v2
torch.manual_seed(999)
axs = plt.figure(figsize=(13,8)).subplots(3,4 ) # 初始化画布
# ---------原始图像-------
img = torchvision.io.read_image('img_01.jpg' ) # 读取图片
axs[0,0].imshow(v2.ToPILImage()(img)) # 展示原始图片
axs[0,0].set_title('src') # 展示原始图片标题
# ---------用ColorJitter对图片对进行转换-------
transform = v2.ColorJitter(brightness=(0.3,1.3),
contrast=(0.3,1.3),
saturation=(0.3,1.3)
, hue=(-0.3,0.3)) # 初始化转换
img_trans = transform(img) # 对图片进行转换
axs[0,1].imshow(v2.ToPILImage()(img_trans)) # 展示转换后的图片
axs[0,1].set_title('ColorJitter') # 展示转换后的图片标题
# ---------用RandomPhotometricDistort对图片对进行转换-------
transform = v2.RandomPhotometricDistort(brightness=(0.3,1.3),
contrast=(0.3,1.3),
saturation=(0.3,1.3)
, hue=(-0.3,0.3)) # 初始化转换
img_trans = transform(img) # 对图片进行转换
axs[0,2].imshow(v2.ToPILImage()(img_trans)) # 展示转换后的图片
axs[0,2].set_title('RandomPhotometricDistort') # 展示转换后的图片标题
# ---------用Grayscale对图片对进行转换-------
transform = v2.Grayscale(num_output_channels=3) # 初始化转换
img_trans = transform(img) # 对图片进行转换
axs[0,3].imshow(v2.ToPILImage()(img_trans)) # 展示转换后的图片
axs[0,3].set_title('Grayscale') # 展示转换后的图片标题
# ---------用RandomGrayscale对图片对进行转换-------
transform = v2.RandomGrayscale(p=1.0) # 初始化转换
img_trans = transform(img) # 对图片进行转换
axs[1,0].imshow(v2.ToPILImage()(img_trans)) # 展示转换后的图片
axs[1,0].set_title('RandomGrayscale') # 展示转换后的图片标题
# ---------用GaussianBlur对图片对进行转换-------
transform = v2.GaussianBlur(kernel_size=5,sigma=3) # 初始化转换
img_trans = transform(img) # 对图片进行转换
axs[1,1].imshow(v2.ToPILImage()(img_trans)) # 展示转换后的图片
axs[1,1].set_title('GaussianBlur') # 展示转换后的图片标题
# ---------用RandomInvert对图片对进行转换-------
transform = v2.RandomInvert(p=1.0) # 初始化转换
img_trans = transform(img) # 对图片进行转换
axs[1,2].imshow(v2.ToPILImage()(img_trans)) # 展示转换后的图片
axs[1,2].set_title('RandomInvert') # 展示转换后的图片标题
# ---------用RandomPosterize对图片对进行转换-------
transform = v2.RandomPosterize(bits=2,p=1.0) # 初始化转换
img_trans = transform(img) # 对图片进行转换
axs[1,3].imshow(v2.ToPILImage()(img_trans)) # 展示转换后的图片
axs[1,3].set_title('RandomPosterize') # 展示转换后的图片标题
# ---------用RandomSolarize对图片对进行转换-------
transform = v2.RandomSolarize(threshold=200,p=1.0) # 初始化转换
img_trans = transform(img) # 对图片进行转换
axs[2,0].imshow(v2.ToPILImage()(img_trans)) # 展示转换后的图片
axs[2,0].set_title('RandomSolarize') # 展示转换后的图片标题
# ---------用RandomAdjustSharpness对图片对进行转换-------
transform = v2.RandomAdjustSharpness(sharpness_factor=5,p=1.0) # 初始化转换
img_trans = transform(img) # 对图片进行转换
axs[2,1].imshow(v2.ToPILImage()(img_trans)) # 展示转换后的图片
axs[2,1].set_title('RandomAdjustSharpness') # 展示转换后的图片标题
# ---------用RandomAutocontrast对图片对进行转换-------
transform = v2.RandomAutocontrast(p=1.0) # 初始化转换
img_trans = transform(img) # 对图片进行转换
axs[2,2].imshow(v2.ToPILImage()(img_trans)) # 展示转换后的图片
axs[2,2].set_title('RandomAutocontrast') # 展示转换后的图片标题
# ---------用RandomEqualize对图片对进行转换-------
transform = v2.RandomEqualize(p=1.0) # 初始化转换
img_trans = transform(img) # 对图片进行转换
axs[2,3].imshow(v2.ToPILImage()(img_trans)) # 展示转换后的图片
axs[2,3].set_title('RandomEqualize') # 展示转换后的图片标题
运行结果如下:
transforms的其它转换示例代码如下:
import matplotlib.pyplot as plt
import torch
import torchvision
from torchvision.transforms import v2
torch.manual_seed(999)
axs = plt.figure(figsize=(14,5)).subplots(2, 5) # 初始化画布
# ---------原始图像-------
img = torchvision.io.read_image('img_01.jpg' ) # 读取图片
axs[0,0].imshow(v2.ToPILImage()(img)) # 展示原始图片
axs[0,0].set_title('src') # 展示原始图片标题
# ---------RandomHorizontalFlip-------
transform = v2.RandomHorizontalFlip(p=0.9) # 初始化转换
img_trans = transform(img) # 对图片进行转换
axs[0,1].imshow(v2.ToPILImage()(img_trans)) # 展示转换后的图片
axs[0,1].set_title('RandomHorizontalFlip') # 展示转换后的图片标题
# ---------RandomVerticalFlip-------
transform = v2.RandomVerticalFlip(p=0.9) # 初始化转换
img_trans = transform(img) # 对图片进行转换
axs[0,2].imshow(v2.ToPILImage()(img_trans)) # 展示转换后的图片
axs[0,2].set_title('RandomVerticalFlip') # 展示转换后的图片标题
# ---------Pad-------
transform = v2.Pad(padding=(10,20,30,40), fill=100) # 初始化转换
img_trans = transform(img) # 对图片进行转换
axs[0,3].imshow(v2.ToPILImage()(img_trans)) # 展示转换后的图片
axs[0,3].set_title('Pad') # 展示转换后的图片标题
# ---------RandomZoomOut-------
transform = v2.RandomZoomOut(fill=100,side_range=(1.0,2.0),p=1) # 初始化转换
img_trans = transform(img) # 对图片进行转换
axs[0,4].imshow(v2.ToPILImage()(img_trans)) # 展示转换后的图片
axs[0,4].set_title('RandomZoomOut') # 展示转换后的图片标题
# ---------RandomRotation-------
transform = v2.RandomRotation(degrees=(-30,30)
,expand=False,center=(0,0),fill=100) # 初始化转换
img_trans = transform(img) # 对图片进行转换
axs[1,0].imshow(v2.ToPILImage()(img_trans)) # 展示转换后的图片
axs[1,0].set_title('RandomRotation') # 展示转换后的图片标题
# ---------用RandomAffine对图片对进行转换-------
transform = v2.RandomAffine(degrees=(-30,50),translate=(0.2, 0.3)
,shear=(-30,50),scale=(0.5,1),fill=100) # 初始化转换
img_trans = transform(img) # 对图片进行转换
axs[1,1].imshow(v2.ToPILImage()(img_trans)) # 展示转换后的图片
axs[1,1].set_title('RandomAffine') # 展示转换后的图片标题
# ---------用RandomCrop对图片对进行转换-------
transform = v2.RandomPerspective(distortion_scale=0.9,p=1.0) # 初始化转换
img_trans = transform(img) # 对图片进行转换
axs[1,2].imshow(v2.ToPILImage()(img_trans)) # 展示转换后的图片
axs[1,2].set_title('RandomCrop') # 展示转换后的图片标题
# ---------用ElasticTransform对图片对进行转换-------
transform = v2.ElasticTransform(alpha=50.0,sigma=4.0,fill=100) # 初始化转换
img_trans = transform(img) # 对图片进行转换
axs[1,3].imshow(v2.ToPILImage()(img_trans)) # 展示转换后的图片
axs[1,3].set_title('ElasticTransform') # 展示转换后的图片标题
axs[1,4].set_visible(False)
运行结果如下:
更多transforms的转换示例代码如下:
import matplotlib.pyplot as plt
import torchvision
import torch
from torchvision.transforms import v2
torch.manual_seed(999) # 设置随机种子
axs = plt.figure(figsize=(13,8)).subplots(1,3) # 初始化画布
# ---------原始图像-------
img = torchvision.io.read_image('img_01.jpg' ) # 读取图片
axs[0].imshow(v2.ToPILImage()(img)) # 展示原始图片
axs[0].set_title('src') # 展示原始图片标题
# ---------用Normalize对图片对进行转换-------
img = v2.ToDtype(torch.float)(img) # 将图片转为float类型
transform = v2.Normalize(mean=(100,100,100)
,std=(1.,1.,1.)
,inplace=True) # 初始化转换
img_trans = transform(img) # 对图片进行转换
img_trans = v2.ToDtype(torch.uint8)(img_trans) # 将图片转回uint8类型
axs[1].imshow(v2.ToPILImage()(img_trans)) # 展示转换后的图片
axs[1].set_title('Normalize') # 展示转换后的图片标题
# ---------用RandomErasing对图片对进行转换-------
transform = v2.RandomErasing(p=1.0
,scale=(0.4,0.6)
,ratio=(1/2,1)
,value=100
,inplace=True) # 初始化转换
img_trans = transform(img) # 对图片进行转换
axs[2].imshow(v2.ToPILImage()(img_trans)) # 展示转换后的图片
axs[2].set_title('RandomErasing') # 展示转换后的图片标题
运行结果如下:
transforms的自动增强转换示例代码如下:
import matplotlib.pyplot as plt
import torchvision
import torch
from torchvision.transforms import v2
torch.manual_seed(999) # 设置随机种子
axs = plt.figure(figsize=(13,8)).subplots(1,5) # 初始化画布
# ---------原始图像-------
img = torchvision.io.read_image('img_01.jpg' ) # 读取图片
axs[0].imshow(v2.ToPILImage()(img)) # 展示原始图片
axs[0].set_title('src') # 展示原始图片标题
# ---------用AutoAugment对图片对进行转换-------
transform = v2.AutoAugment() # 初始化转换
img_trans = transform(img) # 对图片进行转换
axs[1].imshow(v2.ToPILImage()(img_trans)) # 展示转换后的图片
axs[1].set_title('AutoAugment') # 展示转换后的图片标题
# ---------用RandAugment对图片对进行转换-------
transform = v2.RandAugment(num_ops=1
,magnitude=2
,num_magnitude_bins=3
,fill=50) # 初始化转换
img_trans = transform(img) # 对图片进行转换
axs[2].imshow(v2.ToPILImage()(img_trans)) # 展示转换后的图片
axs[2].set_title('RandAugment') # 展示转换后的图片标题
# ---------用TrivialAugmentWide对图片对进行转换-------
transform = v2.TrivialAugmentWide(num_magnitude_bins=2,fill=100) # 初始化转换
img_trans = transform(img) # 对图片进行转换
axs[3].imshow(v2.ToPILImage()(img_trans)) # 展示转换后的图片
axs[3].set_title('TrivialAugmentWide') # 展示转换后的图片标题
# ---------用AugMix对图片对进行转换-------
transform = v2.AugMix(severity=3
,mixture_width=3
,chain_depth=-1
,alpha=1.0
,all_ops=True
,fill=100) # 初始化转换
img_trans = transform(img) # 对图片进行转换
axs[4].imshow(v2.ToPILImage()(img_trans)) # 展示转换后的图片
axs[4].set_title('AugMix') # 展示转换后的图片标题
运行结果如下:
End