TORCH03_02数据加载中的图像处理

2020-03-23  本文已影响0人  杨强AT南京

  加载数据集设计图像预处理,PyTorch提供常见的图像处理,这些处理方式在AlexNet,ResNet,VGG等常见卷积网络中都可以见到。这里整理一下,便于使用的时候备查。
  这些处理函数与可调用对象在PyTorch提供的数据集读取函数中通过transform与target_transform接口绑定使用。


PyTorch提供的数据转换功能

PyTorch提供的转换类与函数

from torchvision.datasets import MNIST
from torch.utils.data import DataLoader
from torchvision.transforms import ToTensor
train_mnist = MNIST(root="./datasets", train=True, download=False,transform=ToTensor())

loader = DataLoader(train_mnist, batch_size=10000, shuffle=True, drop_last=False)
for d, t in loader:    # 数据与标签
    print(d.shape, t.shape)
torch.Size([10000, 1, 28, 28]) torch.Size([10000])
torch.Size([10000, 1, 28, 28]) torch.Size([10000])
torch.Size([10000, 1, 28, 28]) torch.Size([10000])
torch.Size([10000, 1, 28, 28]) torch.Size([10000])
torch.Size([10000, 1, 28, 28]) torch.Size([10000])
torch.Size([10000, 1, 28, 28]) torch.Size([10000])

转换类与函数的使用

from torchvision.datasets import MNIST
from torch.utils.data import DataLoader
from torchvision.transforms import ToTensor
from torchvision.transforms.functional import to_tensor

print("-----转换对象的使用-----")   
train_mnist = MNIST(root="./datasets", train=True, download=False,transform=ToTensor())   # 对象是可调用对象
loader = DataLoader(train_mnist, batch_size=10000, shuffle=True, drop_last=False)
for d, t in loader:    # 数据与标签
    print(d.shape, t.shape)
    
print("-----转换函数的使用-----")
train_mnist = MNIST(root="./datasets", train=True, download=False,transform=to_tensor)
loader = DataLoader(train_mnist, batch_size=10000, shuffle=True, drop_last=False)
for d, t in loader:    # 数据与标签
    print(d.shape, t.shape)
    
-----转换对象的使用-----
torch.Size([10000, 1, 28, 28]) torch.Size([10000])
torch.Size([10000, 1, 28, 28]) torch.Size([10000])
torch.Size([10000, 1, 28, 28]) torch.Size([10000])
torch.Size([10000, 1, 28, 28]) torch.Size([10000])
torch.Size([10000, 1, 28, 28]) torch.Size([10000])
torch.Size([10000, 1, 28, 28]) torch.Size([10000])
-----转换函数的使用-----
torch.Size([10000, 1, 28, 28]) torch.Size([10000])
torch.Size([10000, 1, 28, 28]) torch.Size([10000])
torch.Size([10000, 1, 28, 28]) torch.Size([10000])
torch.Size([10000, 1, 28, 28]) torch.Size([10000])
torch.Size([10000, 1, 28, 28]) torch.Size([10000])
torch.Size([10000, 1, 28, 28]) torch.Size([10000])

单独使用转换

  1. 图像加载没有做任何处理,直接加载为PIL.Image.Image对象
from torchvision.datasets import MNIST
from torch.utils.data import DataLoader
from torchvision.transforms import ToTensor

train_mnist = MNIST(root="./datasets", train=True, download=False)
print(type(train_mnist[0][0]))
<class 'PIL.Image.Image'>
  1. 使用类转换图像
    • torchvision.transforms.Resize(size, interpolation=2):改变图像大小
      • interpolation参数表示:图像放大缩小过程中的插值算法
    • 这些对象都是可调用对象,直接使用。
from torchvision.datasets import MNIST
from torch.utils.data import DataLoader
from torchvision.transforms import Resize

train_mnist = MNIST(root="./datasets", train=True, download=False)


resize = Resize((32,32))    # 放大图像
img_out = resize(train_mnist[0][0])
print(type(img_out), img_out.size) 
<class 'PIL.Image.Image'> (32, 32)
  1. 使用函数转换图像
    • 函数因为带参数,所以在图像加载的时候,不好使用函数作为转换器。
from torchvision.datasets import MNIST
from torch.utils.data import DataLoader
import torchvision.transforms.functional

train_mnist = MNIST(root="./datasets", train=True, download=False)



img_out = torchvision.transforms.functional.resize(train_mnist[0][0], size=(45, 45), interpolation=2)
print(type(img_out), img_out.size) 
<class 'PIL.Image.Image'> (45, 45)

复合转换器的使用

from torchvision.datasets import MNIST
from torch.utils.data import DataLoader
from torchvision.transforms import Resize
from torchvision.transforms import ToTensor
from torchvision.transforms import Compose



re_size = Resize((50, 50))    # 放大图像

to_tensor = ToTensor()
comp = Compose([re_size, to_tensor])

train_mnist = MNIST(root="./datasets", train=True, download=False, transform=comp)

loader = DataLoader(train_mnist, batch_size=10000, shuffle=True, drop_last=False)
for d, t in loader:    # 数据与标
    print(d.shape, type(d))
torch.Size([10000, 1, 50, 50]) <class 'torch.Tensor'>
torch.Size([10000, 1, 50, 50]) <class 'torch.Tensor'>
torch.Size([10000, 1, 50, 50]) <class 'torch.Tensor'>
torch.Size([10000, 1, 50, 50]) <class 'torch.Tensor'>
torch.Size([10000, 1, 50, 50]) <class 'torch.Tensor'>
torch.Size([10000, 1, 50, 50]) <class 'torch.Tensor'>

图像相关的转换使用详解


上一篇 下一篇

猜你喜欢

热点阅读