Pytorch框架學(xué)習(xí)(6)——transforms與normalize

圖像預(yù)處理Transforms與normalize

@[toc]

1. transforms運(yùn)行機(jī)制

在這里插入圖片描述

torchvision工具包中包含三個(gè)主要模塊,今天主要學(xué)習(xí)transforms

  • torchvision.transforms:常用的數(shù)據(jù)預(yù)處理方法,提升泛化能力
    • 包括:數(shù)據(jù)中心化、數(shù)據(jù)標(biāo)準(zhǔn)化、縮放、裁剪、旋轉(zhuǎn)、翻轉(zhuǎn)、填充、噪聲添加、灰度變換、線性變換、仿射變換、亮度、飽和度及對(duì)比度變換等
在這里插入圖片描述

2. 數(shù)據(jù)標(biāo)準(zhǔn)化——transforms.normalize

  • transforms.Normalize()
  • 功能:逐channel的對(duì)圖像進(jìn)行標(biāo)準(zhǔn)化(均值變?yōu)?,標(biāo)準(zhǔn)差變?yōu)?),可以加快模型的收斂
    • output = (input - mean) / std
    • mean:各通道的均值
    • std:各通道的標(biāo)準(zhǔn)差
    • inplace:是否原地操作

3. transforms數(shù)據(jù)增強(qiáng)

3.1 數(shù)據(jù)增強(qiáng)

  • 數(shù)據(jù)增強(qiáng)又稱為數(shù)據(jù)增廣,數(shù)據(jù)擴(kuò)增,它是對(duì)訓(xùn)練集進(jìn)行變換,使訓(xùn)練集更豐富,從而讓模型更具泛化能力。


    在這里插入圖片描述

3.2 transforms——裁剪

  1. transforms.CenterCrop

    • 功能:從圖像中心裁剪圖片
    • size:所需裁剪圖片尺寸
  2. transforms.RandomCrop

    • 功能:從圖片中隨機(jī)裁剪出尺寸為size的圖片
    • size:所需裁剪圖片尺寸
    • padding:設(shè)置填充大小。當(dāng)為a時(shí),上下左右均填充a個(gè)像素,當(dāng)為(a,b)時(shí),上下填充b個(gè)像素,左右填充a個(gè)像素。當(dāng)為(a,b,c,d)時(shí),左上右下分別填充abcd
    • pad_if_need:若圖像小于設(shè)定size,則填充
    • padding_mode:填充模式:(1)constant像素值由fill設(shè)定(默認(rèn)模式);(2)edge像素值由圖像邊緣像素決定(3)reflect鏡像填充,最后一個(gè)像素不鏡像,eg,[1,2,3,4]->[3,2,1,2,3,4,3,2];(4)symmetric鏡像填充,最后一個(gè)像素鏡像,eg,[1,2,3,4]->[2,1,1,2,3,4,4,3]
    • fill:constant時(shí),設(shè)置填充的像素值
  3. RandomResizedCrop

    • 功能:隨機(jī)大小、長(zhǎng)寬比裁剪圖片
    • size:所需裁剪圖片尺寸
    • scale:隨機(jī)裁剪面積比例,默認(rèn)(0.08,1)
    • ratio:隨機(jī)長(zhǎng)寬比,默認(rèn)(3/4,4/3)
    • interpolation:插值方法,PIL.Image.NEAREST最近鄰,PIL.Image.BILINEAR雙線性,PIL.Image.BICUBIC
  4. FiveCrop

    • 在圖片的左上角、左下角、右上角、右下角和中心裁剪出尺寸為size的5張圖片
    • size:所需裁剪圖片尺寸
    • 注意:返回的數(shù)據(jù)為tuple格式,需要轉(zhuǎn)換為張量形式或者PIL.Image形式
  5. TenCrop

    • 在圖像的上下左右以及中心裁剪出尺寸為size的5張圖片,TenCrop對(duì)著5張圖片進(jìn)行水平或者垂直鏡像獲得10張圖片
    • size:所需裁剪圖片尺寸
    • vertical_flip:是否垂直翻轉(zhuǎn)

3.3 transforms——翻轉(zhuǎn)和旋轉(zhuǎn)

  1. RandomHorizontalFlip水平翻轉(zhuǎn)

    • p:翻轉(zhuǎn)概率
  2. RandomVerticalFlip垂直翻轉(zhuǎn)

    • p:翻轉(zhuǎn)概率
  3. RandomRotation

    • 功能:隨機(jī)旋轉(zhuǎn)圖片
    • degrees:旋轉(zhuǎn)角度。當(dāng)為a時(shí),在(-a, a)之間選擇旋轉(zhuǎn)角度;當(dāng)為(a, b)時(shí),在(a, b)之間選擇旋轉(zhuǎn)角度
    • resample:重采樣方法,一般不需要設(shè)置,使用默認(rèn)值
    • expand:是否擴(kuò)大圖片,以保持原圖信息
    • center:旋轉(zhuǎn)點(diǎn)設(shè)置,默認(rèn)中心旋轉(zhuǎn)。如果設(shè)置為(0,0),則為左上角旋轉(zhuǎn)


      在這里插入圖片描述

4. transforms方法擴(kuò)展

