PyTorch学习笔记:Torchvision数据增强

I 前言

训练一个优秀的神经网络需要上万的图片数据,而当自己目前的数据集数据不足时(只有几百张图片数据),可以使用数据增强(Data Augmentation)方法来扩充自己的图片数据集。Trochvision是PyTorch框架下的一个图像处理库,其中torchvision.transforms包中的函数可以对数据集中的图片进行处理,以实现数据增强的效果.

II Anaconda环境下安装

https://blog.csdn.net/weixin_41978493/article/details/107126333.

III 函数用法

1 transform函数组合法

1.1 将多个transform组合使用
transforms.Compose(transforms.Func)
  • Compose函数的参数可以放入多个transform函数,对原始图像按顺序进行处理.
1.2 随机选择一个transform进行使用
transforms.RandomChoice(transforms.Func)
1.3 选择一个transform按概率进行使用
transforms.RandomApply(transforms, p=0.5)
1.4 将内部的transform打乱使用
transforms.RandomOrder(transforms)

2 Tensor、PILImage、ndarray三者之间的转换

2.1 转换为Tensor
transform.ToTensor()(img/ndarray)
  • 函数介绍:将一个三通道取值范围为[0,255]的PIL.Image或维度为(H,W,C)的numpy.ndarray转换成维度为[C,H,W],且三通道取值范围为[0,1]的Tensor.
2.2 转换为PIL.Image
transforms.ToPILImage()(ndarray/tensor.float())
  • 函数介绍:将numpy.ndarrayTensor转换成PIL.Image.
  • 转换要求:ndarray的dtype=uint8,数据的维度为(H,W,C),且取值范围为[0,255];Tensor只能为FloatTensor,且维度为(C,H,W).

3. 对Tensor进行归一化

transforms.Normalize(mean, std)
  • 函数介绍:对Tensor进行归一化,常与transform.ToTensor()结合使用。将三通道的数值先归一化到[0,1],再归一化至[-1,1].
  • 参数:
    mean - (R,G,B)三通道的的均值.
    std - (R,G,B)三通道的的方差.

4. 两个翻转一个旋转

4.1 随机水平翻转
transforms.RandomHorizontalFlip(p)
  • 函数介绍:随机地对图片进行水平翻转,每张图片被翻转的概率为p.
4.2 随机竖直翻转
transforms.RandomVerticalFlip(p)
  • 函数介绍:随机地对图片进行竖直翻转,每张图片被翻转的概率为p.
4.3 随机旋转
transforms.RandomRotation(degree,resample,expand,center)
  • 函数介绍:对图片进行旋转一定的角度.
  • 参数:
    degree - 旋转的角度;
    resample - 是否重新采样,若为False则不重新采样;
    expand - 是否不要旋转后超出边界部分的图像区域,若为False则丢弃;
    center - 围绕中心点或左上角旋转;

5. 五个裁剪

5.1 固定裁剪
transforms.CenterCrop(size)
  • 函数介绍:对图片从中心点开始按给定的size进行裁剪.
  • 参数:
    size - sequence类型或int类型,前者输入(H,W),后者输入(size,size);
5.2 随机裁剪
transforms.RandomCrop(size, padding, pad_if_needed, fill, padding_mode)
  • 函数介绍:对图片随机地按给定的size进行裁剪.
  • 参数:
    size - sequence类型或int类型,前者输入size=(H,W),后者输入size=(size,size)
    padding - int类型padding=m时,图像的四周均填充m个pixel;sequence类型padding=(a,b)时,于图像左右填充a个pixel,于图像上下填充b个pixel;
    fill - 当padding_mode=constant时,int类型fill=n时,三通道均根据padding类型填充n;tuple类型fill=(p,q,r)时,分别在三通道按类型填充p、q、r
    padding_mode - 填充模式,padding_mode=constant常数;padding_mode=reflectpadding_mode=symmetricpadding_modeedge按边缘的pixel进行填充.
5.3 十倍裁剪
transforms.TenCrop(size, vertical_flip)
  • 函数介绍:上下左右中心五个位置裁剪后进行水平、竖直翻转,从而一张原图得到十张处理后的图片,返回值为4维的Tensor.
  • 参数:
    size - sequence类型或int类型,前者输入size=(H,W),后者输入size=(size,size)
    vertical_flip - 是否竖直翻转/水平翻转,若vertical_flip=False则水平翻转;
