这篇文章主要介绍“pytorch transforms图像增强怎么实现”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“pytorch transforms图像增强怎么实现”文章能帮助大家解决问题。

    一、前言

    本文基于的是pytorch3.7.1

    二、图像处理

    深度学习是由数据驱动的,而数据的数量和分布对于模型的优劣具有决定性作用,所以我们需要对数据进行一定的预处理以及数据增强,用于提升模型的泛化能力。

    一般来说深度学习神经网络训练前都需要做数据增强 (Data Augmentation) 又称为数据增广、数据扩增,它是对 训练集 进行变换,使训练集更丰富,从而让模型更具 泛化能力

    下面为常见的图像变换

    1.原始图片

    显示图片,并读取图片大小

    from torchvision import transforms
    
    from PIL import Image # 用于读取图片
    
    import  matplotlib.pyplot as plt # 用于显示图片
    
    image_path = './dog.jpg'
    
    image = Image.open(image_path)
    
    plt.imshow(image)
    
    print(image.size)
    
    plt.show()

    2.调整图片大小transforms.Resize

    2.1.transforms.Resize(x)

    主要用于调整PILImage对象的尺寸大小,图片短边缩放至x,长宽比保持不变

    将图片短边缩放至x,长宽比保持不变,上述图片执行transforms.Resize(300)

    from torchvision import transforms
    
    from PIL import Image # 用于读取图片
    
    import  matplotlib.pyplot as plt # 用于显示图片
    
    # 图片显示,打印图片大小
    
    image_path = './dog.jpg'
    
    image = Image.open(image_path)
    
    resize = transforms.Resize(300)
    
    image1 = resize(image)
    
    plt.imshow(image1)
    
    print(image1.size)
    
    plt.show()
    2.2.transforms.Resize([x, y])

    同时指定图片长宽,这样会改变长宽比例但是不是裁剪,可以恢复

    from torchvision import transforms
    
    from PIL import Image # 用于读取图片
    
    import  matplotlib.pyplot as plt # 用于显示图片
    
    # 图片显示,打印图片大小
    
    image_path = './dog.jpg'
    
    image = Image.open(image_path)
    
    resize = transforms.Resize([512, 300])
    
    image1 = resize(image)
    
    plt.imshow(image1)
    
    print(image1.size)
    
    plt.show()
    2.3关于图片的恢复

    测试代码

    from torchvision import transforms
    
    from PIL import Image # 用于读取图片
    
    import  matplotlib.pyplot as plt # 用于显示图片
    
    # 图片显示,打印图片大小
    
    image_path = './dog.jpg'
    
    image = Image.open(image_path)
    
    w, h = image.size
    
    resize = transforms.Resize([512, 300])
    
    image1 = resize(image)
    
    resize2 = transforms.Resize([h, w])
    
    image2 = resize2(image1)
    
    plt.imshow(image2)
    
    print(image2.size)
    
    plt.show()

    注意这里要使用transforms.Resize([h, w])

    3.图片裁剪

    3.1中心裁剪transforms.CenterCrop

    作用:中心裁剪图片

    主要参数:size,表示需要裁剪的图片大小

    代码示例:

    from torchvision import transforms
    
    from PIL import Image
    
    import matplotlib.pyplot as plt
    
    transform = transforms.CenterCrop(512)
    
    image_path= "./dog.jpg"
    
    image = Image.open(image_path)
    
    image1 = transform(image)
    
    plt.imshow(image1)
    
    print(image1.size)
    
    plt.show()
    
    image1.save('./dog_clipping.jpg')
    3.2随机裁剪transforms.RandomCrop(size,padding=None,pad_if_needed=False,fill=0,padding_mode='constant')

    主要参数:

    size:为需要裁剪的图片大小

    padding:设置填充大小

    大小为a:表示上下左右都填充a个元素

    大小为(a, b):表示左右填充a个元素,上下填充b个元素

    大小为(a, b, c, d):表示左上右下填充a, b, c, d个元素

    pad_if_needed:若图像小于设定 size,则填充,此时该项需要设置为 True

    padding_mode:填充模式,主要有四种

    • constant:像素值由 fill 设定。

    • edge:像素值由图像边缘像素决定。

    • reflect:镜像填充,最后一个像素不镜像,例如 [1, 2, 3, 4] → [3, 2, 1, 2, 3, 4, 3, 2]。

    • symmetric:镜像填充,最后一个像素镜像,例如 [1, 2, 3, 4] → [2, 1, 1, 2, 3, 4, 4, 3]。

    fill:当填充模式为padding_mode的填充值

    代码示例:

     from torchvision import transforms
    
    import matplotlib.pyplot as plt
    
    from PIL import Image
    
    transform = transforms.RandomCrop(size=(512, 512), padding=50, pad_if_needed=True, fill=0,padding_mode="constant")
    
    image_path = "./dog.jpg"
    
    image = Image.open(image_path)
    
    random_crop_image = transform(image)
    
    print(random_crop_image.size)
    
    plt.imshow(random_crop_image)
    
    plt.show()
    
    random_crop_image.save("./random_crop_image.jpg")
    3.3transforms.RandomResizedCrop

    RandomResizedCrop(size,scale=(0.08,1.0),ratio=(3/4,4/3),interpolation)

    将给定图像随机裁剪为不同的大小和宽高比,然后缩放所裁剪得到的图像为制定的大小;

    主要参数:

    size:为最终图片要resize的大小

    scale:为随机采样最少要覆盖原图的比例,在resize前

    ratio:为随机采样宽高的比例,也在resize前

    interpolation:插值方法

    代码示例:

    from torchvision import transforms
    
    import matplotlib.pyplot as plt
    
    from PIL import Image
    
    transform = transforms.RandomResizedCrop(size=(256, 256),
    
                                             scale=(0.08, 1),
    
                                             ratio=(3/ 4, 4/3),
    
                                             interpolation=Image.NEAREST)
    
    image_path = "./dog.jpg"
    
    image = Image.open(image_path)
    
    random_resize_crop_image = transform(image)
    
    print(random_resize_crop_image.size)
    
    plt.imshow(random_resize_crop_image)
    
    plt.show()
    
    random_resize_crop_image.save("./dog_random_resize_crop.jpg")

    4.图片翻转与旋转

    4.1.transforms.RandomHorizontalFlip(p=0.5)水平翻转

    p为旋转的概率

    代码示例:

    from torchvision import transforms
    
    import matplotlib.pyplot as plt
    
    from PIL import Image
    
    transform = transforms.RandomHorizontalFlip(p=0.7)
    
    image_path = "./dog.jpg"
    
    image = Image.open(image_path)
    
    RandomHorizontalFlip_image = transform(image)
    
    print(RandomHorizontalFlip_image.size)
    
    plt.imshow(RandomHorizontalFlip_image)
    
    plt.show()
    
    RandomHorizontalFlip_image.save("./RandomHorizontalFlip_image.jpg")
    4.2transforms.RandomVerticalFlip垂直翻转

    代码示例

    from torchvision import transforms
    
    import matplotlib.pyplot as plt
    
    from PIL import Image
    
    transform = transforms.RandomVerticalFlip(p=0.8)
    
    image_path = "./dog.jpg"
    
    image = Image.open(image_path)
    
    RandomVerticalFlip_image = transform(image)
    
    print(RandomVerticalFlip_image.size)
    
    plt.imshow(RandomVerticalFlip_image)
    
    plt.show()
    
    RandomVerticalFlip_image.save("./RandomVerticalFlip_image.jpg")
    4.3旋转transforms.RandomRotation
    RandomRotation(degrees,resample=False,expand=False,center=None)

    主要参数:

    • degrees:旋转角度。

            当为 a 时,在 (-a, a) 之间随机选择旋转角度。

            当为 (a, b) 时,在 (a, b) 之间随机选择旋转角度。

    • resample:重采样方法。

    • expand:是否扩大图片,以保持原图信息。

    • center:旋转点设置,默认中心旋转

    代码示例:

    from torchvision import transforms
    
    import matplotlib.pyplot as plt
    
    from PIL import Image
    
    transform = transforms.RandomRotation(degrees=90,resample=False, expand=True, center=None, fill=0)
    
    image_path = "./dog.jpg"
    
    image = Image.open(image_path)
    
    RandomRotation_image = transform(image)
    
    print(RandomRotation_image.size)
    
    plt.imshow(RandomRotation_image)
    
    plt.show()
    
    RandomRotation_image.save("./RandomRotation_image.jpg")

    关于“pytorch transforms图像增强怎么实现”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注***行业资讯频道,小编每天都会为大家更新不同的知识点。