pytorch学习系列(2):使用torchvision.transforms对图像数据预处理

基本形式

from torchvision import transforms as transforms
transform = transforms.Compose([
	#处理方式
    transforms.ToTensor(),
    transforms.Normalize((0.4914, 0.4822, 0.4465), (0.229, 0.224, 0.225)), #R,G,B每层的归一化用到的均值和方差
])

操作的解释(非全部,只是常用的)

  1. 转化为张量
    torchvision的输出是PILImage图像,所以必须转化为tensor才能在pytorch中使用
  2. 标准化
    输出图像的范围是[0,1],对于使用sigmoid激活函数的网络来说,默认[0,1]范围是可以的,但对于使用tanh或relu激活函数的网络来说,[-1,1]的范围更合适一点,所以通过下面的操作将数据转化为[-1,1]
transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))

具体计算方式是0-0.5/0.5=-1,1-0.5/0.5=1。这两组数据第一个代表三个通道的均值,第二个代表标准差。
如果图像是单通道的,则为

transforms.Normalize((0.5, ), (0.5, ))

值得注意的是,使用0.5作为均值和标准差只是一种通用稳妥的做法,并不一定是最合适的,这与所用数据的真实分布也有关系。对于一些标准数据集,有官方建议的标准化参数,比如MNIST数据集的是(0.1307,), (0.3081,)。Imagenet数据集的参数是([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])。
3. 通道变换
对图像进行通道处理,参数为3时得到彩色图像,参数为1时得到灰度图像

transforms.Grayscale(num_output_channels=1)
  1. 水平翻转
    依照给定的概率对图像进行水平翻转,默认概率为0.5。
transforms.RandomHorizontalFlip(0.3)
  1. 垂直翻转
    依照给定的概率对图像进行垂直翻转,默认概率为0.5。
transforms.RandomVerticalFlip(0.3)

6.按一定长宽比随机裁剪
随机长宽比裁剪图像,再将图像重整为设定好的尺寸
size:最终结果输出的图像尺寸。
scale:裁剪的图像所占的范围,默认为(0.08, 1.0)。
ratio:随机裁剪的长宽比,默认为(0.75, 1.3333333333333333)。
interpolation:重整为size时选择的插值方法,默认为双线性插值。

transforms.RandomResizedCrop(size=256, scale=(0.08, 1.0), ratio=(3./4,4./3), interpolation=2)
  1. 中心裁剪
    按给定的size在图像中心裁剪
transforms.CenterCrop(128)
  1. 随机裁剪
    size:例如(128,256)则裁剪结果为128256,若为128,则裁剪结果为128128。
    padding:图像周围填充多少个像素。padding=2则周围填充2个像素,如果padding=(2,4),则左右填充2个像素,上下填充4个像素,padding=(1,2,3,4),则左上右下分别填充1,2,3,4个像素。
    fill:填充的值是多少,fill=0表示每个通道均填充0,fill=(1,2,3)表示RGB通道分别填充的值是1,2,3。
    padding_mode:填充模式
    padding_mode=‘constant’:填充的是常量,具体为fill参数所规定
    padding_mode=‘edge’:填充的数值与图像边缘完全一样
transforms.RandomCrop(128, padding=1, pad_if_needed=True, fill=0, padding_mode=‘constant’)
  1. 重新设置尺寸
    size为规定的尺寸,interpolation为插值方式,默认为双线性插值。
transforms.Resize(128, interpolation=2)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值