• Pytorch框架学习记录3——Transform的使用


    Pytorch框架学习记录3——Transform的使用

    1. 导入

    from torchvision import transforms
    
    • 1

    2.ToTensor的用法

    作用:将PIL图像或者numpy转换成tensor格式

    在这里插入图片描述

    from torch.utils.tensorboard import SummaryWriter
    from torchvision import transforms
    from PIL import Image
    
    img_path = "C:\\Users\\hp\\PycharmProjects\pythonProject\\Pytorch_Learning\\flower_data\\train\daisy\\5547758_eea9edfd54_n.jpg"
    img = Image.open(img_path)
    tensor = transforms.ToTensor()
    tensor_img = tensor(img)
    
    writer = SummaryWriter("logs")
    
    writer.add_image("tensor_img", tensor_img, 1)
    
    writer.close()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    在这里插入图片描述

    3. Normalize的用法

    用均值和标准差归一化张量图像,参数:mean, std;输入图像类型为tensor,输出类型为tensor
    o u t p u t [ c h a n n e l ] = ( i n p u t [ c h a n n e l ] − m e a n [ c h a n n e l ] ) / s t d [ c h a n n e l ] output[channel] = (input[channel] - mean[channel]) / std[channel] output[channel]=(input[channel]mean[channel])/std[channel]

    # Normalize
    transform_normal = transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))
    img_normal = transform_normal(img_tensor)
    print(type(img_normal))
    writer.add_image("Normalize", img_normal, 1)
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在这里插入图片描述

    4. RandomCrop 的用法

    随机裁剪,参数size表示随机裁剪图片的大小,输入的图像类型为PIL类型,输出的类型也为PIL类型。

    下面的这个例子是随机对图像剪裁10次,每次剪裁后的图像大小为32*32

    # RandomCrop
    transform_randomCrop = transforms.RandomCrop((32, 32))
    for i in range(0, 10):
        img_randomCrop = transform_randomCrop(img_PIL)
        # print(type(img_randomCrop))
        img_randomCrop = transform_tensor(img_randomCrop)
        writer.add_image("RandomCrop", img_randomCrop, i)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    在这里插入图片描述

    5. Resize的用法

    将输入的PIL图像裁剪成指定大小,输入参数为size(int类型或者turple类型),输出为PIL图像

    # Resize
    transform_resize = transforms.Resize((128, 128))
    img_resize = transform_resize(img_PIL)
    img_resize = transform_tensor(img_resize)
    writer.add_image("Resize", img_resize, 1)
    
    • 1
    • 2
    • 3
    • 4
    • 5

    在这里插入图片描述

    6. Compose的用法

    该方法将所有方法集合到一起,按照顺序依次执行,用法示例如下:

    # Compose
    transform_compose = transforms.Compose([transform_resize, transform_tensor])
    img_resize_2 = transform_compose(img_PIL)
    writer.add_image("Compose", img_resize_2, 1)
    writer.close()
    
    • 1
    • 2
    • 3
    • 4
    • 5

    7. 所有代码

    from torch.utils.tensorboard import SummaryWriter
    from PIL import Image
    from torchvision.transforms import transforms
    
    img_path = "C:\\Users\\hp\\PycharmProjects\pythonProject\\Pytorch_Learning\\flower_data\\train\daisy\\5547758_eea9edfd54_n.jpg"
    
    writer = SummaryWriter("logs")
    img_PIL = Image.open(img_path)
    
    # ToTensor
    transform_tensor = transforms.ToTensor()
    img_tensor = transform_tensor(img_PIL)
    
    # Normalize
    transform_normal = transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))
    img_normal = transform_normal(img_tensor)
    print(type(img_normal))
    writer.add_image("Normalize", img_normal, 1)
    
    # RandomCrop
    transform_randomCrop = transforms.RandomCrop((32, 32))
    for i in range(0, 10):
        img_randomCrop = transform_randomCrop(img_PIL)
        # print(type(img_randomCrop))
        img_randomCrop = transform_tensor(img_randomCrop)
        writer.add_image("RandomCrop", img_randomCrop, i)
    
    # Resize
    transform_resize = transforms.Resize((128, 128))
    img_resize = transform_resize(img_PIL)
    img_resize = transform_tensor(img_resize)
    writer.add_image("Resize", img_resize, 1)
    
    # Compose
    transform_compose = transforms.Compose([transform_resize, transform_tensor])
    img_resize_2 = transform_compose(img_PIL)
    writer.add_image("Compose", img_resize_2, 1)
    writer.close()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
  • 相关阅读:
    Servlet规范之转发请求
    为虚拟网络提供敏捷负载均衡:Everoute LB 特性解读
    解决外网404:清除DNS缓存并配置host主机使用知名公共DNS服务
    通过实例程序验证与优化谈谈网上很多对于Java DCL的一些误解以及为何要理解Java内存模型
    ContentType的作用
    前端如何使用post下载文件(将用户勾选的数据导出、下载),以及下载window.open是预览的文件
    SQL优化的一些建议,希望可以帮到和我一样被SQL折磨的你
    视频编码(3):H.266 编码性能比 H.265 再提升 49% 的关键丨音视频基础
    前端常见专有名词
    3.msfconle
  • 原文地址:https://blog.csdn.net/qq_45955883/article/details/126031109