1.class torchvision.transforms.Compose(transforms)
对PIL.Image进行变换torchvision.transforms.Compose(transforms)就是将多个transform组合起来使用。
例子:
import torchvision import torch train_augmentation = torchvision.transforms.Compose([torchvision.transforms.Resize(256), torchvision.transforms.RandomCrop(224), torchvision.transofrms.RandomHorizontalFlip(), torchvision.transforms.ToTensor(), torch vision.Normalize([0.485, 0.456, -.406],[0.229, 0.224, 0.225]) ])
这里定义了resize、crop、normalize等数据预处理操作,Compose这个类是用来管理各个transform的,可以看到主要的__call__
方法就是对输入图像img循环所有的transform操作。
主要代码在transformas.py脚本中,这里仅介绍常见的data augmentation操作,源码如下:
from __future__ import division import torch import math import random from PIL import Image, ImageOps, ImageEnhance try: import accimage except ImportError: accimage = None import numpy as np import numbers import types import collections import warnings from . import functional as F __all__ = ["Compose", "ToTensor", "ToPILImage", "Normalize", "Resize", "Scale", "CenterCrop", "Pad", "Lambda", "RandomCrop", "RandomHorizontalFlip", "RandomVerticalFlip", "RandomResizedCrop", "RandomSizedCrop", "FiveCrop", "TenCrop","LinearTransformation", "ColorJitter", "RandomRotation", "Grayscale", "RandomGrayscale"]
首先是导入必须的模型,这里比较重要的是from . import functional as F,也就是导入了functional.py脚本中具体的data augmentation函数。__all__
列表定义了可以从外部import的函数名或类名。
ToTensor类是实现:Convert a
PIL Image
or numpy.ndarray
to tensor的过程,在PyTorch中常用PIL库来读取图像数据,因此这个方法相当于搭建了PIL Image和Tensor的桥梁。另外要强调的是在做数据归一化之前必须要把PIL Image转成Tensor,而其他resize或crop操作则不需要。参考博客: