0. 往期内容
[二]深度学习Pytorch-张量的操作:拼接、切分、索引和变换
[七]深度学习Pytorch-DataLoader与Dataset(含人民币二分类实战)
[八]深度学习Pytorch-图像预处理transforms
[九]深度学习Pytorch-transforms图像增强(剪裁、翻转、旋转)
[十]深度学习Pytorch-transforms图像操作及自定义方法
1. 数据增强
2. 剪裁
2.1 transforms.CenterCrop(size)
transforms.CenterCrop(size)
(1)功能:从图像中心裁剪尺寸为size
的图片;
(2)参数:
size:
若为int
,则尺寸为size*size
; 若为(h,w)
,则尺寸为h*w
.
(3)代码示例:
train_transform = transforms.Compose([
transforms.Resize((224, 224)), #图片统一缩放到244*244
# 1 CenterCrop
transforms.CenterCrop(196), # 裁剪为196*196,如果是512的话,超出244的区域填充为黑色
transforms.ToTensor(),
transforms.Normalize(norm_mean, norm_std),
])
2.2 transforms.RandomCrop(size, fill=0, padding_mode=‘constant’)
transforms.RandomCrop(size, padding=None, pad_if_needed=False, fill=0, padding_mode='constant')
(1)功能:对图像随机裁剪出尺寸为size
的图片;
(2)参数:
size:
若为int
,则尺寸为size*size
; 若为(h,w)
,则尺寸为h*w
;
padding:
设置填充大小:
I. 当padding
为a
时,左右上下均填充a
个像素;
II. 当padding
为(a,b)
时,左右填充a
个像素,上下填充b
个像素;
III. 当padding
为(a,b,c,d)
时,左、上、右、下分别填充a、b、c、d
;
pad_if_need:
若设定的size
大于原图像尺寸,则填充;
padding_mode:
填充模式,有4
种模式:
I. constant:
像素值由fill设定;
II. edge:
像素值由图像边缘的像素值决定;
III. reflect:
镜像填充,最后一个像素不镜像,eg. [1,2,3,4] --> [3,2,1,2,3,4,3,2]
;
向左:由于1不会镜像,所以左边镜像2、3
;
向右:由于4不会镜像,所以右边镜像3、2
;
IV. symmetric:
镜像填充,最后一个像素镜像,eg. [1,2,3,4] --> [2,1,1,2,3,4,4,3]
;
向左:1、2镜像
;
向右:4、3镜像
;
fill:
当padding_mode='constant'
时,用于设置填充的像素值;
(3)代码示例:
train_transform = transforms.Compose([
transforms.Resize((224, 224)), #图片统一缩放到244*244
# 2 RandomCrop
transforms.RandomCrop(224, padding=16),
transforms.RandomCrop(224, padding=(16, 64)),
transforms.RandomCrop(224, padding=16, fill=(255, 0, 0)), #fill=(255, 0, 0)RGB颜色
#当size大于图片尺寸,即512大于244,pad_if_needed必须设置为True,否则会报错,其他区域会填充黑色(0,0,0)
transforms.RandomCrop(512, pad_if_needed=True), # pad_if_needed=True
transforms.RandomCrop(224, padding=64, padding_mode='edge'), #边缘
transforms.RandomCrop(224, padding=64, padding_mode='reflect'), #镜像
transforms.RandomCrop(1024, padding=1024, padding_mode='symmetric'), #镜像
transforms.ToTensor(),
transforms.Normalize(norm_mean, norm_std),
])
2.3 transforms.RandomResizedCrop(size, scale=(0.08, 1.0), ratio=(3/4, 4/3), interpolation)
transforms.RandomResizedCrop(size, scale=(0.08, 1.0), ratio=(3