PyTorch学习之数据增强(image transformations)
位于torchvision.transforms下面。
0 Compose
torchvision.transforms.Compose(transforms)
用法:
transforms.Compose([
transforms.CenterCrop(10),
transforms.ToTensor(),
])
1 常见变换
1-1 Resize
图像尺寸变化
torchvision.transforms.Resize(size, interpolation=2)
1-2 标准化
对数据按通道进行标准化,即先减均值,再除以标准差,注意是 hwc
torchvision.transforms.Normalize(mean, std)
参数:
mean-均值
std-标准差
1-3 转换为 PILImage
将 tensor 或者 ndarray 的数据转换为 PIL Image 类型数据
torchvision.transforms.ToPILImage(mode=None)
参数:
mode- 为 None 时,为 1 通道, mode=3 通道默认转换为 RGB, 4 通道默认转换为 RGBA
1-4 转为 Tensor
将 PIL Image 或者 ndarray 转换为 tensor,并且归一化至[0-1]
torchvision.transforms.ToTensor
2 裁剪 Crop
2-1 中心裁剪 CenterCrop
依据给定的 size 从中心裁剪
torchvision.transforms.CenterCrop(size)
2-2 随机裁剪 RandomCrop
依据给定的 size 随机裁剪
torchvision.transforms.RandomCrop(size, padding=0, pad_if_needed=False)
参数:
padding-此参数是设置填充多少个 pixel。
pad_if_needed-如果图片小于指定尺寸,是否边缘填充。
2-3 随机长宽比裁剪 RandomResizedCrop
随机大小,随机长宽比裁剪原始图片,最后将图片 resize 到设定好的 size
torchvision.transforms.RandomResizedCrop(size, scale=(0.08, 1.0), ratio=(0.75, 1.33), interpolation=2)
参数:
scale- 随机 crop 的大小区间。
ratio- 随机长宽比设置
interpolation- 插值的方法,默认为双线性插值
2-4 上下左右中心裁剪 FiveCrop
对图片进行上下左右以及中心裁剪,获得 5 张图片,返回一个 4D-tensor
torchvision.transforms.FiveCrop(size)
2-5 上下左右中心裁剪后翻转 TenCrop
对图片进行上下左右以及中心裁剪,然后全部翻转(水平或者垂直),获得 10 张图
片,返回一个 4D-tensor。
torchvision.transforms.TenCrop(size, vertical_flip=False)
参数:
vertical_flip (bool) - 是否垂直翻转,默认为 flase,即默认为水平翻转
3 翻转和旋转(Flip & Rotation)
3-1 随机水平翻转 RandomHorizontalFlip
依据概率 p 对 PIL 图片进行水平翻转
torchvision.transforms.RandomHorizontalFlip(p=0.5)
参数:
p- 概率,默认值为 0.5
3-2 随机垂直翻转 RandomVerticalFlip
依据概率 p 对 PIL 图片进行垂直翻转
torchvision.transforms.RandomVerticalFlip(p=0.5)
参数:
p- 概率,默认值为 0.5
3-3 随机旋转 RandomRotation
依 degrees 随机旋转一定角度
torchvision.transforms.RandomRotation(degrees, resample=False, expand=False, center=None)
参数:
degress- 若为单个数,如 30,则表示在(-30, +30)之间随机旋转;若为 sequence,如(30, 60),则表示在 30-60 度之间随机旋转。
resample- 重采样方法选择,可选NEAREST, BILINEAR, BICUBIC,默认为NEAREST
expand- True:填满输出图片,False:不填充。
center- 可选为中心旋转还是左上角旋转。默认中心旋转
4 图像变换
4-1 亮度对比度饱和度变换
修改亮度、对比度和饱和度
torchvision.transforms.ColorJitter(brightness=0, contrast=0, saturation=0, hue=0)
参数:
brightness - [max(0, 1 - brightness), 1 + brightness]
contrast - [max(0, 1 - contrast), 1 + contrast]
saturation - [max(0, 1 - saturation), 1 + saturation]
hue - [-hue, hue] && 0<=hue<= 0.5
4-2 转灰度图
将图片转换为灰度图
torchvision.transforms.Grayscale(num_output_channels=1)
参数:
num_output_channels- (int) ,当为 1 时,正常的灰度图,当为 3 时, 3 channel with r ==g == b
4-3 随机转灰度图
依概率 p 将图片转换为灰度图
torchvision.transforms.RandomGrayscale(p=0.1)
4-4 线性变换
对矩阵做线性变化,可用于白化处理
torchvision.transforms.LinearTransformation(transformation_matrix)
参数:
transformation_matrix (Tensor) – tensor [D x D], D = C x H x W
*Applications: - whitening: zero-center the data, compute the data covariance matrix
[D x D] with np.dot(X.T, X), perform SVD on this matrix and pass it as transformation_matrix.
4-5 仿射变换
仿射变换
torchvision.transforms.RandomAffine(degrees, translate=None, scale=None, shear=None, resample=False, fillcolor=0)
参数:
degrees-旋转角度
translate -水平或者垂直移动的范围
scale - 放缩尺度因子
resample-重采样方式NEAREST, BILINEAR, BICUBIC
fillcolor-填充空白区域的颜色
4-6 填充
torchvision.transforms.Pad(padding, fill=0, padding_mode='constant')
参数:
padding-,此参数是设置填充多少个 pixel。
fill- (int or tuple) 填充值
padding_mode- 填充模式,这里ᨀ供了 4 种填充模式, 1.constant 常量。 2.edge 边缘值。 3.reflect 镜像 4. symmetric 对称
5 Lambda
根据用户自定义函数变换。
torchvision.transforms.Lambda(lambd)
参数:
lambd-用户自定义函数
6 对transform操作
6-1 概率transforms
给一个 transform 加上概率,依概率进行操作
torchvision.transforms.RandomApply(transforms, p=0.5)
6-2 随机transforms
从给定的一系列 transforms 中选一个进行操作
torchvision.transforms.RandomChoice(transforms)
6-3 乱序transforms
将 transforms 中的操作随机打乱
torchvision.transforms.RandomOrder(transforms)
- 对asp.net响应事件的试验
- 为服务器控件加入客户端事件处理的几种方法
- 温故而知新:Delegate,Action,Func,匿名方法,匿名委托,事件
- 如何在Silverlight4中使用摄像头
- Flask的集中控制
- 64位IIS(IIS6/IIS7)上跑Asp + Jet.Oledb的设置要点
- windows 2003 32位系统能支持的最大内存数
- .Net Core内存回收模式及性能测试对比
- silverlight中顺序/倒序异步加载多张图片
- MySQL数据库性能优化之三
- 谁说 Java 要过时?2017年Java 大事件一览及未来前瞻
- mongodb的用法
- silverlight中如何将string(字符串)写入Resource(资源)?
- Python练习环境搭建-引入预定义数据
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 2019 ICPC 南京网络赛 H-Holy Grail
- 写代码?程序猿?你不能不懂的八大排序算法的Python实现
- Java开发编程规范:5.集合处理
- codeforce 272E Dima and Horses (假DFS)
- 网速慢?NO可能是路由器的原因?
- codeforce 272B Dima and Sequence
- 微软自家的.Net下的JavaScript引擎--- ClearScript
- HDU 1159.Common Subsequence【动态规划DP】
- Codeforce 270D Greenhouse Effect
- 地表最简单安装MySQL及配置的方法,没有之一
- HDOJ 1176 免费馅饼 -- 动态规划
- flex-grow计算公式
- Cypress系列(67)- 环境变量设置指南
- codeforce 270C Magical Boxes
- Java开发编程规范: 4.OOP 规约