数据增强2

Transform的剩余方法

2020.7.6修改,补全了对应的测试代码

  1. Pad
    对图片进行填充
    transform.Pad(padding, fill=0, padding_mode='contant')
  • padding设置填充大小
    参数三种方式(a),(a,b),(a,b,c,d)分别为四面,上下和左右,以及上下左右
  • padding)mode:填充模式,有四种,constant,edge,reflect和symmetric
  • fill:Contant时,设置填充的像素值(R,G,B)or(Gray)
import torch
import torchvision
from torchvision.transforms import Compose, ToTensor, Pad, ColorJitter, RandomAffine, RandomErasing
from PIL import Image
import matplotlib.pyplot as plt
import numpy as np

unloader = torchvision.transforms.ToPILImage()

transforms1 = Compose([Pad(100, fill=(0, 0, 0)),
                      ToTensor()])

transforms2 = Compose([Pad((100,50), fill=(0, 0, 0)),
                      ToTensor()])

transforms3 = Compose([Pad((100,200,300,50), fill=(0, 255, 0)),
                      ToTensor()])

image = Image.open("lena.png").convert("RGB")

plt.subplot(2,2,1)
plt.imshow(image)
plt.subplot(2,2,2)
img=transforms1(image)
img=unloader(img)
plt.grid()
plt.imshow(img)
plt.subplot(2,2,3)
img=transforms2(image)
img=unloader(img)
plt.grid()
plt.imshow(img)
plt.subplot(2,2,4)
img=transforms3(image)
img=np.transpose(img.numpy(),(1,2,0))
plt.imshow(img)
plt.grid()
plt.savefig("out.png",dpi=300)
plt.show()

在这里插入图片描述

2.ColorJitter
调整亮度、对比度、饱和度和色相

transforms.ColorJitter(brightness=0,contrast=0,saturation=0,hue=0)
  • brightness:亮度调整因子
    当为a时,从[max(0,1-a),a+1]中随机选择,当为(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

import torch
from torchvision.utils import make_grid
import torchvision
from torchvision.transforms import Compose, ToTensor, Pad, ColorJitter, RandomAffine, RandomErasing
from PIL import Image
import matplotlib.pyplot as plt
import numpy as np

unloader = torchvision.transforms.ToPILImage()
tensor = ToTensor()
transforms = Compose([ColorJitter(brightness=0.8),
                      ToTensor()])
transforms1=Compose([ColorJitter(contrast=0.8),
                     ToTensor()])
transforms2=Compose([ColorJitter(saturation=0.8),
                     ToTensor()])
transforms3=Compose([ColorJitter(hue=0.4),
                     ToTensor()])
transforms4=Compose([ColorJitter(brightness=0.8,saturation=0.8,contrast=0.8,hue=0.4),
                     ToTensor()])
image = Image.open("lena.png").convert("RGB")
img = tensor(image)
imgs=list()
imgs1=list()
imgs2=list()
imgs3=[]
imgs4=[]
for i in range(9):
    imgT = transforms(image)
    imgT1 = transforms1(image)
    imgT2 = transforms2(image)
    imgT3 = transforms3(image)
    imgT4 = transforms4(image)
    imgs.append(imgT)
    imgs1.append(imgT1)
    imgs2.append(imgT2)
    imgs3.append(imgT3)
    imgs4.append(imgT4)
img=torch.stack(imgs,dim=0)
img = make_grid(img, nrow=3,padding=5,normalize=True,scale_each=True)
img = unloader(img)
plt.imshow(img)
plt.show()

img=torch.stack(imgs1,dim=0)
img = make_grid(img, nrow=3,padding=5,normalize=True,scale_each=True)
img = unloader(img)
plt.imshow(img)
plt.show()

img=torch.stack(imgs2,dim=0)
img = make_grid(img, nrow=3,padding=5,normalize=True,scale_each=True)
img = unloader(img)
plt.imshow(img)
plt.show()

img=torch.stack(imgs3,dim=0)
img = make_grid(img, nrow=3,padding=5,normalize=True,scale_each=True)
img = unloader(img)
plt.imshow(img)
plt.show()

img=torch.stack(imgs4,dim=0)
img = make_grid(img, nrow=3,padding=5,normalize=True,scale_each=True)
img = unloader(img)
plt.imshow(img)
plt.show()

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
3.Grayscalea和RandomGrayscale
依据概率把图片转变成灰度图

  • num_output_channels 输出的通道数
  • p:转换的概率
import torch
from torchvision.utils import make_grid
import torchvision
from torchvision.transforms import Compose, ToTensor, Pad, ColorJitter,RandomGrayscale, Grayscale,RandomAffine, RandomErasing
from PIL import Image
import matplotlib.pyplot as plt
import numpy as np

unloader = torchvision.transforms.ToPILImage()
tensor = ToTensor()
transforms = Compose([Grayscale(num_output_channels=3),
                      ToTensor()])

transforms1=Compose([RandomGrayscale(p=0.4),
                     ToTensor()])
image=Image.open('lena.png').convert('RGB')
imgs=[]
for i in range(4):
    if i==0:
        img=transforms(image)
        imgs.append(img)

    else:
        imgs.append(transforms1(image))
out=torch.stack(imgs)
out_img=make_grid(out,nrow=2,normalize=True,scale_each=True)
out_img=np.transpose(out_img.numpy(),(1,2,0))
plt.imshow(out_img)
plt.show()

在这里插入图片描述

4.RandomAffine
对图像进行仿射变换,仿射变换是二维的线性变换,由五种基本原子变换构成,分别是旋转、平移、缩放、错切和翻转

  • degrees:旋转角度设置
  • translate:平移区间设置,如(a,b),a设置宽(width),b设置高(height)所图像在宽纬度平移的区间为-img_widtha<dx<img_widtha
  • scale:缩放比例(以面积为单位)
  • fill_color:填充颜色设置
  • shear:错切角度设置,有水平错切和垂直错切,若为a,则仅在x轴错切,错切角度在(-a,a)之间,若为(a,b)则a设置x轴角度,b设置为y轴角度,若为(a,b,c,d)则a,b,设置为x角度,cd设置为y轴角度
  • resample:重采样方法,有NEAREST,BILINEAR,BICUBIC三种模式

5.RandomErasing
在这里插入图片描述
对图片随机遮挡

  • p:概率值,执行该操作的概率
  • scale:遮挡区域的面积
  • ratio遮挡区域的长宽比
  • 设置遮挡区域的像素值,(RGB)or(GRAY)
    在这里插入图片描述
    此操作需要在张量前提下进行操作
transforms.ToTensor()
transforms.RandomErasing(p=1,scale=(0.02,0.33),ratio=(0.3,3.3),value=(254,255,0,0))

6.lambda
用户自定义lambda方法

transforms.TenCrop(200,vertical_flip=True)
transforms.Lambda(lambda crops:torch.stack([transforms.ToTensor()(crop) for crop in crops]))

对Transforms的选择化操作

在这里插入图片描述

自定义transforms方法

定义的要素:

  • 仅接受一个参数,返回一个参数
  • 注意上下游的输入与输出
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值