日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

PyTorch框架学习六——图像预处理transforms(二)

發布時間:2024/7/23 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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格式或是張量。

torchvision.transforms.Resize(size, interpolation=2)

參數如下:

  • size:同上(上次筆記)。
  • interpolation:同上(上次筆記)。
  • 原始圖像尺寸(224,224):(注意坐標軸)

    transforms.Resize((512, 512))

    resize后的結果,注意坐標軸

    (2)標準化:transforms.Normalize()

    功能:逐通道的標準化圖像,公式為
    output[channel] = (input[channel] - mean[channel]) / std[channel]
    操作對象:張量。

    torchvision.transforms.Normalize(mean, std, inplace=False)

    參數如下:

  • mean:(序列)每個通道的均值。
  • std:(序列)每個通道的標準差。
  • inplace:(布爾,可選)是否為原地操作。
  • 標準化的作用:可以加快模型的收斂。

    例子如下,這是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。

    torchvision.transforms.ToTensor


    將一個尺寸為(H×W×C)像素值范圍[0, 255]的PIL圖像或numpy的ndarray轉變為尺寸為(C×H×W)像素值范圍[0.0, 1.0]。

    transforms.ToTensor()


    因為像素值都小于等于1,所以顯示不出來,其實像素值是有值的。

    (4)將數據轉換為PILImage:transforms.ToPILImage()

    功能:將張量或ndarray轉換為PIL圖像,同時保留值的范圍。
    操作對象:ndarray或是張量。

    torchvision.transforms.ToPILImage(mode=None)

    參數如下:

    (5)填充:transforms.Pad()

    功能:對圖片的邊緣進行填充。
    操作對象:PIL格式或是張量。

    torchvision.transforms.Pad(padding, fill=0, padding_mode='constant')

    參數如下:

  • padding:設置填充的大小。若為a,則四邊都填充a個像素距離;若為(a,b),則左右兩邊填充a個,上下兩邊填充b個;若為(a,b,c,d),則分別對應左、上、右、下四個邊。
  • fill:只有padding_mode設置為constant時有效,constant模式下要填充的像素值(R、G、B)或(Gray),默認為0。
  • padding_mode:填充模式,有constant、edge、reflect和symmetric四種,同上。
  • 幾個例子如下:

    (1)四邊都填充32像素,模式為constant,填充值為(255, 0, 0)(紅色)。

    transforms.Pad(padding=32, fill=(255, 0, 0), padding_mode='constant')


    (2)padding不一樣,其他和(1)一樣:

    transforms.Pad(padding=(8, 64), fill=(255, 0, 0), padding_mode='constant')


    (3)padding不一樣,其他和(1)一樣:

    transforms.Pad(padding=(8, 16, 32, 64), fill=(255, 0, 0), padding_mode='constant')


    (4)模式改成了symmetric,此時的fill無效:

    transforms.Pad(padding=(8, 16, 32, 64), fill=(255, 0, 0), padding_mode='symmetric')

    (6)修改亮度、對比度、飽和度:transforms.ColorJitter()

    功能:調整亮度、對比度、飽和度和色相。
    操作對象:PIL格式或是張量。

    torchvision.transforms.ColorJitter(brightness=0, contrast=0, saturation=0, hue=0)

    參數如下:

  • brightness:亮度調整因子,當為a時,從[max(0, 1-a), 1+a]中隨機選擇;當為(a, b)時,從[a, b]中隨機選擇。
  • contrast:對比度參數,同brightness。
  • saturation:飽和度參數,同brightness。
  • hue:色相參數,當為a時,從[-a, a]中選擇,0<=a<=0.5;當為(a, b)時,從[a, b]中隨機選擇,-0.5<=a<=b<=0.5。
  • 例子如下:

    (1)亮度:

    transforms.ColorJitter(brightness=0.5)

    即亮度在[0.5, 1.5]之間選擇:

    (2)對比度:

    transforms.ColorJitter(contrast=0.5)


    (3)飽和度:

    transforms.ColorJitter(saturation=0.5)


    (4)色相:

    transforms.ColorJitter(hue=0.3)

    (7)轉灰度圖:transforms.Grayscale()

    功能:將圖像轉變為灰度圖,返回類型為PIL圖像。
    操作對象:PIL圖像。

    torchvision.transforms.Grayscale(num_output_channels=1)

    參數:

    注意它的返回,通道為3時,三通道的值相等:

    例子如下:

    transforms.Grayscale(num_output_channels=3)

    (8)依概率p轉為灰度圖:transforms.RandomGrayscale()

    功能:依概率將圖片轉換為灰度圖。
    操作對象:PIL圖像。

    torchvision.transforms.RandomGrayscale(p=0.1)

    (9)仿射變換:transforms.RandomAffine()

    功能:對圖像進行仿射變換,仿射變換是二維的線性變換,由五種基本原子構成,分別是旋轉、平移、縮放、錯切和翻轉。
    操作對象:PIL格式(或是張量?不清楚張量可不可以)。

    torchvision.transforms.RandomAffine(degrees, translate=None, scale=None, shear=None, resample=False, fillcolor=0)

    參數如下:

  • degrees:旋轉角度,同RandomRotation()。
  • translate:平移區間設置,如(a,b),則水平平移距離在(-img_width×a,img_width×a)區間內選擇,垂直平移距離在(-img_height×b,img_height×b)區間內選擇,默認不平移。
  • scale:縮放比例,默認不縮放。
  • shear:錯切角度設置,若為a,則圖像會沿著x軸方向錯切,錯切角度在(-a,a)范圍內;若為(a,b),則圖像會沿著x軸方向錯切,錯切角度在(a,b)范圍內;若為(a,b,c,d),則圖像會沿著x軸方向錯切,錯切角度在(a,b)范圍內,并且沿著y軸錯切,錯切角度在(c,d)范圍內。
  • resample:插值方法。
  • fillcolor:填充顏色設置,(R,G,B)或(Gray)。
  • 例子如下:

    (1)旋轉

    transforms.RandomAffine(degrees=30)


    (2)平移

    transforms.RandomAffine(degrees=0, translate=(0.2, 0.2), fillcolor=(255, 0, 0))


    (3)縮放

    transforms.RandomAffine(degrees=0, scale=(0.7, 0.7))


    (4)y方向錯切

    transforms.RandomAffine(degrees=0, shear=(0, 0, 0, 45))


    (5)x方向錯切

    transforms.RandomAffine(degrees=0, shear=90, fillcolor=(255, 0, 0))

    (10)隨機遮擋:transforms.RandomErasing()

    功能:在圖像中隨機選擇一個矩陣區域并遮擋其像素。
    操作對象:張量。

    torchvision.transforms.RandomErasing(p=0.5, scale=(0.02, 0.33), ratio=(0.3, 3.3), value=0, inplace=False)

    參數如下:

  • p:執行隨機遮擋操作的概率。
  • scale:遮擋區域的面積。
  • ratio:遮擋區域的長寬比。
  • value:設置遮擋區域的像素值,(R,G,B)或(Gray)。
  • inplace:是否原地操作,默認False。
  • 例子如下:

    (1)

    transforms.RandomErasing(p=1, scale=(0.02, 0.33), ratio=(0.3, 3.3), value=(254/255, 0, 0))


    (2)value若是一個字符串,則會是隨機填充。

    transforms.RandomErasing(p=1, scale=(0.02, 0.33), ratio=(0.3, 3.3), value='1234')

    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(二)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。