使用torchvision.transformsRandomAffine()实现随机仿射变换
torchvision.transforms.RandomAffine()函数用于对图像进行随机仿射变换。它可以应用于PIL Image,比如RGB图像或灰度图像。该函数接受以下参数:
- degrees(数值类型或元组):表示旋转角度的范围。如果是单个数值,则表示从[-degrees, degrees]之间随机选择一个角度;如果是元组,则表示从该范围中随机选择一个角度。
- translate(元组或列表):表示平移量的范围。如果是元组,则表示从该范围中随机选择一个平移量,如果是列表,则按照[x, y]的顺序选择平移量。
- scale(元组或列表):表示缩放因子的范围。如果是元组,则表示从该范围中随机选择一个缩放因子,如果是列表,则按照[scale_x, scale_y]的顺序选择缩放因子。
- shear(数值类型或元组):表示剪切角度的范围。如果是单个数值,则表示从[-shear, shear]之间随机选择一个角度; 如果是元组,则表示从该范围中随机选择一个角度。
- fill(数值或三元组):用于填充新出现的像素的值。如果是数值,则表示填充的灰度值(0-255),如果是三元组,则表示RGB颜色。
以下是使用torchvision.transforms.RandomAffine()函数进行随机仿射变换的示例代码:
import torch
import torchvision.transforms as transforms
from PIL import Image
# 加载图像
image = Image.open('image.jpg')
# 定义随机仿射变换
transform = transforms.RandomAffine(degrees=(-30, 30), translate=(0.1, 0.1), scale=(0.8, 1.2), shear=(-10, 10))
# 对图像应用变换
transformed_image = transform(image)
# 显示原图像和变换后的图像
image.show()
transformed_image.show()
在上面的示例中,我们首先加载了一张图像。然后,我们定义了一个随机仿射变换,其中旋转角度的范围是(-30, 30),平移量范围是(0.1, 0.1),缩放因子的范围是(0.8, 1.2),剪切角度的范围是(-10, 10)。然后,我们使用定义的变换对图像进行变换,并显示原图像和变换后的图像。
通过使用torchvision.transforms.RandomAffine()函数,我们可以轻松地在训练过程中对图像进行随机仿射变换,以增加数据集的多样性,从而提高模型的鲁棒性和泛化能力。
