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