参考链接:
torchvision介绍
torchvision是pytorch的一个图形库,它服务于PyTorch深度学习框架的,主要用来构建计算机视觉模型。torchvision.transforms主要是用于常见的一些图形变换。以下是torchvision的构成:
torchvision.datasets: 一些加载数据的函数及常用的数据集接口;
torchvision.models: 包含常用的模型结构(含预训练模型),例如AlexNet、VGG、ResNet等;
torchvision.transforms: 常用的图片变换,例如裁剪、旋转等;
torchvision.utils: 其他的一些有用的方法。
transforms.Compose()详解
本文的主题是其中的torchvision.transforms.Compose()类。这个类的主要作用是串联多个图片变换的操作。这个类的构造很简单:
class torchvision.transforms.Compose(transforms):
# Composes several transforms together.
# Parameters: transforms (list of Transform objects) – list of transforms to compose.
Example # 可以看出Compose里面的参数实际上就是个列表,而这个列表里面的元素就是你想要执行的transform操作。
>>> transforms.Compose([
>>> transforms.CenterCrop(10),
>>> transforms.ToTensor(),])
事实上,Compose()类会将transforms列表里面的transform操作进行遍历。实现的代码很简单:
## 这里对源码进行了部分截取。
def __call__(self, img):
for t in self.transforms:
img = t(img)
return img
transforms中的常见操作
class torchvision.transforms.CenterCrop(size)
将给定的PIL.Image
进行中心切割,得到给定的size
,size
可以是tuple
,(target_height, target_width)
。size
也可以是一个Integer
,在这种情况下,切出来的图片的形状是正方形。
class torchvision.transforms.RandomCrop(size, padding=0)
切割中心点的位置随机选取。size
可以是tuple
也可以是Integer
。
class torchvision.transforms.RandomHorizontalFlip
随机水平翻转给定的PIL.Image
,概率为0.5
。即:一半的概率翻转,一半的概率不翻转。
class torchvision.transforms.RandomSizedCrop(size, interpolation=2)
先将给定的PIL.Image
随机切,然后再resize
成给定的size
大小。
class torchvision.transforms.Pad(padding, fill=0)
将给定的PIL.Image
的所有边用给定的pad value
填充。 padding:
要填充多少像素 fill:
用什么值填充 例子:
from torchvision import transforms
from PIL import Image
padding_img = transforms.Pad(padding=10, fill=0)
img = Image.open('test.jpg')
print(type(img))
print(img.size)
padded_img=padding(img)
print(type(padded_img))
print(padded_img.size)
<class 'PIL.PngImagePlugin.PngImageFile'>
(10, 10)
<class 'PIL.Image.Image'>
(30, 30) #由于上下左右都要填充10个像素,所以填充后的size是(30,30)