计算机视觉学习笔记之torchvision.transforms

torchvision.transforms是包含一系列常用图像变换方法的包,可用于图像预处理、数据增强等工作,但是注意它更适合于classification等对数据增强后无需改变图像的label的情况,对于Segmentation等对图像增强时需要同步改变label的情况可能不太实用,需要自己重新封装一下。
官方文档:https://pytorch.org/docs/stable/torchvision/transforms.html
部分函数的使用示例可见我的github:https://github.com/TaiYChen/Notebook_Share_Code/blob/master/transforms_example.ipynb

一、Compose
二、对PIL图像的变换
三、对torch.Tensor的变换
四、PIL与Tensor的相互转换
五、通用变换
六、Functional Transforms(待续)

一、Compose
首先介绍torchvision.transforms.Compose(),它的参数是一个由多个transforms包中的方法组成的list,其作用是将list对应的一系列操作组合起来成为一个整体,方便对所有图像做同样的操作。例如:

import torchvision.transforms as transforms
from PIL import Image
import matplotlib.pyplot as plt
from matplotlib.pyplot import imshow
%matplotlib inline
trans_list = [transforms.CenterCrop(100), 
transforms.RandomHorizontalFlip(p=1)]
my_trans = transforms.Compose(trans_list)
img = Image.open(r"lena.jpg")
plt.subplot(121)
imshow(img)
my_img = my_trans(img)
plt.subplot(122)
imshow(my_img)
plt.show()

通过Compose(trans_list)将CenterCrop(100)、RandomHorizontalFlip(p=1)两个操作组合到一起,按先后顺序对输入图像进行操作。其中
CenterCrop(size):
在给定的PIL图像的中心裁剪出给定size大小的图像,若给定size为int型,则返回sizesize大小的图像,若为(h,w)型的序列,则返回hw大小的图像。
RandomHorizontalFlip(p=0.5)
以概率p水平翻转PIL图像,p默认为0.5,本例中指定p=1即一定进行水平翻转操作。
实际应用时可以在trans_list中加入更多的方法,上述代码的实验结果:

QQ20200319105233.png

左侧为lena原图,右图为经过中心裁剪、水平翻转操作后的图。

二、对PIL图像的变换
用PIL.Image读取到的图像转换为ndarray格式后的size为(H,W[,C])对于彩色图像,C=3,依次对应RGB通道,对于灰度图像则无C分量
参数细节可见官方文档
除已经介绍的CenterCrop、RandomHorizontalFlip之外其他操作:

ColorJitter(brightness=0,contrast=0,saturation=0,hue=0)
随机改变图像的亮度、对比度、饱和度、色调

FiveCrop(size)
返回给定图像裁剪出的size大小的四角和中心

Grayscale(num_output_channels=1)
将图像转换成1channel或3channel完全相等的灰度图

Pad(padding,fill=0,padding_mode='constant')
padding参数给定各边填充的像素数,fill给定默认的填充值仅当padding_mode='constant'时起作用,padding_mode指定是用常数填充’constant'、图像边缘值填充'edge'、反射填充'reflect'还是
对称填充’symmetric'

RandomAffine(degrees,translate=None,scale=None,shear=None,resample=False,fillcolor=0)
保持图像中心不变的中心仿射变换
degrees给定旋转角度的取值范围,translate给定沿各方向随机平移因子的取值范围,scale给定随机缩放范围,shear就是以某一系数对单方向的像素点进行变换通过此参数给定系数变化范围,resample给定重采样方式{PIL.Image.NEAREST, PIL.Image.BILINEAR, PIL.Image.BICUBIC},fillcolor给定在变换后图像外的空区域的填充像素的灰度值或RGB值

RandomApply(transforms,p=0.5)
对给定图像以概率p进行由transforms(list或tuple形式,与Compose类似)指定的操作

RandomChoice(transforms)
在transforms(list形式)中随机选择一个方法进行操作

RandomCrop(size,padding=None,pad_if_needed=False,fill=0,padding_mode='constant')
随机裁剪

RandomGrayScale(p=0.1)
以概率p随机变为灰度图,并保持channel数不变(即输入图像为3channel图,则返回r==g==b的图像)

RandomOrder(transforms)
以随机顺序执行transforms(list形式)中指定的系列操作

RandomPerspective(distortion_scale=0.5,p=0.5,interpolation=3)
随机透视变换,即将图像投影到一个新的视平面

RandomResizedCrop(size,scale=(0.08,1.0),ratio=(0.75,1.333333333),interpolation=2)
随机放缩、裁剪后重新放缩至size

RandomRotation(degrees,resample=False,expend=False,center=None,fill=0)
旋转图像

RandomVerticalFlip(p=0.5)
以概率p竖直翻转图像

Resize(size,interpolation=2)
将图像缩放到给定size

TenCrop(size,vertical_flip=False)
返回四角及中心以及他们的翻转版本(默认水平翻转)

三、对torch.Tensor的变换
为将图像放入GPU进行计算,需将PIL格式或者ndarray格式转换为Tensor

Normalize(mean,std,inplace=False)
标准化处理,处理后Tensor的范围变为[-1.0,1.0],input[channel] =
(input[channel] -mean[channel]) / std[channel]

LinearTransformation(transformation_matrix, mean_vector)
利用平方变换矩阵和离线计算的平均矢量变换张量图像。给定变换矩阵和平均矢量,将使torch.*张量拉平,并从中减去平均矢量,然后用变换矩阵计算点积,然后将张量重塑为其原始形状。

RandomErasing(p=0.5, scale=(0.02, 0.33), ratio=(0.3, 3.3), value=0, inplace=False)
随机选择一块长方形区域,擦除相应位置的像素值

四、PIL与Tensor的相互转换
ToTensor
将形为(H,W,C),取值范围为[0,255]的PIL或ndarray的图像转化为形为(C,H,W)取值为[0.0,1.0]的Tensor

ToPILImage(mode=None)
将Tensor转化为PIL图像

五、通用变换
Lambda(lambda)
lambda是自定义函数
(见github的示例)

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

推荐阅读更多精彩内容