0、制作网格图像(多张图组成一张网格)
# tensor:图像数据,BatchSize图片数*C通道数*H高*W宽
# nrow:行数(列数自动计算)
# padding:图像间距(像素单位)
# normalize:是否将像素值标准化,默认False(默认数据[0,255]),但如果数据[0,1]可设置为True
# range:标准化范围(在意的像素值区间:若像素值[-1000,2000],设置[-600,600],则小于-600的设置为-600,大于600的设置为600)
# scale_each:是否单张图维度标准化
# pad_value:padding的像素值
torchvision.utils.make_grid(tensor,nrow=8,padding=2,normalize=False,range=None,scale_each=False,pad_value=0)
一、常用图像预处理方法
# torchvision.transforms
# 接受一个参数,返回一个处理后的参数
train_transform(img)
train_transform = transforms.Compose([
transforms.Resize((32,32)), # 缩放
transforms.RandomCrop(32, padding=4), # 裁剪,属于数据(扩增)增强,在训练时使用、测试时不用
transforms.ToTensor(), # 图片转为张量,同时归一化像素值从[0,255]到[0,1]
transforms.Normalize(norm_mean,norm_std),
])
1.1 裁剪
1.1.1 从图片随机位置裁剪
# 举例:默认填充黑色0
transforms.RandomCrop(100,padding=3)
transforms.RandomCrop(size,padding=None,
pad_if_need=False,padding_mode='constant',fill=0)
size:裁剪尺寸
padding:填充大小
'''当为a时,上下左右均填充a个像素
当为(a,b)时,上下填b个像素,左右填a
当为(a,b,c,d)时,左、上、右、下分别填充a、b、c、d'''
pad_if_need:若图片小于设定size,则填充后裁剪
padding_mode:填充模式
'''
constant:像素值由fill设定
edge:由图片边缘像素值决定
reflect:镜像填充,最后一个像素不镜像
eg:对[1,2,3,4]填充:[3,2, 1,2,3,4, 3,2]
symmetric:镜像填充,最后一个像素镜像
eg:对[1,2,3,4]填充:[2,1, 1,2,3,4, 4,3]
'''
fill:constant时,设置填充的像素值,(R,G,B)或(Gray)
1.1.2 从图片中心裁剪图片,裁剪100*100
transforms.CenterCrop(100)
1.1.3 随机大小、长宽比裁剪
transforms.RandomResizedCrop(size,
scale=(0.08,1.0),ratio=(3/4,4/3),
interpolation)
# 参数介绍
size:裁剪尺寸(必要参数)
scale:随机裁剪面积比例,默认随机取 0.08 到 1.0之间
ratio:随机长宽比,默认随机取 3/4到 4/3之间
# 若裁剪后尺寸小于size,则要插值
interpolation:插值方法(非必要参数)
1.1.4 在上下左右及中间裁剪尺寸为size的五张图
transforms.FiveCrop(size)
1.1.5 对这五张图进行水平或垂直镜像获得10张图
# vertical_flip:是否垂直翻转
transforms.TenCrop(size,vertical_flip=false)
1.2 翻转
1.2.1 水平翻转
# 翻转概率p
transforms.RandomHorizontalFlip(p=0.5)
1.2.2 垂直翻转
transforms.RandomVerticalFlip(p=0.5)
1.3 旋转
1.3.1 随机旋转
# resample:重采样方法,采用默认即可
# expand:是否扩大图片以保证原图信息
# center:旋转点设置,默认None为中心旋转,(0,0)表示左上角旋转
# degrees
##当为a时,在(-a,a)之间选择旋转角度
##当为(a,b)时,在(a,b)之间选择旋转角度
transforms.RandomRotation(degrees,resample=False,expand=False,center=None)
1.4 对图片边缘进行填充
# 参数参考1.1.1
transforms.Pad(padding,fill=0,padding_mode='constant')
1.5 调整亮度、对比度、饱和度色相
# brightness:亮度调整因子
'''
当为a时,从[max(0,1-a),1+a]中随机选择
当为(a,b)时,从[a,b]中随机选择
'''
# contrast:对比度参数,同brightness
# saturation:饱和度参数,同brightness
# hue:色相参数
'''
当为a时,从[-a,a]中选择参数,注0<=a<=0.5
当为(a,b)时,从[a,b]中选择参数,注-0.5<=a<=b<=0.5
'''
transforms.ColorJitter(brightness=0,contrast=0,saturation=0,hue=0)
1.6 转为灰度图
# num_output_channels:只能设1或3,表示输出的通道数
transforms.Grayscale(num_output_channels)
1.7 依概率将图片转换为灰度图
# p:图像被转换为灰度值的概率
transforms.RandomGrayscale(num_output_channels,p=0.1)
1.8 仿射变换(旋转、平移、缩放、翻转)
# degrees:旋转角度设置(必要参数)
# translate:平移区间设置,如(a,b),a设置宽、b设置高
# scale:范围(0,1),缩放比例(以面积为单位)
# shear:错切角度设置,有水平错切和垂直错切
'''
若为a,则仅在x轴错切,错切角度在(-a,a)之间
若为(a,b),则a设置x轴角度,b设置y角度
若为(a,b,c,d),则a,b设置x轴角度;c,d设置y角度
'''
# fillcolor:填充的颜色设置,默认黑色0
transforms.RandomAffine(degrees,translate=None,scale=None,shear=None,resample=False,fillcolor=0)
1.9 随机遮挡
# p:执行此操作的概率
# scale:遮挡区域的面积
# ration:遮挡区域的长宽比
# value:设置遮挡区域的像素值,如(R,G,B)或(Gray)
transforms.RandomErasing(p=0.5,scale=(0.02,0.33),ratio=(0.3,3.3),value=0,inplace=False)
2.0 随机选择变换
2.0.1 从一系列transforms方法中随机挑选一个
transforms.RandomChoice([transforms1,transforms2,transforms3])
2.0.2 依据概率执行transforms操作(执行/不执行)
transforms.RandomApply(p=0.5,[transforms1,transforms2,transforms3])
2.0.3 打乱transforms操作顺序
transforms.RandomOrder([transforms1,transforms2,transforms3])
2.1 椒盐噪声
# 白点称为盐噪声,黑点称为椒噪声
# 信噪比:衡量噪声的比例,图像中为图像像素的占比,越小对应噪声越大(像素越少)
'''
数据中心化
数据标准化
缩放Resize
噪声添加
线性变换
'''
二、常用的模型预训练:AlexNet/VGG/ResNet/GoogLeNet等
# torchvision.model
三、常用数据集的dataset实现:MNIST/CIFAR-10/ImageNet等
# torchvision.datasets