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中包含的类有哪些
看起来操作非常多,但实际上用起来并不难,只要搞懂要求的输入与输出是什么即可,下面就对其中几个举例
在这里插入图片描述

案例

ToTensor

在这里插入图片描述
显然是将图片的信息转换为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

这是一个常用的函数, 起到正则化的作用
在这里插入图片描述
如源码中的叙述, 它要求的输入是两个列表,分别 包含均值和方差
它的目的是为一个 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

在这里插入图片描述

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, 然后将长的那条边按比例缩放
    在这里插入图片描述
# 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()

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Joker-Tong

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值