Pytorch教程

【代码】torchvision.transforms使用示例代码

作者 : 老饼 发表日期 : 2023-12-07 03:07:02 更新日期 : 2023-12-10 11:05:40
本站原创文章,转载请说明来自《老饼讲解-深度学习》www.bbbdata.com


本文展示pytorch的torchvision.transforms的各个API的使用示例代码

包括Resize、RandomCrop、CenterCrop、ColorJitter等常用的缩放、裁剪、颜色修改等API

方便学习、了解和使用torchvision.transforms时快速借鉴使用



前言


本文展示pytorch的torchvision.transforms的各个API的使用示例代码
示例代码中所使用的图片素材为:
                 
 
将图片保存并其命名为img_01.jpg就可以运行下述示例代码




一、 transforms的缩放转换-示例代码   


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的剪切转换-示例代码   


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的颜色转换-示例代码   


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的其它转换-示例代码   


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的转换-示例代码   


更多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的自动增强转换-示例代码   


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 





联系老饼