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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

PyTorch框架学习五——图像预处理transforms(一)

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

PyTorch框架學(xué)習(xí)五——圖像預(yù)處理transforms(一)

  • 一、transforms運(yùn)行機(jī)制
  • 二、transforms的具體方法
    • 1.裁剪
      • (1)隨機(jī)裁剪:transforms.RandomCrop()
      • (2)中心裁剪:transforms.CenterCrop()
      • (3)隨機(jī)長(zhǎng)寬比裁剪:transforms.RandomCrop()
      • (4)上下左右中心裁剪:transforms.FiveCrop()
      • (5)上下左右中心裁剪后翻轉(zhuǎn):transforms.TenCrop()
    • 2.翻轉(zhuǎn)、旋轉(zhuǎn)
      • (1)依概率p水平翻轉(zhuǎn):transforms.RandomHorizontalFlip()
      • (2)依概率p垂直翻轉(zhuǎn):transforms.RandomVerticalFlip()
      • (3)隨機(jī)旋轉(zhuǎn):transforms.RandomRotation()

一、transforms運(yùn)行機(jī)制

介紹transforms之前先簡(jiǎn)單介紹一下torchvision。

torchvision是PyTorch的計(jì)算機(jī)視覺工具包,包含了一些與CV相關(guān)的處理。有三個(gè)需要重要介紹:

  • torchvision.transforms:包含了常用的圖像預(yù)處理方法,如數(shù)據(jù)中心化、標(biāo)準(zhǔn)化、縮放、裁剪等。
  • torchvision.datasets:包含了常用數(shù)據(jù)集的dataset實(shí)現(xiàn),如MNIST、CIFAR-10、ImageNet等。
  • torchvision.model:包含了常用的預(yù)訓(xùn)練模型,如AlexNet、VGG、ResNet、GoogleNet等。
  • 在transforms中除了具體的預(yù)處理方法之外,有一個(gè)Compose操作,這里提前介紹,它可以將一系列transforms操作有序地組合包裝,以此按順序執(zhí)行每一項(xiàng)操作。

    torchvision.transforms.Compose(transforms)

    參數(shù):

    如:

    >>> transforms.Compose([ >>> transforms.CenterCrop(10), >>> transforms.ToTensor(), >>> ])

    二、transforms的具體方法

    transforms的操作一般的目的是為了圖像預(yù)處理和數(shù)據(jù)增強(qiáng),所謂數(shù)據(jù)增強(qiáng),又稱數(shù)據(jù)增廣、數(shù)據(jù)擴(kuò)增,它是對(duì)訓(xùn)練集進(jìn)行變換,使訓(xùn)練集更豐富,從而讓模型更具泛化能力。下面將介紹二十多種具體的transforms的方法。

    1.裁剪

    (1)隨機(jī)裁剪:transforms.RandomCrop()

    功能:從圖片中隨機(jī)裁剪出尺寸為size的部分,圖像可以是PIL格式或者是張量。

    torchvision.transforms.RandomCrop(size, padding=None, pad_if_needed=False, fill=0, padding_mode='constant')

    參數(shù)如下:

  • size:(序列或int)若為int,則是(size,size)的大小,若為序列如(h,w),則大小為(h,w)。
  • padding:(序列或int,可選)默認(rèn)為None,當(dāng)為整數(shù)a時(shí),上下左右的邊均要填充a個(gè)像素;當(dāng)為(a, b)時(shí),上下兩邊填充b個(gè)像素,左右兩邊填充a個(gè);當(dāng)為(a, b, c, d)時(shí),左、上、右、下分別填充a、b、c、d個(gè)像素。
  • pad_if_need:(布爾型)如果輸入的圖像尺寸小于要裁剪的尺寸size,則填充,以防報(bào)錯(cuò)。
  • fill:padding_mode中constant模式時(shí)設(shè)置填充的像素值,默認(rèn)為0。
  • padding_mode:填充模式,有四種,constant、edge、reflect和symmetric,默認(rèn)為constant,而且目前symmetric模式不支持輸入為張量(Tensor)。constant模式:像素值由fill設(shè)定;edge模式:由圖像邊緣像素決定;reflect模式:鏡像填充,最后一個(gè)像素不鏡像,如[1, 2, 3, 4]→[3, 2, 1, 2, 3, 4, 3, 2];symmetric模式:鏡像填充,最后一個(gè)像素也鏡像,如[1, 2, 3, 4]→[2, 1, 1, 2, 3, 4, 4, 3]。
  • 下面看一下隨機(jī)裁剪的幾個(gè)例子及其效果,變換前圖片的原始尺寸為224×224,如下圖所示:

    (1)隨機(jī)裁剪尺寸為224,padding=16,即四邊都填充16個(gè)像素,就是在256×256的范圍隨機(jī)裁剪224×224的大小,效果如下圖所示:

    transforms.RandomCrop(224, padding=16)


    (2)隨機(jī)裁剪尺寸為224,padding=(16, 64),即左右填充16個(gè)像素,上下填充64個(gè)像素,就是在256×352 的范圍隨機(jī)裁剪224×224的大小,效果如下圖所示:

    transforms.RandomCrop(224, padding=(16, 64))


    (3)與(1)不同之處就在于像素的填充,這里設(shè)定了填充的像素值為(255, 0, 0),效果如下圖所示:

    transforms.RandomCrop(224, padding=16, fill=(255, 0, 0))


    (4)隨機(jī)裁剪的尺寸為512,大于原始圖像的尺寸224,所以pad_if_needed必須設(shè)置為True來進(jìn)行自動(dòng)填充,擴(kuò)大尺寸(填充是隨機(jī)的),效果如下圖所示:

    transforms.RandomCrop(512, pad_if_needed=True)


    (5)與(1)或(3)不同的是,填充模式設(shè)定為‘edge’,效果如下圖所示:

    transforms.RandomCrop(224, padding=64, padding_mode='edge')


    (6)與(1)或(3)或(5)不同的是,填充模式設(shè)定為 ‘reflect’ ,效果如下圖所示:

    transforms.RandomCrop(224, padding=64, padding_mode='reflect')


    (7)最后看一個(gè)綜合一點(diǎn)的:

    transforms.RandomCrop(1024, padding=1024, padding_mode='symmetric')

    (2)中心裁剪:transforms.CenterCrop()

    功能:從圖像中心裁剪圖片,圖片可以是PIL格式或是張量。

    torchvision.transforms.CenterCrop(size)


    例子如下:

    transforms.CenterCrop(128)

    transforms.CenterCrop(512)

    (3)隨機(jī)長(zhǎng)寬比裁剪:transforms.RandomCrop()

    功能:隨機(jī)大小、長(zhǎng)寬比裁剪圖片,圖片可以是PIL格式或是張量。

    torchvision.transforms.RandomResizedCrop(size, scale=(0.08, 1.0), ratio=(0.75, 1.3333333333333333), interpolation=2)

    參數(shù)如下:

  • size:同上。
  • scale:隨機(jī)裁剪的大小區(qū)間,如scale=(0.08, 1.0),即隨機(jī)裁剪出的圖片面積會(huì)在原始面積的0.08倍至1.0倍之間。
  • ratio:隨機(jī)長(zhǎng)寬比的范圍,默認(rèn)為(3/4,4/3)。
  • interpolation:插值方法,有三種,分別為PIL.Image.NEAREST、PIL.Image.BILINEAR、PIL.Image.BICUBIC,默認(rèn)為PIL.Image.BILINEAR。
  • 例子如下:裁剪出來的部分是原來部分面積的0.5倍,但是大小又必須為224不變,所以用了默認(rèn)了插值方法PIL.Image.BILINEAR。

    transforms.RandomResizedCrop(size=224, scale=(0.5, 0.5))

    (4)上下左右中心裁剪:transforms.FiveCrop()

    功能:對(duì)給定圖像的四個(gè)角以及中心進(jìn)行裁剪,圖片可以是PIL格式或是張量,返回一個(gè)包含五個(gè)元素的元組(tuple),一般都要緊跟一個(gè)將元組轉(zhuǎn)變?yōu)閺埩康牟僮?#xff0c;而且還要注意前后代碼尺寸上的匹配

    torchvision.transforms.FiveCrop(size)

    參數(shù)size同上。

    例子如下,緊跟了一個(gè)將元組變換為張量的操作:

    transforms.FiveCrop(112) transforms.Lambda(lambda crops: torch.stack([(transforms.ToTensor()(crop)) for crop in crops])),

    (5)上下左右中心裁剪后翻轉(zhuǎn):transforms.TenCrop()

    功能:在圖像(PIL格式或者是張量)的上下左右四個(gè)角以及中心裁剪出尺寸為size的5張圖片,TenCrop對(duì)這5張圖片進(jìn)行水平或垂直鏡像從而獲得10張圖片。

    torchvision.transforms.TenCrop(size, vertical_flip=False)

    參數(shù)如下:

  • size:同上。
  • vertical_flip:設(shè)置為True時(shí),會(huì)垂直翻轉(zhuǎn),為False時(shí),會(huì)水平翻轉(zhuǎn),默認(rèn)為False。
  • transforms.TenCrop(112, vertical_flip=False) transforms.Lambda(lambda crops: torch.stack([(transforms.ToTensor()(crop)) for crop in crops])),

    2.翻轉(zhuǎn)、旋轉(zhuǎn)

    (1)依概率p水平翻轉(zhuǎn):transforms.RandomHorizontalFlip()

    功能:依概率水平翻轉(zhuǎn),輸入圖像為PIL格式或是張量。

    torchvision.transforms.RandomHorizontalFlip(p=0.5)

    參數(shù):

    例子如下:

    transforms.RandomHorizontalFlip(p=1)

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

    功能:依概率垂直翻轉(zhuǎn),輸入圖像為PIL格式或是張量。

    torchvision.transforms.RandomVerticalFlip(p=0.5)


    例子如下:

    transforms.RandomVerticalFlip(p=1)

    (3)隨機(jī)旋轉(zhuǎn):transforms.RandomRotation()

    功能:隨機(jī)旋轉(zhuǎn)圖片。

    torchvision.transforms.RandomRotation(degrees, resample=False, expand=False, center=None, fill=None)

    參數(shù)如下:

  • degrees:旋轉(zhuǎn)的角度,當(dāng)為a時(shí),在(-a, a)之間選擇旋轉(zhuǎn)角度;當(dāng)為(a, b)時(shí),在(a, b)之間選擇角度。
  • resample:(可選)重采樣方法(以后細(xì)學(xué))。
  • expand:(布爾,可選)若為True,則會(huì)自動(dòng)擴(kuò)大輸出尺寸,以保證原圖信息不丟失;若為False或省略,輸出尺寸保持和輸入一致。
  • center:(可選)旋轉(zhuǎn)中心,以左上角為原點(diǎn)(0,0),默認(rèn)旋轉(zhuǎn)中心為圖像中心點(diǎn)。
  • fill:像素填充值,默認(rèn)為0,只支持pillow>=5.2.0版本。
  • 注意:expand的計(jì)算公式是針對(duì)中心點(diǎn)旋轉(zhuǎn)的,若設(shè)置為左上角旋轉(zhuǎn)或者其他點(diǎn)為旋轉(zhuǎn)中心,則不能保證保持原圖信息。

    下面看幾個(gè)例子:
    (1)中心點(diǎn)旋轉(zhuǎn),范圍(-90度,90度):

    transforms.RandomRotation(90)


    (2)設(shè)置expand保持原圖信息,圖像尺寸自動(dòng)擴(kuò)大:

    transforms.RandomRotation((90), expand=True)


    (3)旋轉(zhuǎn)中心改為左上角:

    transforms.RandomRotation(30, center=(0, 0))

    (4)旋轉(zhuǎn)中心為左上角并進(jìn)行expand:

    transforms.RandomRotation(30, center=(0, 0), expand=True)

    結(jié)果不能保證保持原圖信息:

    總結(jié)

    以上是生活随笔為你收集整理的PyTorch框架学习五——图像预处理transforms(一)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

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