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 操作则不需要.
参考博客:
https://www.jianshu.com/p/1ae863c1e66d
来源: http://www.bubuko.com/infodetail-3327291.html