4.1 圖像變換

  1. Pad

    • 功能:對(duì)圖片邊緣進(jìn)行填充
    • padding:設(shè)置填充大小。當(dāng)為a時(shí),上下左右均填充a個(gè)像素,當(dāng)為(a,b)時(shí),上下填充b個(gè)像素,左右填充a個(gè)像素。當(dāng)為(a,b,c,d)時(shí),左上右下分別填充abcd
    • padding_mode:填充模式。(1)constant像素值由fill設(shè)定(默認(rèn)模式);(2)edge像素值由圖像邊緣像素決定(3)reflect鏡像填充,最后一個(gè)像素不鏡像,eg,[1,2,3,4]->[3,2,1,2,3,4,3,2];(4)symmetric鏡像填充,最后一個(gè)像素鏡像,eg,[1,2,3,4]->[2,1,1,2,3,4,4,3]
    • fill:constant時(shí),設(shè)置填充的像素值,(R, G, B)或者(Gray)
  2. ColorJitter

    • 功能:調(diào)整亮度、對(duì)比度、飽和度和色相
    • brightness:亮度調(diào)整因子。當(dāng)為a時(shí),從[max(0, 1-1), 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]中選擇參數(shù),注:0<= a <=0.5;當(dāng)為(a, b)時(shí),從[a, b]中選擇參數(shù)-0.5 <= a <= b <= 0.5
  3. Grayscale

    • 是RandomGrayscale的特例,概率為1。
  4. RandomGrayscale

    • 功能:依概率將圖片轉(zhuǎn)換為灰度圖
    • num_output_channels:輸出通道數(shù),只能設(shè)1或3
    • p:概率值,圖像被轉(zhuǎn)換為灰度圖的概率


      在這里插入圖片描述
  5. RandomAffine

    • 功能:對(duì)圖像進(jìn)行仿射變換,仿射變換是二維的線性變換,由五種基本原子變換構(gòu)成,分別是旋轉(zhuǎn)、平移、縮放、錯(cuò)切和翻轉(zhuǎn)。
    • degrees:旋轉(zhuǎn)角度設(shè)置
    • translate:平移區(qū)間設(shè)置,如(a, b),a設(shè)置寬(width),b設(shè)置高(height),圖像在寬維度平移的區(qū)間為-img_width * a < dx < img_width * a
    • scale:縮放比例(以面積為單位),0到1之間
    • fill_color:填充顏色設(shè)置,默認(rèn)為黑色(0)
    • shear:錯(cuò)切角度設(shè)置,有水平錯(cuò)切和垂直錯(cuò)切。若為a,則僅在x軸錯(cuò)切,錯(cuò)切角度在(-a,a)之間;若為(a,b),則a設(shè)置x軸角度,b設(shè)置y的角度;若為(a,b,c,d),則a,b設(shè)置x軸角度,c,d設(shè)置y軸角度
    • resample:重采樣方式,有NEARSET,BILINEAR,BICUBIC


      在這里插入圖片描述
  6. RandomErasing

    • 功能:對(duì)圖像進(jìn)行隨機(jī)遮擋
    • p:概率值,執(zhí)行該操作的概率
    • scale:遮擋區(qū)域的面積
    • ratio:遮擋區(qū)域長(zhǎng)寬比
    • value:設(shè)置遮擋區(qū)域的像素值,(R,G,B)或(Gray)。如果value值設(shè)置為字符串,則填充隨機(jī)的像素


      在這里插入圖片描述

      在這里插入圖片描述
  7. transforms.Lambda

    • 功能:用戶自定義lambda方法
    • lambd:lambd:lambda匿名函數(shù) lambda [arg1 [, arg2, ..., argn]] : expression


      在這里插入圖片描述

4.2 transforms方法操作

  1. transforms.RandomChoice
    • 功能:從一系列transforms方法中隨機(jī)挑選一個(gè)
transforms.RandomChoice([transforms1, transforms2, transforms3])
  1. transforms.RandomApply
    • 功能:依據(jù)概率執(zhí)行一組transforms操作
transforms.RandomApply([transforms1, transforms2, transforms3], p=0.5)
  1. transforms.RandomOrder
    • 功能:對(duì)一組transforms操作打亂順序
transforms.RandomOrder([transforms1, transforms2, transforms3])

4.3 自定義transforms方法

在這里插入圖片描述

transforms方法是在Compose類的call方法中被調(diào)用的,對(duì)一組transforms方法進(jìn)行for循環(huán),每次循序的挑選并執(zhí)行transforms方法

  • 自定義transforms要素:
    1. 僅接收一個(gè)參數(shù),返回一個(gè)參數(shù)
    2. 注意上下游的輸出和輸入,數(shù)據(jù)類型必須匹配

通過類實(shí)現(xiàn)多參數(shù)傳入,下圖為自定義transforms的基本參數(shù),一個(gè)init,一個(gè)call


在這里插入圖片描述
  • 椒鹽噪聲
    • 椒鹽噪聲又稱為又稱為脈沖噪聲,是一種隨機(jī)出現(xiàn)的白點(diǎn)或者黑點(diǎn),白點(diǎn)稱為鹽噪聲,黑點(diǎn)稱為椒噪聲。
    • 信噪比(SNR):衡量噪聲的比例,圖像中為圖像像素的占比
      下圖為不同信噪比的椒鹽噪聲效果圖:


      在這里插入圖片描述
class AddPepperNoise(object):
    def __init__(self, snr, p):
        self.snr = snr
        self.p = p
    
    def __call__(self, img):
        '''
        添加椒鹽噪聲具體實(shí)現(xiàn)過程
        '''
        return img

5. 數(shù)據(jù)增強(qiáng)策略

在這里插入圖片描述
  • 原則:讓訓(xùn)練集與測(cè)試集更接近
    • 空間位置:平移
    • 色彩:灰度圖,色彩抖動(dòng)
    • 形狀:仿射變換
    • 上下文場(chǎng)景:遮擋,填充
    • ......
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容