pytorch padding_【小白学PyTorch】7 最新版本torchvision.transforms常用API翻译与讲解

机器学习炼丹术】的学习笔记分享 <>

小白学PyTorch | 6 模型的构建访问遍历存储(附代码)

小白学PyTorch | 5 torchvision预训练模型与数据集全览

小白学PyTorch | 4 构建模型三要素与权重初始化

小白学PyTorch | 3 浅谈Dataset和Dataloader

小白学PyTorch | 2 浅谈训练集验证集和测试集

小白学PyTorch | 1 搭建一个超简单的网络

小白学PyTorch | 动态图与静态图的浅显理解

本文共6000字,12张图,建议大家有空的时候随便看看就行。第8课是PyTorch实战内容,更重要。本文有问题或者有疑惑的地方,可以加个人微信进行讨论。近期在个人朋友圈有一次红包抽奖活动,也欢迎参加。

d7aeee8337a91e7c81fd63d7e8477375.png

参考目录:

  • 1 基本函数

    • 1.1 Compose

    • 1.2 RandomChoice

    • 1.3 RandomOrder

  • 2 PIL上的操作

    • 2.1 中心切割CenterCrop

    • 2.2 随机切割RandomCrop

    • 2.3 随机比例切割

    • 2.4 颜色震颤ColorJitter

    • 2.5 随机旋转RandomRotation

    • 2.6 灰度化Grayscale

    • 2.7 size

    • 2.8 概率随机(常用)

  • 3 Tensor上的操作

    • 3.1 标准化Normalize

  • 4 PIL,Tensor转换函数

    • 4.1 ToPILImage

    • 4.2 ToTensor

  • 5 案例代码分析

老样子,先看官方对torchvision.transforms的介绍:2a3fe6266036f83c1ef537bef37bb6c6.png

这个Transforms是常见的图像的转换(包含图像增强等), 然后不同的transforms可以通过Compose函数连接起来(类似于Sequence把网络层连接起来一样的感觉)。后面的是关于图像分割任务了的介绍,因为入门PyTorch主要是图像分类,所以后面先不提了。

1 基本函数

1.1 Compose

【代码】

torchvision.transforms.Compose(transforms)

【介绍】

将不同的transform压缩在一起,这是非常重要的函数

【代码举例】

transforms.Compose([
     transforms.CenterCrop(10),
     transforms.ToTensor(),
 ])

1.2 RandomChoice

【代码】

torchvision.transforms.RandomChoice(transforms)

【介绍】

用法和Compose相同,是在transform的list中随机选择1个transform进行执行。

1.3 RandomOrder

【代码】

torchvision.transforms.RandomOrder(transforms)

【介绍】

用法和Compose相同,是乱序list中的transform。


之前的课程提到了,在torchvision官方的数据集中,提供的数据是PIL格式的数据,然后我们需要转成FloatTensor形式的数据。因此这里图像增强的处理也分成在PIL图片上操作的和在FloatTensor张量上操作的两种


2 PIL上的操作

2.1 中心切割CenterCrop

【代码】

torchvision.transforms.CenterCrop(size)

【介绍】

以PIL图片中心为中心,进行图片切割。比较常用

【参数】size (sequence or int) – 想要切割出多大的图片。如果size是一个整数,那么就切割一个正方形;如果是一个(height,width)的tuple,那么就切割一个长方形。

【代码举例】

transforms.Compose([
     transforms.CenterCrop(10),
     transforms.ToTensor(),
 ])

2.2 随机切割RandomCrop

【代码】

torchvision.transforms.RandomCrop(size, padding=None, pad_if_needed=False, fill=0, padding_mode='constant')

【介绍】

和CenterCrop类似,但是是随机选取中心进行切割的

【参数】

  • size也是可以是int可以是tuple(height,width)
  • padding就是是否对图片进行填充,你可以输入2元组,表示左右填充和上下填充,也可以输入四元组,表示左上右下的填充;
  • pad_if_needed是boolean,一般是True。随机选取如果选取的比较边缘,超出了边界,那么是否进行填充
  • fill (int),你选择填充的是0(黑色),还是255(白色)呢?这个尽在padding_mode='constant'时有效
  • padding_mode表示填充的方法。有四种:'constant', 'edge', 'reflect' or 'symmetric' . 默认是constant常数填充。edge是填充边缘的那个像素值,一般效果比constant强一些,自己做的项目中;reflect和symmetric都是表示以边界为轴进行镜像的填充,区别在于:
    • reflect:[1,2,3,4,5]进行padding=2的时候,那么就是[3,2,1,2,3,4,5,4,3]
    • symmetric:[1,2,3,4,5]进行padding=2的时候,那么就是[2,1,1,2,3,4,5,5,4]
    • 区别是否重复边界的哪一个元素。两种方法差别不大。

2.3 随机比例切割

【代码】

torchvision.transforms.RandomResizedCrop(size, scale=(0.08, 1.0), ratio=(0.75, 1.3333), interpolation=2)

【介绍】

这个比较有意思,随机大小切割图片,然后再resize到设置的size大小。

