深度学习——图像增广

图像增广

图像增广是对训练图像做一系列随机改变,来产生相似但又不同的训练样本,从而扩大训练数据集的规模。我们深知大型数据集是成功应用深度神经网络的先决条件。应用图像增广能够随机改变训练样本可以减小模型对某些属性的依赖,从而提高模型的泛化能力。例如我们可以对一张图片实现裁剪、调整亮度、颜色等等。

常用的图像增广方法

先导入相关得包和图片

%matplotlib inline
import torch
import torchvision
from torch import nn
from d2l import torch as d2l
import os
os.environ["CUDA_VISIBLE_DEVICES"] = "0"
#设置matplotlab的图表大小
d2l.set_figsize()
#打开图片
img=d2l.Image.open('./小兔.jpg')
#显示图片
d2l.plt.imshow(img)

在这里插入图片描述
为了并于观察图像增广得效果,我们定义一个辅助函数apply。

def apply(img,aug,num_rows=2,num_cols=4,scale=1.5):
    Y=[aug(img) for _ in range(num_rows*num_cols)]
    d2l.show_images(Y,num_rows,num_cols,scale=scale)

翻转

1.torchvision.transforms.RandomHorizontalFlip( p )
给定的概率随机水平翻转给定的图像,默认p为0.5

apply(img,torchvision.transforms.RandomHorizontalFlip())

在这里插入图片描述
2.torchvision.transforms.RandomVerticalFlip( p )
给定的概率随机垂直翻转给定的图像,默认p为0.5

apply(img,torchvision.transforms.RandomVerticalFlip())

在这里插入图片描述

裁剪

1.torchvision.transforms.CenterCrop(size)
根据给定的size在中心裁剪图像。

apply(img,torchvision.transforms.CenterCrop(2000))

在这里插入图片描述
2.torchvision.transforms.RandomCrop(size)
根据给定的size随机裁剪图像。

apply(img,torchvision.transforms.RandomCrop(2000))

在这里插入图片描述
3.torchvision.transforms.FiveCrop(size)
根据给定的size对图片进行上下左右以及中心裁剪,获得5张图片。

4.torchvision.transforms.RandomResizedCrop(size,scale,ratio)
随机长宽比裁剪。参数:
**size:**随机裁减后图片尺寸
**scale:**随机裁剪后图片的大小为原来图片的倍数
**ratio:**随机裁剪后图片的宽高比

apply(img,torchvision.transforms.RandomResizedCrop(1000,scale=(0.1,1),ratio=(0.5,2)))

在这里插入图片描述

5.torchvision.transforms.TenCrop(size, vertical_flip=False)
上下左右中心裁剪后翻转.对图片进行上下左右以及中心裁剪,然后全部翻转(水平或者垂直),获得 10 张图片。

图像变换

1.torchvision.transforms.Normalize(mean, std)
对数据按通道进行标准化,即先减均值,再除以标准差。

2.torchvision.transforms.ToTensor()
将 PIL Image 或者 ndarray 转换为 tensor,并且归一化至[0,1]。

3.torchvision.transforms.Pad(padding, fill=0, padding_mode=‘constant’)
对图像进行填充
padding:(sequence or int, optional),此参数是设置填充多少个pixel。当为 int 时,图像上下左右均填充 int 个。
padding_mode:填充模式,有4种模式,constant、edge、reflect和symmetric
**fill:**设置填充的像素值(R, G, B)或GRAY。

4.torchvision.transforms.ColorJitter(brightness=0, contrast=0, saturation=0,hue=0)
修改修改亮度、对比度、饱和度和色度
**brightness:**亮度调整因子当为a时,从[max(0, 1-a), 1+a]中随机选择当为(a, b)时,从[a, b]中随机选择
**contrast:**对比度参数,同brightness
**saturation:**饱和度参数,同brightness
**hue:**色度参数
当为a时,从[-a, a]中选择参数(0≤ a≤0.5)
当为(a, b)时,从[a, b]中选择参数(0≤ a≤0.5,0≤ b≤0.5)

5.torchvision.transforms.Grayscale(num_output_channels=1)
将图片转换为灰度图

6.torchvision.transforms.ToPILImage(mode=None)
将 tensor 或者 ndarray 的数据转换为 PIL Image 类型数据
mode=None为1通道; mode=3 通道转换为 RGB.

7.torchvision.transforms.RandomErasing(p=0.5, scale=(0.02, 0.33), ratio=(0.3, 3.3), value=0, inplace=False)
**p:**概率值,执行改操作的概率
**scale:**遮挡区域的面积
**ratio:**遮挡区域长宽比
**value:**设置遮挡区域的像素值,(R,G,B)或 (Gray)

结合多种图像增广方法

通常在实战中我们一般会使用多种图像增广方法,在这里我们使用一个Compose实例来实现不同得图像增广方法,并将他们应用到示例。

flip_aug=torchvision.transforms.RandomHorizontalFlip()
color_aug=torchvision.transforms.ColorJitter(brightness=0.5, contrast=0.5, saturation=0.5,hue=0.5)
crop_aug=torchvision.transforms.RandomResizedCrop((200,200),scale=(0.1,1),ratio=(0.5,2))
augs=torchvision.transforms.Compose([flip_aug,color_aug,crop_aug])
apply(img,augs)

在这里插入图片描述
更多得图像增广方法请参考官方链接

  • 4
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小白哒哒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值