python的image用法_python – PyTorch – 如何正确使用“toPILImage”

我想知道,我是否正确地使用了torchvision的

toPILImage.我想使用它来查看初始图像转换应用于数据集后图像的外观.

当我在下面的代码中使用它时,出现的图像具有奇怪的颜色,如this one.原始图像是常规的RGB图像.

这是我的代码:

import os

import torch

from PIL import Image, ImageFont, ImageDraw

import torch.utils.data as data

import torchvision

from torchvision import transforms

import matplotlib.pyplot as plt

# Image transformations

normalize = transforms.Normalize(

mean=[0.485, 0.456, 0.406],

std=[0.229, 0.224, 0.225]

)

transform_img = transforms.Compose([

transforms.Resize(256),

transforms.CenterCrop(256),

transforms.ToTensor(),

normalize ])

train_data = torchvision.datasets.ImageFolder(

root='./train_cl/',

transform=transform_img

)

test_data = torchvision.datasets.ImageFolder(

root='./test_named_cl/',

transform=transform_img

)

train_data_loader = data.DataLoader(train_data,

batch_size=4,

shuffle=True,

num_workers=4) #num_workers=args.nThreads)

test_data_loader = data.DataLoader(test_data,

batch_size=32,

shuffle=False,

num_workers=4)

# Open Image from dataset:

to_pil_image = transforms.ToPILImage()

my_img, _ = train_data[248]

results = to_pil_image(my_img)

results.show()

编辑:

我不得不在Torch变量上使用.data来获得张量.

我还需要在转置之前重新调整numpy数组.我找到了一个有效的解决方案here,但它并不总能正常工作.我怎么能做得更好?

for i, data in enumerate(train_data_loader, 0):

img, labels = data

img = Variable(img)

break

image = img.data.cpu().numpy()[0]

# This worked for rescaling:

image = (1/(2*2.25)) * image + 0.5

# Both of these didn't work:

# image /= (image.max()/255.0)

# image *= (255.0/image.max())

image = np.transpose(image, (1,2,0))

plt.imshow(image)

plt.show()

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这两个话题有些不相关,我可以分别介绍一下。 首先,tqdm 是一个 Python 进度条库,可以在命令行中显示循环进度,非常方便。 安装: ``` pip install tqdm ``` 使用: ```python from tqdm import tqdm for i in tqdm(range(100)): # do something ``` 接下来是 PyTorch BEGAN 的实现。BEGAN 是一种生成式对抗网络(GAN)的变体,它可以生成高质量的图像。 安装 PyTorch: ``` pip install torch torchvision ``` BEGAN 的 PyTorch 实现可以在 GitHub 上找到。这里提供一个简单的实例: ```python import torch import torch.nn as nn import torch.optim as optim from torch.autograd import Variable from torchvision import datasets, transforms from tqdm import tqdm # define the model class Generator(nn.Module): def __init__(self): super(Generator, self).__init__() # define the layers def forward(self, x): # define the forward pass class Discriminator(nn.Module): def __init__(self): super(Discriminator, self).__init__() # define the layers def forward(self, x): # define the forward pass # define the loss function criterion = nn.BCELoss() # define the optimizer optimizer_G = optim.Adam(generator.parameters(), lr=0.0002, betas=(0.5, 0.999)) optimizer_D = optim.Adam(discriminator.parameters(), lr=0.0002, betas=(0.5, 0.999)) # prepare the data transform = transforms.Compose([ transforms.ToTensor(), transforms.Normalize((0.5,), (0.5,)) ]) train_loader = torch.utils.data.DataLoader( datasets.MNIST('data', train=True, download=True, transform=transform), batch_size=64, shuffle=True) # train the model for epoch in range(epochs): for i, (images, _) in enumerate(tqdm(train_loader)): # train the discriminator # train the generator # generate a sample image z = Variable(torch.randn(64, 100)) sample = generator(z) # save the sample image ``` 以上代码中,需要自己实现 Generator 和 Discriminator 的定义和 forward 方法。在训练过程中,需要分别训练 Generator 和 Discriminator,具体实现可以参考 BEGAN 论文中的算法。在循环中加入 tqdm,可以显示训练进度。最后,可以生成一张样本图片并保存。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值