Image Augmentation with torchvision.transforms.
- 官方文档:Pytorch Dcos
torchvision.transforms
提供了常用的图像变换方法,输入支持PIL图像或tensor图像。图像变换中存在一些随机性,使用下列语句设置随机数种子:
import torch
torch.manual_seed(17)
可以同时设置多种数据增强方法,通过Compose
方法实现:
from torchvision import transforms
train_transform = transforms.Compose([,])
也可以设置使用增强方法的概率,通过RandomApply
方法实现:
train_transform = transforms.RandomApply(
torch.nn.ModuleList([,]), p=0.3)
torchvision.transforms
提供的图像增强方法可以分为几何变换和像素变换。
1. 常用的几何变换:
常用的几何变换包括:
transforms.CenterCrop(size)
:在图像中心进行裁剪transforms.FiveCrop(size)
:裁剪图像的中心和四个角落transforms.TenCrop(size)
:裁剪图像的中心和四个角落,并水平翻转transforms.RandomCrop(size)
:随机裁剪图像的一部分transforms.RandomHorizontalFlip(p=0.5)
:把图像水平翻转transforms.RandomVerticalFlip(p=0.5)
:把图像垂直翻转transforms.RandomResizedCrop(size, scale=(0.08, 1.0), ratio=(0.75, 1.3333333333333333))
:随机裁剪图像的一部分并缩放到指定尺寸transforms.RandomRotation(degrees)
:对图像进行随机旋转transforms.RandomPerspective(distortion_scale=0.5, p=0.5)
:对图像进行透视变换transforms.RandomAffine(degrees)
:以图像中心进行随机仿射变换
⚪ transforms.CenterCrop(size)
在图像中心进行裁剪。如果图像尺寸小于裁剪长度,则对图像填充$0$。主要参数如下:
size
:裁剪尺寸。可以输入int
或(h,w)
。
⚪ transforms.FiveCrop(size)
裁剪图像的中心和四个角落,返回一个图像元组。主要参数如下:
size
:裁剪尺寸。可以输入int
或(h,w)
。
⚪ transforms.TenCrop(size)
裁剪图像的中心和四个角落,再将它们水平翻转,返回一个图像元组。主要参数如下:
size
:裁剪尺寸。可以输入int
或(h,w)
。vertical_flip
:使用垂直翻转代替水平翻转。
⚪ transforms.RandomCrop(size)
随机裁剪图像的一部分。主要参数如下:
size
:裁剪尺寸。可以输入int
或(h,w)
。
⚪ transforms.RandomHorizontalFlip(p=0.5)
把图像水平翻转,可以指定概率$p$。
原始图像 | 增强图像 |
---|---|
⚪ transforms.RandomVerticalFlip(p=0.5)
把图像垂直翻转,可以指定概率$p$。
原始图像 | 增强图像 |
---|---|
⚪ transforms.RandomResizedCrop(size, scale=(0.08, 1.0), ratio=(0.75, 1.3333333333333333))
随机裁剪图像的一部分并缩放到指定尺寸。主要参数如下:
size
:指定输出尺寸,可以输入int
或(h,w)
。scale
:指定裁剪区域面积的下界和上界。数值为相对于原图的面积比例。ratio
:指定裁剪区域高宽比的下界和上界。
原始图像 | 增强图像 |
---|---|
⚪ transforms.RandomRotation(degrees)
对图像进行随机旋转。主要参数如下:
degrees
:设置旋转的角度范围。可以输入float
或(min,max)
;若输入float
则取值为$[-\text{degrees},\text{degrees}]$。
原始图像 | 增强图像 |
---|---|
⚪ transforms.RandomPerspective(distortion_scale=0.5, p=0.5)
对图像进行透视变换,可以指定概率$p$。主要参数如下:
distortion_scale
:控制变形度,可取$[0,1]$,默认$0.5$。
原始图像 | 增强图像 |
---|---|
⚪ transforms.RandomAffine(degrees)
以图像中心进行随机仿射变换。主要参数如下:
degrees
:设置旋转的角度范围。可以输入float
或(min,max)
;若输入float
则取值为$[-\text{degrees},\text{degrees}]$。translate
:设置平移的范围$[0,1]$。可以输入(a,b)
;则水平平移的范围取值为$[-\text{width}a,\text{width}a]$,垂直平移的范围取值为$[-\text{height}b,\text{height}b]$。scale
:设置缩放的范围。可以输入(a,b)
。shear
:设置剪切的范围。若输入a
,则沿x轴剪切的范围取值为$(-a,a)$;若输入(a,b)
,则沿x轴剪切的范围取值为$(a,b)$;若输入(a,b,c,d)
,则沿x轴剪切的范围取值为$(a,b)$,沿y轴剪切的范围取值为$(c,d)$。fill
:设置像素填充,默认为$0$。
原始图像 | 旋转 | 平移 | 缩放 | 剪切 |
---|---|---|---|---|
2. 常用的像素变换
常用的像素变换包括:
transforms.Grayscale(num_output_channels=1)
:把图像转换为灰度图transforms.RandomGrayscale(p=0.1)
:按一定概率把图像转换为灰度图transforms.RandomInvert(p=0.5)
:反转像素值transforms.GaussianBlur(kernel_size, sigma=(0.1, 2.0))
:使用高斯模糊进行图像平滑transforms.RandomPosterize(bits, p=0.5)
:通过减少每个颜色通道的位数对图像进行色调分离transforms.RandomSolarize(threshold, p=0.5)
:通过反转高于阈值的像素值对图像进行曝光transforms.RandomAdjustSharpness(sharpness_factor, p=0.5)
:调整图像的锐化程度transforms.RandomAutocontrast(p=0.5)
:自动调整图像的对比度transforms.RandomEqualize(p=0.5)
:直方图均衡化transforms.ColorJitter(brightness=0, contrast=0, saturation=0, hue=0)
:随机改变图像的颜色参数
⚪ transforms.Grayscale(num_output_channels=1)
把图像转换为灰度图,可以指定输出通道数(通常为$1$或$3$)。
原始图像 | 增强图像 |
---|---|
⚪ transforms.RandomGrayscale(p=0.1)
按一定概率把图像转换为灰度图,可以指定概率$p$。
⚪ transforms.RandomInvert(p=0.5)
反转像素值,可以指定概率$p$。
原始图像 | 增强图像 |
---|---|
⚪ transforms.GaussianBlur(kernel_size, sigma=(0.1, 2.0))
使用高斯模糊进行图像平滑。主要参数如下:
kernel_size
:高斯核的大小。sigma
:高斯核的标准差,可以输入int
或(min,max)
。
原始图像 | 增强图像 |
---|---|
⚪ transforms.RandomPosterize(bits, p=0.5)
通过减少每个颜色通道的位数对图像进行色调分离,可以指定概率$p$。颜色通道位数越多,则能表示的颜色数量越多。主要参数如下:
bits
:每个颜色通道保留的位数($0$-$8$)。
原始图像 | 增强图像 |
---|---|
⚪ transforms.RandomSolarize(threshold, p=0.5)
通过反转高于阈值的像素值对图像进行曝光,可以指定概率$p$。主要参数如下:
threshold
:像素反转的阈值(超过阈值则反转)。
原始图像 | 增强图像 |
---|---|
⚪ transforms.RandomAdjustSharpness(sharpness_factor, p=0.5)
调整图像的锐化程度,可以指定概率$p$。主要参数如下:
sharpness_factor
:锐化程度。取值非负,$1$为原图,$0$为模糊图像。
原始图像 | 增强图像 |
---|---|
⚪ transforms.RandomAutocontrast(p=0.5)
自动调整图像的对比度,可以指定概率$p$。
原始图像 | 增强图像 |
---|---|
⚪ transforms.RandomEqualize(p=0.5)
直方图均衡化,可以指定概率$p$。
原始图像 | 增强图像 |
---|---|
⚪ transforms.ColorJitter(brightness=0, contrast=0, saturation=0, hue=0)
随机改变图像的颜色参数。主要参数如下:
brightness
:改变亮度。可以输入float
或(min,max)
;若输入float
则取值为$[\max(0,1-\text{brightness}),1+\text{brightness}]$。contrast
:改变对比度。可以输入float
或(min,max)
;若输入float
则取值为$[\max(0,1-\text{contrast}),1+\text{contrast}]$。saturation
:改变饱和度。可以输入float
或(min,max)
;若输入float
则取值为$[\max(0,1-\text{saturation}),1+\text{saturation}]$。hue
:改变色调。可以输入float
或(min,max)
;若输入float
则取值为$[-\text{hue},\text{hue}]$,色调取值应为$[-0.5,0.5]$。
原始图像 | 亮度 | 对比度 | 饱和度 | 色调 |
---|---|---|---|---|