Pytorch transforms的常用操作

Pytorch transforms的常用操作


记录一下transforms的一些日常操作


在模型的训练中,可能会看到对图像做了许多的操作,如下
为了搞清楚他们的作用,我搜索了一些transforms相关的操作,并整理了此文章

 transforms.Compose([
                transforms.Resize(300),
                transforms.RandomResizedCrop(300),
                transforms.RandomHorizontalFlip(),
                transforms.CenterCrop(256),
                transforms.ToTensor(),
                transforms.Normalize([0.485, 0.456, 0.406],
                                     [0.229, 0.224, 0.225])
            ]),

transforms简介

利用 Pycharm观察一下transforms中包含的类有哪些
看起来操作非常多,但实际上用起来并不难,只要搞懂要求的输入与输出是什么即可,下面就对其中几个举例
Pytorch transforms的常用操作_第1张图片

案例

ToTensor

Pytorch transforms的常用操作_第2张图片
显然是将图片的信息转换为tensor对象

"Convert a ``PIL Image`` or ``numpy.ndarray`` to tensor

要求输入的是PIL Imagenumpy.ndarray格式

from torchvision import transforms
from PIL import Image
# ToTensor
trans_toTensor = transforms.ToTensor()
img_tensor = trans_toTensor(img)

Normalize

这是一个常用的函数, 起到正则化的作用
Pytorch transforms的常用操作_第3张图片
如源码中的叙述, 它要求的输入是两个列表,分别 包含均值和方差
它的目的是为一个 tensor对象 正则化

output[channel] = (input[channel] - mean[channel]) / std[channel]

看一段代码解释一下它的作用

# Normalize
print(img_tensor[0][0][0])
trans_norm = transforms.Normalize([1, 7, 8], [1, 5, 5])
img_norm = trans_norm(img_tensor)
print(img_norm[0][0][0])
writer.add_image('Normalize', img_norm)

打印出的结果如下
也就是 0.3529 − 1 1 = − 0.6471 \frac{0.3529 - 1} { 1 } = -0.6471 10.35291=0.6471

tensor(0.3529)
tensor(-0.6471)

Resize

Pytorch transforms的常用操作_第4张图片

Resize the input image to the given size. The image can be a PIL Image or a torch Tensor

因此其输入应该是个PIL Image格式或者 tensor 的格式

这里看名字就知道是更改图片的尺寸,只不过需要注意一点

  • 传入的参数为元组如 (512,512) 则将图片修改为 512*512 大小
  • 传入的参数为 int 如 512 则找到图片短的那条边变成512, 然后将长的那条边按比例缩放
    Pytorch transforms的常用操作_第5张图片
# Resize
trans_resize = transforms.Resize(300)
img_resize = trans_resize(img)
img_resize = trans_toTensor(img_resize)

RandomCrop

随机裁剪
给定一个 int 值, 裁剪返回一个 正方形的图 边长为 int

trans_random = transforms.RandomCrop(512)
trans_compose = transforms.Compose([
    trans_random,
    trans_toTensor,
])
img_crop = trans_compose(img)

这里compose可以把两个操作拼接起来,但是要注意顺序不能错
即上一个操作的输出要符合下一个操作的输入格式

全代码

这里用tensorboard把图片的过程可视化保存了

可以去这篇文章中查看如何使用
Pytorc技巧 TensorBoard可视化的使用

# -*- coding: utf-8 -*-
# @Time    : 2021/1/31 19:30
# @Author  : JokerTong
# @File    : demo1.py
from torchvision import transforms
from PIL import Image
from torch.utils.tensorboard import SummaryWriter
import matplotlib.pyplot as plt
import numpy as np

writer = SummaryWriter('logs')
img = Image.open('../图像读取/img1.jpg')

# ToTensor
trans_toTensor = transforms.ToTensor()
img_tensor = trans_toTensor(img)
# writer.add_image('ToTensor', img_tensor)

# Normalize
print(img_tensor[0][0][0])
trans_norm = transforms.Normalize([1, 7, 8], [1, 5, 5])
img_norm = trans_norm(img_tensor)
print(img_norm[0][0][0])
writer.add_image('Normalize', img_norm)

# Resize
trans_resize = transforms.Resize(300)
img_resize = trans_resize(img)
img_resize = trans_toTensor(img_resize)
writer.add_image('Resize', img_resize)

# RandomCrop
trans_random = transforms.RandomCrop(512)
trans_compose = transforms.Compose([
    trans_random,
    trans_toTensor,
])
for i in range(10):
    img_crop = trans_compose(img)
    writer.add_image('RandomCrop', img_crop, i)

writer.close()

你可能感兴趣的:(深度学习,学校学习,可视化,python,深度学习)