参数中scale控制切割图片的大小是原图的比例,然后ratio控制切割图片的高宽比(纵横比),默认是从3/4 到 4/3。切割完成后再resize到设置的size大小。这个方法一般用在训练inception网络。

2.4 颜色震颤ColorJitter

【代码】

torchvision.transforms.ColorJitter(brightness=0, contrast=0, saturation=0, hue=0)8f021bee258e2330ce68d53e4fc9d24d.png【介绍】

随机修改亮度brightness,对比度contrast, 饱和度saturation,色相hue

【参数】

  • brightness (float or tuple (min, max)) – 如果输入是一个float,那么建议在选取一个小于1的浮点数。亮度系数会从区间均匀选取,如果我使用这个,我设置brightness是0.1的话,那么这个系数就是之间随机选取。如果输入时一个tuple的话,那么就是在 中选取。

  • contrast (float or tuple (min, max)) – 和上面一样,也是一个系数的选取。

  • saturation (float or tuple (min, max)) – 和上面一样,也是一个系数的选取。

  • hue (float or tuple (min, max)) – hue是色相。这里色相的取值应该小于0.5。如果输入时一个float,那么取值应该,系数在 选取;如果是tuple,那么就是

2.5 随机旋转RandomRotation

【代码】

torchvision.transforms.RandomRotation(degrees, resample=False, expand=False, center=None, fill=None)

【介绍】

就是随机的按照角度宣传图片

【参数】

  • degrees (int or tuple (min,max)) – 老规矩了,整数旋转角度就是[-int,int],tuple就是[min,max]

  • expand (bool, optional) – True就是让扩大图片,让图片可以包括所有内容(图片旋转的话,四个角的信息其实是旋转到了图片的外面,这个是扩大图片的像素尺寸,如果True在后面还要接一个resize的transforms); 默认是False,旋转后的图片和输入图片是同样的尺寸。

  • center (2-tuple, optional) – 可以设置成非图片中心的旋转

  • fill (n-tuple or int or float) – 设置填充像素值的,默认是0,一般也会选取0.

2.6 灰度化Grayscale

【代码】

torchvision.transforms.Grayscale(num_output_channels=1)

【介绍】

这个函数虽然不重要,但是会用的话可以提高变成速度哈哈。就是把图片转换成灰度的。

【参数】

  • num_output_channels (int)  – 正常情况下灰度图片是单通道的,但是这里你可以设置成3,这样的话,会输出3个通道的灰度图片(三个通道的特征值相同),这样的话,你就不用修改torchvision的预训练模型中的输入接口了。(因为之前提到的,预训练模型使用ImageNet训练的,输入都是三通道彩色图)

2.7 size

【代码】

torchvision.transforms.Resize(size, interpolation=2)

【介绍】

把PIL图片resize成指定大小

【参数】

  • size (tuple(height,width) or int) – tuple的话就直接resize成指定大小;int的话,就按照比例,让图片的短边长度变成int大小。
  • interpolation (int, optional) – 插值方法,一般都使用默认的PIL.Image.BILINEAR双重线性插值。

2.8 概率随机(常用)

图像增强有:变成灰度,镜像,翻转,平移,旋转等。

【代码】

# 变成灰度,输入输出通道数默认相同
torchvision.transforms.RandomGrayscale(p=0.1)
# 随机水平翻转
torchvision.transforms.RandomHorizontalFlip(p=0.5)
# 随机竖直翻转
torchvision.transforms.RandomVerticalFlip(p=0.5)

【参数】

  • p:表示执行这个transform的概率

3 Tensor上的操作

3.1 标准化Normalize

【代码】

torchvision.transforms.Normalize(mean, std, inplace=False)

【参数】

  • mean和std都是list,[mean_1,...,mean_n]和[std_1,...,std_n],n为通道数。每一个通道都应该有一个mean和std。计算的方法是,就是常用的那种:

4 PIL,Tensor转换函数

4.1 ToPILImage

torchvision.transforms.ToPILImage(mode=None)

【介绍】

把一个tensor或者np的array转换成PIL。值得注意的是,如果输入时Tensor,那么维度应该是 C x H x W ,如果是numpy的话,是 H x W x C。 (这是一个一般不会出现,但是一旦出现很难想到的问题。)

4.2 ToTensor

torchvision.transforms.ToTensor

【介绍】

把PIL或者numpy转换成Tensor。PIL和Numpy (格式H x W x C,范围[0,255]),转换成Tensor(格式C x H x W,范围[0,1])

5 案例代码分析

from PIL import Image
from torchvision import transforms

def loadImage():
    # 读取图片
    im = Image.open("brunch.jpg")
    im = im.convert("RGB")
    im.show()
    return im
im = loadImage()

图片是我在英国留学的时候,有一道菜叫无花果土司,虽然不好吃但是好看,原图:e2e21c41fe514a87082ab653ca24cfa5.png

