PyTorch教程-6:详解PyTorch中的transforms

笔者PyTorch的全部简单教程请访问:https://www.jianshu.com/nb/48831659

PyTorch教程-6:详解PyTorch中的transforms

对于视觉方向的图像处理方面,PyTorch提供了很好的预处理接口,对于图像的转换处理,使用 torchvision.tranforms 模块使得这些操作非常高效。本文就介绍这个非常强大的工具,先引入transforms模块:

import torchvision.transforms as transforms

完整的参考:https://pytorch.org/docs/stable/torchvision/transforms.html

组合多个变换操作

transforms.Compose() 方法接收一个 transforms 方法的list为参数,将这些操作组合到一起,返回一个新的tranforms。通常用于包装一个完整的变换操作的pipeline

import torchvision.transforms as transforms

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

对PIL Image和Tensor同时起作用的操作

本节所提到的所有的transforms的操作都可以以三种数据中的一种为参数:

  • PIL格式的Image
  • tensor表示的图片,其形状为 (Channel, Height, Weight)
  • 一个tensor数组表示的多个图片,其形状为 (Batch, Channel, Height, Weight)

这些方法列在下边,对于需要详细查看其参数含义的操作,可以直接参考:
https://pytorch.org/docs/stable/torchvision/transforms.html#transforms-on-pil-image-and-torch-tensor

  • torchvision.transforms.CenterCrop(size)size为一个整数或者tuple,从图片中心裁剪出size大小的图片
  • torchvision.transforms.ColorJitter(brightness=0, contrast=0, saturation=0, hue=0):对图像的亮度、对比度、饱和度和色调进行调节,每个参数接收一个float值或者一个float tuple (min, max)
  • torchvision.transforms.FiveCrop(size)size为一个整数或者tuple,从图片中心和四个角裁剪出一共五张size大小的图片
  • torchvision.transforms.Grayscale(num_output_channels=1):将图片转换为灰度图,参数可取1或3,取3时,三个通道返回同样的值
  • torchvision.transforms.Pad(padding, fill=0, padding_mode='constant'):对图片做padding操作
  • torchvision.transforms.RandomAffine(degrees, translate=None, scale=None, shear=None, resample=0, fillcolor=0):对图像进行随机的仿射变换
  • torchvision.transforms.RandomApply(transforms, p=0.5):接收一个transforms的list为参数,依据它对图片进行随机的变换
  • torchvision.transforms.RandomCrop(size, padding=None, pad_if_needed=False, fill=0, padding_mode='constant'):在图片的随机位置剪裁并返回新图像
  • torchvision.transforms.RandomGrayscale(p=0.1):以p的概率将图片随机转换为灰度图
  • torchvision.transforms.RandomHorizontalFlip(p=0.5):以p的概率随机将图片水平翻转
  • torchvision.transforms.RandomPerspective(distortion_scale=0.5, p=0.5, interpolation=2, fill=0):以p的概率将图片进行随机透视变换
  • torchvision.transforms.RandomResizedCrop(size, scale=(0.08, 1.0), ratio=(0.75, 1.3333333333333333), interpolation=2):将图片随机地进行剪裁得到给定大小或者长宽比的图片
  • torchvision.transforms.RandomRotation(degrees, resample=False, expand=False, center=None, fill=None):随机对图片旋转一个角度
  • torchvision.transforms.RandomVerticalFlip(p=0.5):以p的概率随机将图片垂直(上下)翻转
  • torchvision.transforms.Resize(size, interpolation=2):将图片大小放缩到给定大小
  • torchvision.transforms.TenCrop(size, vertical_flip=False):将图片的四个角和中心进行裁剪后,返回他们的反转后的图片,默认水平反转
  • torchvision.transforms.GaussianBlur(kernel_size, sigma=(0.1, 2.0)):对图片进行高斯模糊

仅对PIL Image起作用的操作

本小节提到的方法仅对PIL Image格式的图片起作用,即不能用于torchscript(什么是TorchScripthttps://pytorch.org/docs/stable/jit.html?highlight=torchscript)。详细的参数说明请参考:https://pytorch.org/docs/stable/torchvision/transforms.html#transforms-on-pil-image-only

  • torchvision.transforms.RandomChoice(transforms):接收一个transforms的list为参数,从list中随机挑选一个对图片进行变换
  • torchvision.transforms.RandomOrder(transforms):接收一个transforms的list为参数,将list中的所有变换操作进行随机排序后对图片进行变换

仅对Tensor起作用的操作

本小节提到的方法仅能够作用于 Tensor 上,详细的参数说明请参考:https://pytorch.org/docs/stable/torchvision/transforms.html#transforms-on-torch-tensor-only

  • torchvision.transforms.LinearTransformation(transformation_matrix, mean_vector):对tensor进行矩阵变换后减去一个向量
  • torchvision.transforms.Normalize(mean, std, inplace=False):对图片进行标准化
  • torchvision.transforms.RandomErasing(p=0.5, scale=(0.02, 0.33), ratio=(0.3, 3.3), value=0, inplace=False):随机选取图片中的矩形区域并删除其像素值
  • torchvision.transforms.ConvertImageDtype(dtype: torch.dtype):将tensor的数据类型转换为给定的torch.dtype的类型

用于进行转换的操作

本小节提到的方法用于数据类型的转换,详细的参数说明请参考:https://pytorch.org/docs/stable/torchvision/transforms.html#conversion-transforms

  • torchvision.transforms.ToPILImage(mode=None):将一个tensor格式的图片转换为PIL Image格式的图片,不支持torchscript
  • torchvision.transforms.ToTensor:将一个PIL Image格式的图片转换为tensor格式的图片,不支持torchscript,这个很重要
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,242评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,769评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,484评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,133评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,007评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,080评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,496评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,190评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,464评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,549评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,330评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,205评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,567评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,889评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,160评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,475评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,650评论 2 335

推荐阅读更多精彩内容