在将图片输入到神经网络进行训练时,一般都需要对输入的图像进行预处理。对图片进行操作有很多种方法,这里我们使用torchvision库的transforms模块。
tansforms有很多种方法(一些可以用在张量和PIL图像,一些仅能用于张量,而另一些仅能用于PIL图像),这些方法极大的为我们的图片处理工作提供了便利。
我们使用PIL库读取一个图片,在调用transform的Resize方法,改变图片的大小:
>>> from PIL import Image
>>> from torchvision import transforms
>>> path="E:\\3-10\\dogandcats\\train\\cat13.0.jpg"
>>> img=Image.open(path)
>>> img.size
(700, 467)
>>> process=transforms.Resize((28,28))
>>> img2=process(img)
>>> img2.size
(28, 28)
同样,我们还可以把原始的图片数据转换为张量:???????
>>> process=transforms.ToTensor()
>>> imgdata=process(img)
>>> imgdata.size()
torch.Size([3, 467, 700])
同样,归一化也变得非常的容易???????
>>> process=transforms.Normalize((0.5,0.5,0.5),(0.5,0.5,0.5))
>>> process(img)
当然,我们对图片预处理时可能不仅仅使用一种方法,那么有没有一种方法将这些操作整合到一起呢?显然,库的作者早已考虑到,并且已经实现了此功能。
借助Compose方法,我们可以集成上述操作。???????
>>> process=transforms.Compose([transforms.Resize((28,28)),
transforms.ToTensor(),
transforms.Normalize((0.5,0.5,0.5),(0.5,0.5,0.5))])
>>> process(img)
当然,transforms提供了多种对图片数据操作的方法,详细的可以看这里:
https://pytorch.org/vision/stable/transforms.html
到了这里,你已经对图像处理有了一定的了解,好吧,那么让我们回到上一篇文章:卷积神经网络|制作自己的Dataset
在这里,我们实现了自己的数据集,在__init__方法,有两个参数分别叫做transform,和label_transform,分别对图片和图片标签进行处理,默认为none,也就是无操作。
这时,很明显,我们可以传入对图片的一系列操作,就像这样:???????
path="E:\\3-10\\dogandcats\\train"
training_data=MyDataset(path,transform=transforms.Compose([
transforms.Resize((16,16)),
transforms.Normalize((0.5,0.5,0.5),(0.5,0.5,0.5))
]))
到这里,对于自己数据集的准备工作基本已经完成!