Transforms是在计算机视觉工具包torchvision下的包,常用于对图像进行预处理(如裁剪、翻转和旋转、图像变换……),提高泛化能力。
torchvision.transforms:常用的图像预处理方法
torchvision.datasets:常用数据集的dataset实现(MNIST、CIFAR-10、ImageNet等)
torchvision.model:常用的模型预训练(AlexNet、VGG、ResNet、GoogLeNet等)
import numpy as np
import torch
import torchvision.transforms as transforms
from PIL import Image
transforms.Compose
将一系列的transforms有序组合,实现时按照这些方法依次对图像操作。
norm_mean = [0.485, 0.456, 0.406]
norm_std = [0.229, 0.224, 0.225]
transform = transforms.Compose([
transforms.Resize((224, 224)),
transforms.ToTensor(),
transforms.Normalize(norm_mean, norm_std),
])
1 裁剪(Crop)
1.1 中心裁剪:transforms.CenterCrop
依据给定的size从中心裁剪
transforms.CenterCrop(size)
size
:所需裁剪图片尺寸。为序列时表示(h, w)
,为int时表示(size, size)
即正方形裁剪,下同
1.2 随机裁剪:transforms.RandomCrop
从图片中随机裁剪出尺寸为size的图片(位置随机裁剪)
transforms.RandomCrop(size,
padding=None,
pad_if_needed=False,
fill=0,
padding_mode='constant')
size
:所需裁剪图片尺寸padding
:设置填充大小- 当为
a
时,上下左右均填充 a a a个像素 - 当为
(a, b)
时,左右填充 a a a个像素,上下填充 b b b个像素 - 当为
(a, b, c, d)
时,左、上、右、下4862分别填充 a a a、 b b b、 c c c、 d d d
- 当为
pad_if_need
:若图像小于设定size
,则填充padding_mode
:填充模式constant
:像素值由fill
参数设定edge
:像素值由图像边缘像素决定reflect
:镜像填充,最后一个像素不镜像。【例】对 [ 1 , 2 , 3 , 4 ] [1,2,3,4] [1,2,3,4]进行2个像素的填充。左侧最后一个像素不镜像,忽略 1 1 1,从左至右为 2 , 3 2,3 2,3,镜像填充为 [ 3 , 2 , 1 , 2 , 3 , 4 ] [3,2,1,2,3,4] [3,2,1,2,3,4]。同理,右侧忽略 4 4 4,从右至左为 3 , 2 3,2 3,2,最终填充为 [ 3 , 2 , 1 , 2