PyTorch框架学习五——图像预处理transforms(一)
PyTorch框架學(xué)習(xí)五——圖像預(yù)處理transforms(一)
- 一、transforms運(yùn)行機(jī)制
- 二、transforms的具體方法
- 1.裁剪
- (1)隨機(jī)裁剪:transforms.RandomCrop()
- (2)中心裁剪:transforms.CenterCrop()
- (3)隨機(jī)長(zhǎng)寬比裁剪:transforms.RandomCrop()
- (4)上下左右中心裁剪:transforms.FiveCrop()
- (5)上下左右中心裁剪后翻轉(zhuǎn):transforms.TenCrop()
- 2.翻轉(zhuǎn)、旋轉(zhuǎn)
- (1)依概率p水平翻轉(zhuǎn):transforms.RandomHorizontalFlip()
- (2)依概率p垂直翻轉(zhuǎn):transforms.RandomVerticalFlip()
- (3)隨機(jī)旋轉(zhuǎn):transforms.RandomRotation()
一、transforms運(yùn)行機(jī)制
介紹transforms之前先簡(jiǎn)單介紹一下torchvision。
torchvision是PyTorch的計(jì)算機(jī)視覺(jué)工具包,包含了一些與CV相關(guān)的處理。有三個(gè)需要重要介紹:
在transforms中除了具體的預(yù)處理方法之外,有一個(gè)Compose操作,這里提前介紹,它可以將一系列transforms操作有序地組合包裝,以此按順序執(zhí)行每一項(xiàng)操作。
torchvision.transforms.Compose(transforms)參數(shù):
如:
二、transforms的具體方法
transforms的操作一般的目的是為了圖像預(yù)處理和數(shù)據(jù)增強(qiáng),所謂數(shù)據(jù)增強(qiáng),又稱數(shù)據(jù)增廣、數(shù)據(jù)擴(kuò)增,它是對(duì)訓(xùn)練集進(jìn)行變換,使訓(xùn)練集更豐富,從而讓模型更具泛化能力。下面將介紹二十多種具體的transforms的方法。
1.裁剪
(1)隨機(jī)裁剪:transforms.RandomCrop()
功能:從圖片中隨機(jī)裁剪出尺寸為size的部分,圖像可以是PIL格式或者是張量。
torchvision.transforms.RandomCrop(size, padding=None, pad_if_needed=False, fill=0, padding_mode='constant')參數(shù)如下:
下面看一下隨機(jī)裁剪的幾個(gè)例子及其效果,變換前圖片的原始尺寸為224×224,如下圖所示:
(1)隨機(jī)裁剪尺寸為224,padding=16,即四邊都填充16個(gè)像素,就是在256×256的范圍隨機(jī)裁剪224×224的大小,效果如下圖所示:
transforms.RandomCrop(224, padding=16)
(2)隨機(jī)裁剪尺寸為224,padding=(16, 64),即左右填充16個(gè)像素,上下填充64個(gè)像素,就是在256×352 的范圍隨機(jī)裁剪224×224的大小,效果如下圖所示:
(3)與(1)不同之處就在于像素的填充,這里設(shè)定了填充的像素值為(255, 0, 0),效果如下圖所示:
(4)隨機(jī)裁剪的尺寸為512,大于原始圖像的尺寸224,所以pad_if_needed必須設(shè)置為T(mén)rue來(lái)進(jìn)行自動(dòng)填充,擴(kuò)大尺寸(填充是隨機(jī)的),效果如下圖所示:
(5)與(1)或(3)不同的是,填充模式設(shè)定為‘edge’,效果如下圖所示:
(6)與(1)或(3)或(5)不同的是,填充模式設(shè)定為 ‘reflect’ ,效果如下圖所示:
(7)最后看一個(gè)綜合一點(diǎn)的:
(2)中心裁剪:transforms.CenterCrop()
功能:從圖像中心裁剪圖片,圖片可以是PIL格式或是張量。
torchvision.transforms.CenterCrop(size)
例子如下:
(3)隨機(jī)長(zhǎng)寬比裁剪:transforms.RandomCrop()
功能:隨機(jī)大小、長(zhǎng)寬比裁剪圖片,圖片可以是PIL格式或是張量。
torchvision.transforms.RandomResizedCrop(size, scale=(0.08, 1.0), ratio=(0.75, 1.3333333333333333), interpolation=2)參數(shù)如下:
例子如下:裁剪出來(lái)的部分是原來(lái)部分面積的0.5倍,但是大小又必須為224不變,所以用了默認(rèn)了插值方法PIL.Image.BILINEAR。
transforms.RandomResizedCrop(size=224, scale=(0.5, 0.5))(4)上下左右中心裁剪:transforms.FiveCrop()
功能:對(duì)給定圖像的四個(gè)角以及中心進(jìn)行裁剪,圖片可以是PIL格式或是張量,返回一個(gè)包含五個(gè)元素的元組(tuple),一般都要緊跟一個(gè)將元組轉(zhuǎn)變?yōu)閺埩康牟僮?#xff0c;而且還要注意前后代碼尺寸上的匹配。
torchvision.transforms.FiveCrop(size)參數(shù)size同上。
例子如下,緊跟了一個(gè)將元組變換為張量的操作:
transforms.FiveCrop(112) transforms.Lambda(lambda crops: torch.stack([(transforms.ToTensor()(crop)) for crop in crops])),(5)上下左右中心裁剪后翻轉(zhuǎn):transforms.TenCrop()
功能:在圖像(PIL格式或者是張量)的上下左右四個(gè)角以及中心裁剪出尺寸為size的5張圖片,TenCrop對(duì)這5張圖片進(jìn)行水平或垂直鏡像從而獲得10張圖片。
torchvision.transforms.TenCrop(size, vertical_flip=False)參數(shù)如下:
2.翻轉(zhuǎn)、旋轉(zhuǎn)
(1)依概率p水平翻轉(zhuǎn):transforms.RandomHorizontalFlip()
功能:依概率水平翻轉(zhuǎn),輸入圖像為PIL格式或是張量。
torchvision.transforms.RandomHorizontalFlip(p=0.5)參數(shù):
例子如下:
(2)依概率p垂直翻轉(zhuǎn):transforms.RandomVerticalFlip()
功能:依概率垂直翻轉(zhuǎn),輸入圖像為PIL格式或是張量。
torchvision.transforms.RandomVerticalFlip(p=0.5)
例子如下:
(3)隨機(jī)旋轉(zhuǎn):transforms.RandomRotation()
功能:隨機(jī)旋轉(zhuǎn)圖片。
torchvision.transforms.RandomRotation(degrees, resample=False, expand=False, center=None, fill=None)參數(shù)如下:
注意:expand的計(jì)算公式是針對(duì)中心點(diǎn)旋轉(zhuǎn)的,若設(shè)置為左上角旋轉(zhuǎn)或者其他點(diǎn)為旋轉(zhuǎn)中心,則不能保證保持原圖信息。
下面看幾個(gè)例子:
(1)中心點(diǎn)旋轉(zhuǎn),范圍(-90度,90度):
(2)設(shè)置expand保持原圖信息,圖像尺寸自動(dòng)擴(kuò)大:
(3)旋轉(zhuǎn)中心改為左上角:
(4)旋轉(zhuǎn)中心為左上角并進(jìn)行expand:
transforms.RandomRotation(30, center=(0, 0), expand=True)結(jié)果不能保證保持原圖信息:
總結(jié)
以上是生活随笔為你收集整理的PyTorch框架学习五——图像预处理transforms(一)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Debug Assertion Fail
- 下一篇: 仿射变换的原理