一,torchvision:计算机视觉工具包
-
torchvision.transforms:常用的图像预处理方法
-
torchvision.datasets:常用数据集的dataset实现
-
torchvision.model:常用的模型预训练
二,常用图像预处理方法,图像标准化
-
torchvision.Normalize:
- mean:各通道的平均值
- std:各通道的标准差
- inplace:是否原地操作
- out = (input -mean)/std
transforms.Normalize(norm_mean, norm_std)
三,图像数据增强方法
1.裁剪
transforms.CenterCrop(size):中心裁剪
transforms.CenterCrop(512),
![第六讲,计算机视觉包torchvision和图像的数据增强方法_第1张图片](http://img.e-com-net.com/image/info8/ea0bac05107a49c0a3888bbf3245637e.jpg)
transforms.RandomCrop(size, padding, pad_if_need, pading_mode,fill):随机裁剪
- 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:镜像填充,最后一个像素不镜像
- symmetric:镜像填充,最后一个像素镜像
- fill:设置填充颜色
transforms.RandomCrop(224, padding=64, padding_mode='reflect')
![第六讲,计算机视觉包torchvision和图像的数据增强方法_第2张图片](http://img.e-com-net.com/image/info8/ccf68a895fa54502bf1d10ce9b37d09f.jpg)
RandomResizedCrop(size, scale,ratio, interpolation):随机大小长宽裁剪
- size:尺寸
- scale:裁剪面积比,默认【0.8—1】
- ratio:随机裁剪长宽比,默认【3/4—4/3】
- interpolation:插值方法
- PIL.Image.NEAREST:最近邻插值
- PIL.Image.BILNEAR:双线性插值
- PIL.Image.BICUBIC:***
transforms.RandomResizedCrop(size=224, scale=(0.5, 0.5))
![第六讲,计算机视觉包torchvision和图像的数据增强方法_第3张图片](http://img.e-com-net.com/image/info8/a7c56a4223474e74ac91b3e07e433f32.jpg)
FiveCrop/TenCrop:在图像的上下左右,裁剪出尺寸为size的5张图片/对上述5张图片在进行水平或者垂直镜像从而获得10张图片
- size:尺寸
- vertical_flip:是否垂直翻转,设置了就做垂直镜像,不设置就做水平镜像。
2.翻转
RamdomHorizortalFlip/RamdomVerticalFlip:依概率进行水平/上下翻转
transforms.RandomVerticalFlip(p=0.5)
![第六讲,计算机视觉包torchvision和图像的数据增强方法_第4张图片](http://img.e-com-net.com/image/info8/ea4c721501124c3eb826b21b8b5e9c4a.jpg)
3.旋转
RandomRotation:随机旋转
- degress:旋转角度
- a时:旋转角度【-a—a】
- (a, b)时:旋转角度【a—b】
- resample:重采样方法
- expand:是否扩大图片,以保持原图信息
- center:设置旋转中心
transforms.RandomRotation(30, center=(0, 0), expand=True)
![第六讲,计算机视觉包torchvision和图像的数据增强方法_第5张图片](http://img.e-com-net.com/image/info8/330c9bdfb07a4e72a714beec8e93007d.jpg)
4.填充
transforms.Pad:
- padding:填充大小
- a时:上下左右填充a个像素
- (a, b)时:上下填充b, 左右填充a
- (a, b, c, d)时:左a, 上b, 右c,下d
- padding_mode:填充模式
- constant:由fill指定填充颜色
- edge:由图像边缘像素决定填充颜色
- reflect:镜像填充,最后一个像素不镜像
- symmetric:镜像填充,最后一个像素镜像
- fill:设置填充颜色
transforms.Pad(padding=(8, 16, 32, 64), fill=(255, 0, 0), padding_mode='symmetric')
![第六讲,计算机视觉包torchvision和图像的数据增强方法_第6张图片](http://img.e-com-net.com/image/info8/0a049139e74d47fa94b778f5604d850e.jpg)
5.调整亮度,对比度,饱和度和色相
transforms.ColorJitter
- brightness:设置亮度调整因子
- a时:从【max(0, 1-a)—1+a】中选一个数
- (a, b)时:从【a—b】中选一个数
- contrast:设置对比度参数
- a时:从【max(0, 1-a)—1+a】中选一个数
- (a, b)时:从【a—b】中选一个数
- saturation:饱和度参数
- a时:从【max(0, 1-a)—1+a】中选一个数
- (a, b)时:从【a—b】中选一个数
- hue:色相参数
- a时:【-a—a】中选一个,a大于等于0小于等于0.5
- (a, b)时:【a—b】中选一个,a小于等于b小于等于0.5大于等于0
transforms.ColorJitter(hue=0.3)
![第六讲,计算机视觉包torchvision和图像的数据增强方法_第7张图片](http://img.e-com-net.com/image/info8/e1ac827c61c14580ab21fc572391ad97.jpg)
6.彩色图转换为灰度图
Grayscale/RandomGrayscale
- num_output_channels:输出通道数,1–灰度,3–彩色
- p:被转换为灰度图的概率
transforms.Grayscale(num_output_channels=3)
![第六讲,计算机视觉包torchvision和图像的数据增强方法_第8张图片](http://img.e-com-net.com/image/info8/3f6352b5120b4c7c94dadf4c607d6d87.jpg)
7.仿射变换,二维的线性变换,旋转,平移,缩放,错切,翻转
RandomAffine
- degress:旋转角度
- translate:平移区间设置,(a, b)–》宽, 高 —小于1
- scale:缩放比例—》【0—1】
- fill_color:填充颜色设置
- sheer:错切角度,有水平与垂直
- a时:在x轴上错切,角度在【-a—a】
- (a, b)时:a为x轴错切角度设置,b为y轴错切角度设置
- (a, b, c, d)时:x轴【a—b】,y轴【c—d】
- resample:重采样方法
- PIL.Image.NEAREST:最近邻插值
- PIL.Image.BILNEAR:双线性插值
- PIL.Image.BICUBIC:***
transforms.RandomAffine(degrees=0, shear=90, fillcolor=(255, 0, 0))
![第六讲,计算机视觉包torchvision和图像的数据增强方法_第9张图片](http://img.e-com-net.com/image/info8/faf38869af6343e8b2ab2bf952f16866.jpg)
8.随机遮挡
RandomErasing
- p:遮挡概率
- scale:遮挡面积比例
- ratio:遮挡区域长宽比
- value:设置遮挡区域的像素值
transforms.ToTensor(),
transforms.RandomErasing(p=1, scale=(0.02, 0.33), ratio=(0.3, 3.3), value=(254/255, 0, 0))
![第六讲,计算机视觉包torchvision和图像的数据增强方法_第10张图片](http://img.e-com-net.com/image/info8/3a58665ed3bc4cb09a995c1f1aa4963d.jpg)
9.图像增强方法的选择策略
transforms.RandomChoice([tran1, tran2, tran3]):从一组transforms中选择一个
transforms.RandomApply([tran1, tran2], p=0.5):依据一定概率对一组图像处理方法进行选择
transforms.RandomOrder([tran1,tran2]):对一组图像处理方法进行打乱顺序,然后安装打乱的顺序对图像进行处理
transforms.RandomChoice([transforms.RandomVerticalFlip(p=1), transforms.RandomHorizontalFlip(p=1)]),
transforms.RandomApply([transforms.RandomAffine(degrees=0, shear=45, fillcolor=(255, 0, 0)),
transforms.Grayscale(num_output_channels=3)], p=0.5),
transforms.RandomOrder([transforms.RandomRotation(15),
transforms.Pad(padding=32),
transforms.RandomAffine(degrees=0, translate=(0.01, 0.1), scale=(0.9, 1.1))]),