#从中心裁剪一个600*600的图像
output = transforms.CenterCrop(600)(im)
output.show()
d653759f20a69f9e3aa38437c99d5423.png
# 从中心裁一个长为600,宽为800的图像
output = transforms.CenterCrop((600,800))(im)
output.show()
86542038f1de5c21a9e2d720a1f99a1a.png
#随机裁剪一个600*600的图像
output = transforms.RandomCrop(600)(im)
output.show()
5263e5f4990a7151792b895a964f1104.png
#随机裁剪一个600*800的图像
output = transforms.RandomCrop((600,800))(im)
output.show()
b9281d512cc679b7423c26328cec0b77.png
#从上、下、左、右、中心各裁一个300*300的图像
outputs = transforms.FiveCrop(300)(im)
outputs[4].show()

类似的图片,就不占用painful了

#p默认为0.5,这里设成1,那么就肯定会水平翻转
output = transforms.RandomHorizontalFlip(p=1.0)(im)
output.show()
b89325c021a10bf4fb26bab451981829.png
output = transforms.RandomVerticalFlip(p=1)(im)
output.show()
939fe77eb2d88e9154829ca401802f4c.png
#在(-30,30)之间选择一个角度进行旋转
output = transforms.RandomRotation(30)(im)
output.show()
0896d9b2330bd254d28d3c4410a8984d.png
#在60-90之间选择一个角度进行旋转
output = transforms.RandomRotation((60,90))(im)
output.show()
dc63f063147b7a3e6e12ea7c7849edd1.png
output = transforms.Resize((400,500))(im)
output.show()

这个图像一样就尺寸变小了,就不放图了。

trans = transforms.Compose([transforms.CenterCrop(300),
                            transforms.RandomRotation(30),
                            ])
output = trans(im)
output.show()
6df434646b87ca92f045fe8a962d0fac.png
- END - <>

小白学论文 | EfficientNet强在哪里

小白学论文 | 神经网络初始化Xavier

小白学论文 | 端侧神经网络GhostNet(2019)

小白学目标检测 | RCNN, SPPNet, Fast, Faster

小白学图像 | BatchNormalization详解与比较

小白学图像 | Group Normalization详解+PyTorch代码

小白学图像 | 八篇经典CNN论文串讲

图像增强 | CLAHE 限制对比度自适应直方图均衡化

小白学卷积 | 深入浅出卷积网络的平移不变性

小白学卷积 | (反)卷积输出尺寸计算

损失函数 | 焦点损失函数 FocalLoss 与 GHM

<>

小白学ML | 随机森林 全解 (全网最全)

小白学SVM | SVM优化推导 + 拉格朗日 + hingeLoss

小白学LGB | LightGBM = GOSS + histogram + EFB

小白学LGB | LightGBM的调参与并行

小白学XGB | XGBoost推导与牛顿法

评价指标 | 详解F1-score与多分类F1

小白学ML | Adaboost及手推算法案例

小白学ML | GBDT梯度提升树

小白学优化 | 最小二乘法与岭回归&Lasso回归

小白学排序 | 十大经典排序算法(动图)

杂谈 | 正态分布为什么如此常见

Adam优化器为什么被人吐槽?

机器学习不得不知道的提升技巧:SWA与pseudo-label

<>

小白面经 | 快手 AI算法岗 附答案解析

小白面经 | 拼多多 AI算法岗 附带解析

【小白面经】八种应对样本不均衡的策略

【小白面经】之防止过拟合的所有方法

【小白面经】梯度消失爆炸及其解决方法

【小白面经】 判别模型&生成模型

<>

【小白健身】徒手健身40个动作(gif)

【小白健身】弹力带轻度健身gif动图

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
torchvision.transforms.v2是一个Python库,它提供了一系列的数据预处理操作,可以用于对图像数据进行处理和转换。其中一些常见的预处理操作包括: 1. transforms.CenterCrop(size):将给定的图像进行中心切割,得到给定的size大小的图像。size可以是一个tuple,表示目标图像的高度和宽度;也可以是一个整数,表示切出来的图像是正方形。 2. transforms.RandomCrop(size, padding=0):随机选取图像的中心点位置进行切割。size可以是一个tuple,也可以是一个整数。 3. transforms.RandomHorizontalFlip():随机水平翻转给定的图像,概率为0.5,即有50%的概率进行翻转。 4. transforms.RandomSizedCrop(size, interpolation=2):先随机切割图像(尺寸不定),然后再将切割后的图像resize成给定的size大小。 5. transforms.Pad(padding, fill=0):将给定的图像的所有边用给定的填充值进行填充。padding表示要填充多少像素,fill表示用什么值进行填充。 6. transforms.Normalize(mean, std):使用给定的均值和标准差进行归一化操作。归一化公式为:channel = (channel - mean) / std。其中mean和std分别表示每个通道的均值和标准差。 以上是torchvision.transforms.v2库中的一些常见的预处理操作,可以根据需要选择合适的操作来对图像数据进行处理。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [torchvision.transforms](https://blog.csdn.net/qq_33254870/article/details/103364028)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [pytorch-nyuv2:PyTorch NYUv2数据集类](https://download.csdn.net/download/weixin_42100188/18378138)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值