torchvision 是 torch 中计算机视觉库,提供了3种类型的接口,包括 datasets、transforms、model,其中 transforms 封装了各种图像增强的方法
transforms.CenterCrop(size):从图像中心裁剪图片
transforms. RandomCrop:从图像中随机裁剪出指定尺寸的图片
// 当为整型 a 时,表示上下左右填充 a 个像素;
// 当为 (a,b) 时,代表上下填充 b,左右填充 a 个像素;
// 当为 (a,b,c,d) 时,代表 左上右下 填充 abcd 个像素 【顺时针】
1. constant:像素值由 fill 参数指定
2. edge:像素值由图像边缘像素决定
3. reflect:镜像填充,最后一个像素不镜像,如 图像像素为 [1,2,3,4],则镜像填充为 [3,2,1,2,3,4,3,2], 边缘像素 1 4 不镜像
4. symmetric:镜像填充,最后一个像素也镜像,上例镜像填充为 [3,2,1,1,2,3,4,4,3,2]
transforms.RandomSizeCrop:随机大小 长宽比 裁剪图片
transforms.FiveCrop:在图像的四角和中心裁剪出指定尺寸的 5 张图片
transforms.TenCrop:在 FiveCrop 的基础上,并对这 5 张图片进行水平或者垂直翻转,共10张
transforms.RandomRotation:随机旋转图片
transforms.RandomRotation(30, center=(0, 0), expand=True)
transforms.Pad:对图像边缘进行填充
// 当为整型 a 时,表示上下左右填充 a 个像素;
// 当为 (a,b) 时,代表上下填充 b,左右填充 a 个像素;
// 当为 (a,b,c,d) 时,代表 左上右下 填充 abcd 个像素 【顺时针】
transforms.ColorJitter:调整亮度、对比度、饱和度、色相
// 当为 a 时,从 [-a,a] 中选择,注意 -0.5<a<0.5,当为 (a,b) 时,在[a,b] 中选择
transforms.Grayscale:转成灰度图
transforms.RandomGrayscale:以一定概率转成灰度图
transforms.RandomAffine:对图像进行仿射变换,仿射变换是二维的线性变换,由5种基本原子变换构成,包括旋转、平移、缩放、错切、翻转
// 若为 a,仅在 x 轴错切,错切角度在 (-a,a) 之间;
// 若为 (a,b),则 a 代表 x 轴错切角度,b代表 y 轴错切角度;
// 若为 (a,b,c,d),则 ab 设置 x 轴角度,cd 设置 y 轴角度;
transforms.RandomErasing:对图像进行随机遮挡
transforms.RandomErasing(p=0.5, scale=(0.02, 0.33), ratio=(0.3, 3.3))
当 value 取字符串时,采用随机像素进行遮挡
transforms.Lambda:用户自定义图像处理的方法,如 CenterCrop
transforms.RandomChoice:从多个 transforms 方法中随机选一个
transforms.RandomChoice([transforms1, transforms2, transform3])
transforms.RandomApply:依据概率执行一组 transforms 操作
transforms.RandomApply([transforms1, transforms2, transform3], p=0.5)
transforms.RandomOrder:对一组 transforms 操作进行乱序,乱序处理图片
transforms.RandomOrder([transforms1, transforms2, transform3])
transforms.Compose:顺序执行一系列 transforms 操作
transforms.Compose([transforms1, transforms2, transforms3])
transforms.Lambda 是自定义图像处理的方法,如 Resize;
自定义 transforms 是自定义 transforms 系列操作,如 RandomCompose;当然也可以是一个操作;
先看下 pytorch 的 Compose 方法的实现
class Compose(object): def __call__(self, img): for t in self.transforms: img = t(img) return img
类比实现自定义:处理椒盐噪声
椒盐噪声:又称脉冲噪声,是一种随机出现的白点或者黑点,白点称为盐噪声,黑点称为椒噪声
信噪比:Signal-Noise Rate,SNR,衡量噪声的比例,图像的信噪比是图像像素的占比
1. 上述所有方法是一个类,参数都是初始化参数,然后都以对象的形式存在,使用时调用 __call__ 方法处理图片
2. 上述所有方法输入都是图像,输出也是图像
3. 输入网络前要转换成 Tensor
transforms.ToTensor():将 PIL Image 转换成 Tensor 对象,会自动将 [0, 255] 归一化到 [0, 1]
transforms.Normalize:标准化,注意 只有 Tensor 才能标准化,img 不可以,故 Normalize 之前一般都有 ToTensor
使得训练集尽可能接近测试集
例如,我们要区分第四套人民币的 1 元 和 100 元,很容易得到准确率很高的网络;
那么该网络是否能识别第五套人民币的 100 元,测试结果是基本上都是别成了 1 元,因为颜色很像;
假如我们把训练数据进行灰度处理,去掉颜色的影响,重新训练的模型也能准确预测 第五套人民币的 100 元
原文:https://www.cnblogs.com/yanshw/p/12268035.html