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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

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

發(fā)布時(shí)間:2024/7/23 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 PyTorch框架学习六——图像预处理transforms(二) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

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格式或是張量。

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

參數(shù)如下:

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

    transforms.Resize((512, 512))

    resize后的結(jié)果,注意坐標(biāo)軸

    (2)標(biāo)準(zhǔn)化:transforms.Normalize()

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

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

    參數(shù)如下:

  • mean:(序列)每個(gè)通道的均值。
  • std:(序列)每個(gè)通道的標(biāo)準(zhǔn)差。
  • inplace:(布爾,可選)是否為原地操作。
  • 標(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。

    torchvision.transforms.ToTensor


    將一個(gè)尺寸為(H×W×C)像素值范圍[0, 255]的PIL圖像或numpy的ndarray轉(zhuǎn)變?yōu)槌叽鐬?#xff08;C×H×W)像素值范圍[0.0, 1.0]。

    transforms.ToTensor()


    因?yàn)橄袼刂刀夹∮诘扔?,所以顯示不出來(lái),其實(shí)像素值是有值的。

    (4)將數(shù)據(jù)轉(zhuǎn)換為PILImage:transforms.ToPILImage()

    功能:將張量或ndarray轉(zhuǎn)換為PIL圖像,同時(shí)保留值的范圍。
    操作對(duì)象:ndarray或是張量。

    torchvision.transforms.ToPILImage(mode=None)

    參數(shù)如下:

    (5)填充:transforms.Pad()

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

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

    參數(shù)如下:

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

    (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,此時(shí)的fill無(wú)效:

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

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

    功能:調(diào)整亮度、對(duì)比度、飽和度和色相。
    操作對(duì)象:PIL格式或是張量。

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

    參數(shù)如下:

  • brightness:亮度調(diào)整因子,當(dāng)為a時(shí),從[max(0, 1-a), 1+a]中隨機(jī)選擇;當(dāng)為(a, b)時(shí),從[a, b]中隨機(jī)選擇。
  • contrast:對(duì)比度參數(shù),同brightness。
  • saturation:飽和度參數(shù),同brightness。
  • hue:色相參數(shù),當(dāng)為a時(shí),從[-a, a]中選擇,0<=a<=0.5;當(dāng)為(a, b)時(shí),從[a, b]中隨機(jī)選擇,-0.5<=a<=b<=0.5。
  • 例子如下:

    (1)亮度:

    transforms.ColorJitter(brightness=0.5)

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

    (2)對(duì)比度:

    transforms.ColorJitter(contrast=0.5)


    (3)飽和度:

    transforms.ColorJitter(saturation=0.5)


    (4)色相:

    transforms.ColorJitter(hue=0.3)

    (7)轉(zhuǎn)灰度圖:transforms.Grayscale()

    功能:將圖像轉(zhuǎn)變?yōu)榛叶葓D,返回類型為PIL圖像。
    操作對(duì)象:PIL圖像。

    torchvision.transforms.Grayscale(num_output_channels=1)

    參數(shù):

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

    例子如下:

    transforms.Grayscale(num_output_channels=3)

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

    功能:依概率將圖片轉(zhuǎn)換為灰度圖。
    操作對(duì)象:PIL圖像。

    torchvision.transforms.RandomGrayscale(p=0.1)

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

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

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

    參數(shù)如下:

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

    (1)旋轉(zhuǎn)

    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方向錯(cuò)切

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


    (5)x方向錯(cuò)切

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

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

    功能:在圖像中隨機(jī)選擇一個(gè)矩陣區(qū)域并遮擋其像素。
    操作對(duì)象:張量。

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

    參數(shù)如下:

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

    (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ī)填充。

    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)

    參數(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)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。