5.4 五倍裁剪
transforms.FiveCrop(size)
  • 函数介绍:上下左右中心五个位置裁剪后得到五张处理后的图片(不翻转),返回值为4维的Tensor.
  • 参数:
    size - sequence类型或int类型,前者输入size=(H,W),后者输入size=(size,size)
5.5 随机裁剪
transforms.RandomResizedCrop(size, scale, ratio, interpolation)
  • 函数介绍:将图片随机地进行裁剪,然后将图片的大小调整至设定好的size.
  • 参数:
    size - 返回图片的大小(分辨率);
    scale - 随机裁剪后的图片与原图片的面积比范围,若scale=(a,b)则裁剪后结果与原图的比例为a到b之间;
    ratio - 随机裁剪的长宽比;
    interpolation - 在将裁剪后的图片调整至size后,进行插值的值,若interpolation=c则插入c,插值方式默认为双线性插值.

6. 七个变换

6.1 填充
transforms.Pad(padding, fill, padding_mode)
  • 函数介绍:对图片进行填充.
  • 参数:
    padding - int类型padding=m时,图像的四周均填充m个pixel;sequence类型padding=(a,b)时,于图像左右填充a个pixel,于图像上下填充b个pixel;
    fill - 当padding_mode=constant时,int类型fill=n时,三通道均根据padding类型填充n;tuple类型fill=(p,q,r)时,分别在三通道按类型填充p、q、r
    padding_mode - 填充模式,padding_mode=constant常数;padding_mode=reflectpadding_mode=symmetricpadding_modeedge按边缘的pixel进行填充.
6.2 调整大小
transforms.Resize(size, interpolation)
  • 函数介绍:将图片的大小调整至设定好的size.
  • 参数:
    size - 返回图片的大小(分辨率);
    interpolation - 在将裁剪后的图片调整至size后,进行插值的值,若interpolation=a则插入a,插值方式默认为双线性插值.
6.3 灰度变换
transforms.Grayscale(num_output_channels)
  • 函数介绍:将图片转换为灰度图.
  • 参数:
    num_output_channels - 若num_output_channels=1则转换为单通道灰度图,若num_output_channels=3则返回三通道图像,且三通道数值相等;
6.4 概率灰度变换
transforms.RandomGrayscale(p)
  • 函数介绍:按概率将图片转换为灰度图.
  • 参数:
    p - 转换的概率;
6.5 亮度、对比度、饱和度、色调变换
transforms.ColorJitter(brightness, contrast, saturation, hue)
  • 函数介绍:修改输入图像的亮度、对比度、饱和度、色调.
  • 参数:
    brightness - float类型,给定一个brightness=float,生成亮度改变范围[max(0,1-brightness),1+brightness],下同;
    contrast - float类型,对比度改变范围;
    saturation - float类型,饱和度改变范围;
    hue - [0,0.5]范围内的float类型,色调改变范围[-hue,hue]
6.6 线性变换
transforms.LinearTransformation(transformation_matrix)
  • 函数介绍:首先将原图像Flatten为向量,后逐元素与计算出来的向量元素平均值相减,并与transformation_matrix计算点积,最后将大小调整至与输入相等.
  • 参数:
    transformation_matrix - Tensor类型,维度为[C*H*W,C*H*W]
6.7 仿射变换
transforms.RandomAffine(degrees, translate, scale, shear, resample, fillcolor) 
  • 函数介绍:对图像进行仿射变换处理.
  • 参数:
    degrees - 旋转的度数范围,sequence、int、float类型皆可,若为sequence类型degrees=(a,b)则度数范围为(a,b);若为int或float类型degrees=c则度数范围为(-c,c);
    translate - 随机采样平移的范围,元组类型translate=(a,b)则首先在[-Wa,Wa]的范围内随机采样水平平移,然后在[-Wb,Wb]的范围内随机采样竖直平移;
    scale - 元组类型scale=(a,b)随机从该范围抽取一个数(比例)进行缩放,然后采样;
    shear - sequence、int、float类型皆可,若为sequence类型degrees=(a,b)则范围为(a,b);若为int或float类型degrees=c则范围为(-c,c);
    resample - 重采样滤波器,resample=PIL.Image.NEAREST/PIL.Image.BILINEAR/PIL.Image.BICUBIC
    fillcolor - 变换后图像边缘区域所填充的颜色,int类型
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值