PyTorch框架学习六——图像预处理transforms(二)
PyTorch框架學(xué)習(xí)六——圖像預(yù)處理transforms(二)
- (續(xù))二、transforms的具體方法
- 4.圖像變換
- (1)尺寸變換:transforms.Resize()
- (2)標(biāo)準(zhǔn)化:transforms.Normalize()
- (3)轉(zhuǎn)為tensor:transforms.ToTensor()
- (4)將數(shù)據(jù)轉(zhuǎn)換為PILImage:transforms.ToPILImage()
- (5)填充:transforms.Pad()
- (6)修改亮度、對(duì)比度、飽和度:transforms.ColorJitter()
- (7)轉(zhuǎn)灰度圖:transforms.Grayscale()
- (8)依概率p轉(zhuǎn)為灰度圖:transforms.RandomGrayscale()
- (9)仿射變換:transforms.RandomAffine()
- (10)隨機(jī)遮擋:transforms.RandomErasing()
- 5.transforms的操作
- (1)transforms.Lambda()
- (2)transforms.RandomChoice()
- (3)transforms.RandomApply()
- (4)transforms.RandomOrder()
這次筆記是續(xù)PyTorch框架第五次筆記,上次筆記鏈接為:https://blog.csdn.net/qq_40467656/article/details/107914085
(續(xù))二、transforms的具體方法
4.圖像變換
(1)尺寸變換:transforms.Resize()
功能:將輸入圖像的尺寸resize到給定的尺寸。
操作對(duì)象:PIL格式或是張量。
參數(shù)如下:
原始圖像尺寸(224,224):(注意坐標(biāo)軸)
resize后的結(jié)果,注意坐標(biāo)軸
(2)標(biāo)準(zhǔn)化:transforms.Normalize()
功能:逐通道的標(biāo)準(zhǔn)化圖像,公式為
output[channel] = (input[channel] - mean[channel]) / std[channel]
操作對(duì)象:張量。
參數(shù)如下:
標(biāo)準(zhǔn)化的作用:可以加快模型的收斂。
例子如下,這是RGB三通道圖像,所以均值標(biāo)準(zhǔn)差都要有三個(gè):
norm_mean = [0.485, 0.456, 0.406] norm_std = [0.229, 0.224, 0.225] transforms.Normalize(norm_mean, norm_std)(3)轉(zhuǎn)為tensor:transforms.ToTensor()
功能:將 PIL Image 或 numpy.ndarray 轉(zhuǎn)變?yōu)閠ensor。
操作對(duì)象:PIL格式或是ndarray。
將一個(gè)尺寸為(H×W×C)像素值范圍[0, 255]的PIL圖像或numpy的ndarray轉(zhuǎn)變?yōu)槌叽鐬?#xff08;C×H×W)像素值范圍[0.0, 1.0]。
因?yàn)橄袼刂刀夹∮诘扔?,所以顯示不出來(lái),其實(shí)像素值是有值的。
(4)將數(shù)據(jù)轉(zhuǎn)換為PILImage:transforms.ToPILImage()
功能:將張量或ndarray轉(zhuǎn)換為PIL圖像,同時(shí)保留值的范圍。
操作對(duì)象:ndarray或是張量。
參數(shù)如下:
(5)填充:transforms.Pad()
功能:對(duì)圖片的邊緣進(jìn)行填充。
操作對(duì)象:PIL格式或是張量。
參數(shù)如下:
幾個(gè)例子如下:
(1)四邊都填充32像素,模式為constant,填充值為(255, 0, 0)(紅色)。
transforms.Pad(padding=32, fill=(255, 0, 0), padding_mode='constant')
(2)padding不一樣,其他和(1)一樣:
(3)padding不一樣,其他和(1)一樣:
(4)模式改成了symmetric,此時(shí)的fill無(wú)效:
(6)修改亮度、對(duì)比度、飽和度:transforms.ColorJitter()
功能:調(diào)整亮度、對(duì)比度、飽和度和色相。
操作對(duì)象:PIL格式或是張量。
參數(shù)如下:
例子如下:
(1)亮度:
transforms.ColorJitter(brightness=0.5)即亮度在[0.5, 1.5]之間選擇:
(2)對(duì)比度:
(3)飽和度:
(4)色相:
(7)轉(zhuǎn)灰度圖:transforms.Grayscale()
功能:將圖像轉(zhuǎn)變?yōu)榛叶葓D,返回類型為PIL圖像。
操作對(duì)象:PIL圖像。
參數(shù):
注意它的返回,通道為3時(shí),三通道的值相等:
例子如下:
(8)依概率p轉(zhuǎn)為灰度圖:transforms.RandomGrayscale()
功能:依概率將圖片轉(zhuǎn)換為灰度圖。
操作對(duì)象:PIL圖像。
(9)仿射變換:transforms.RandomAffine()
功能:對(duì)圖像進(jìn)行仿射變換,仿射變換是二維的線性變換,由五種基本原子構(gòu)成,分別是旋轉(zhuǎn)、平移、縮放、錯(cuò)切和翻轉(zhuǎn)。
操作對(duì)象:PIL格式(或是張量?不清楚張量可不可以)。
參數(shù)如下:
例子如下:
(1)旋轉(zhuǎn)
transforms.RandomAffine(degrees=30)
(2)平移
(3)縮放
(4)y方向錯(cuò)切
(5)x方向錯(cuò)切
(10)隨機(jī)遮擋:transforms.RandomErasing()
功能:在圖像中隨機(jī)選擇一個(gè)矩陣區(qū)域并遮擋其像素。
操作對(duì)象:張量。
參數(shù)如下:
例子如下:
(1)
transforms.RandomErasing(p=1, scale=(0.02, 0.33), ratio=(0.3, 3.3), value=(254/255, 0, 0))
(2)value若是一個(gè)字符串,則會(huì)是隨機(jī)填充。
5.transforms的操作
(1)transforms.Lambda()
功能:用戶自定義lambda方法。
torchvision.transforms.Lambda(lambd)參數(shù):
格式為:
lambda[ arg1 [,arg2,…] ]:expression
其中:
arg1 [,arg2,…]為輸入?yún)?shù),expression為要做的操作以及返回的內(nèi)容。
例子如下:
transforms.TenCrop(112, vertical_flip=False) transforms.Lambda(lambda crops: torch.stack([(transforms.ToTensor()(crop)) for crop in crops]))這里的操作是將TenCrop生成的十個(gè)圖像拼接成一個(gè)張量。
(2)transforms.RandomChoice()
功能:從一系列transforms方法中隨機(jī)挑選一個(gè)。
torchvision.transforms.RandomChoice(transforms)格式為:
transforms.RandomChoice([transforms1, transforms2, transforms3,...])如:要么垂直翻轉(zhuǎn),要么水平翻轉(zhuǎn)。
transforms.RandomChoice([transforms.RandomVerticalFlip(p=1), transforms.RandomHorizontalFlip(p=1)])(3)transforms.RandomApply()
功能:依據(jù)概率執(zhí)行一組transforms操作。
torchvision.transforms.RandomApply(transforms, p=0.5)如:0.5的概率執(zhí)行仿射變換后灰度化。
transforms.RandomApply([transforms.RandomAffine(degrees=0, shear=45, fillcolor=(255, 0, 0)), transforms.Grayscale(num_output_channels=3)], p=0.5)(4)transforms.RandomOrder()
功能:對(duì)一組transforms方法打亂,然后順序執(zhí)行。
torchvision.transforms.RandomOrder(transforms)如:
transforms.RandomOrder([transforms.RandomRotation(15),transforms.Pad(padding=32),transforms.RandomAffine(degrees=0, translate=(0.01, 0.1), scale=(0.9, 1.1))]),總結(jié)
以上是生活随笔為你收集整理的PyTorch框架学习六——图像预处理transforms(二)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: python实现可扩容队列
- 下一篇: 吴恩达《机器学习》学习笔记三——多变量线