Why transforms?
一般情况下收集到的图像样本在尺寸,亮度等方面存在差异,在深度学习中,我们希望样本分布是独立同分布的,因此需要对样本进行归一化预处理。
有时候只能获取到少量的样本数据,获取数量较多的样本不容易。但是样本数量太少训练的模型精度会比较低,为了解决这样的问题,往往需要做数据增加data arguement, 数据增加的途径就是通过一些变换达到目的。
pytorch中的transforms
在pytorch中,transforms位于 torchvision.transforms
包中
主要包含的变换:
类型 | 作用 |
---|---|
Transforms on PIL Image | 对PIL.Image图像进行变换 |
Transforms on torch.*Tensor | 对torch.Tensor进行变换 |
Conversion Transforms | |
Generic Transforms | 一些通用的变换 |
Functional Transforms | 函数 |
开发/实验环境
- windows10 64bit
- Anaconda3
- python3.7
- pytorch1.0
API 参考
Reference
pytorch官网文档
实践
一、对PIL Image进行变换(Transforms on PIL Image)
- Summary
类型 | 说明 |
---|---|
CenterCrop(size) |
中心裁剪 |
FiveCrop(size) |
4个角+中心裁剪 = 5, 返回多张图像 |
Grayscale(num_output_channels = 1) |
灰度化 |
Pad(padding, fill=o,padding_mode='constant) |
图像边沿加pad |
RandomAffine(degrees,translate,scale,shear,resample,fillcolor) |
随进放射变换 |
RandomApply(..) |
对图像随机应用变换 |
RandomCrop(..) |
随机位置裁剪 |
RandomGrayscale(..) | |
Resize(size) |
对图像进行尺寸缩放 |
- 实验
import numpy as np
from torchvision.transforms import transforms
from PIL import Image
# 准备好实验的图像,一个彩色32bit图像
IMG_PATH = './data/lena_rgb.jpg'
img = Image.open(IMG_PATH)
# -----------------类型转换---------------------------------------
#transforms1 = transforms.Compose([transforms.ToTensor()])
#img1 = transforms1(img)
#print('img1 = ', img1)
# ---------------Tensor上的操作---------------------------------
#transforms2 = transforms.Compose([transforms.Normalize(mean=(0.5, 0.5, #0.5), std=(0.5, 0.5, 0.5))])
#img2 = transforms2(img1)
#print('img2 = ', img2)
# ---------------PIL.Image上的操作---------------------------------
transforms3 = transforms.Compose([transforms.Resize(256)])
img3 = transforms3(img)
print('img3 = ', img3)
img3.show()
transforms4 = transforms.Compose([transforms.CenterCrop(256)])
img4 = transforms4(img)
print('img4 = ', img4)
img4.show()
transforms5 = transforms.Compose([transforms.RandomCrop(224, padding=0)])
img5 = transforms5(img)
print('img5 = ', img5)
img5.show()
transforms6 = transforms.Compose([transforms.Grayscale(num_output_channels=1)])
img6 = transforms6(img)
print('img6 = ', img6)
img6.show()
transforms7 = transforms.Compose([transforms.ColorJitter()])
img7 = transforms7(img)
img7.show()