国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

第二章 數(shù)據(jù)處理篇:transforms

這篇具有很好參考價值的文章主要介紹了第二章 數(shù)據(jù)處理篇:transforms。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

教程參考:
https://pytorch.org/tutorials/
https://github.com/TingsongYu/PyTorch_Tutorial
https://github.com/yunjey/pytorch-tutorial
詳細(xì)的transform的使用樣例可以參考:ILLUSTRATION OF TRANSFORMS


為什么要使用transforms

你得到的原始數(shù)據(jù),可能并不是你期望的用于模型訓(xùn)練的數(shù)據(jù)的形式,比如數(shù)據(jù)中圖像的大小不同、數(shù)據(jù)的格式不對。這時就需要你對數(shù)據(jù)進行統(tǒng)一的處理,torchvision.transforms就提供了一些幫助我們進行數(shù)據(jù)處理的簡易手段。

在pytorch官方教程最開始,給了這樣一個示例。
示例中使用自帶的datasets:FashionMNIST,為了便于訓(xùn)練,對于原始數(shù)據(jù)和label分別使用了transform的方法。
對于數(shù)據(jù)本身,使用的方法是 ToTensor(),
對于標(biāo)簽,使用的方法是one-hot。
在后面的部分我們會詳細(xì)介紹一下不同的transform方法。

import torch
from torchvision import datasets
from torchvision.transforms import ToTensor, Lambda

ds = datasets.FashionMNIST(
    root="data",
    train=True,
    download=True,
    transform=ToTensor(),
    target_transform=Lambda(lambda y: torch.zeros(10, dtype=torch.float).scatter_(0, torch.tensor(y), value=1))
)

torchvision.transforms中提供了多個方法,并且這些方法可以使用Compose進行連接,并按順序執(zhí)行。其中的大部分transforms方法都可以接受PIL圖像和tensor圖像作為輸入,當(dāng)然也有一部分在輸入上有限制。

transforms方法舉例

我們使用opencv讀入一張cifar10中的圖片作為例子,并將其通道從BGR轉(zhuǎn)為RGB通道。使用opencv讀入的圖片,為numpy.ndarray格式。下圖是我們的例子,一個類別為airplane的圖像。
第二章 數(shù)據(jù)處理篇:transforms

ToTensor()

ToTensor()方法可以把一個PIL圖像或者numpy.ndarray數(shù)據(jù)轉(zhuǎn)成FloatTensor的形式,并且將圖像規(guī)范化到0和1之間。
更細(xì)致地來說,它會把一共PIL圖像,或者范圍在[0,255]的大小為(HxWxC)的numpy.ndarray轉(zhuǎn)成一個大小為(CxHxW)的范圍在[0.0,1.0]的floattensor。ndarray數(shù)據(jù)的dtype必須是np.uint8。
第二章 數(shù)據(jù)處理篇:transforms

使用ToTensor()方法對我們的img進行處理,可以看到它原本為uint8的ndarray,變成了float32的tensor,它的形狀從(32, 32, 3)轉(zhuǎn)為(3, 32, 32),并且它的像素值的大小從51 到 255被轉(zhuǎn)變?yōu)?.2到1.0。

我們也可以將圖像讀取為PIL Image的形式,并使用同樣的方法處理。得到的結(jié)果是完全相同的。
第二章 數(shù)據(jù)處理篇:transforms

Normalize()

Normalize()方法可以把一個tensor數(shù)據(jù)進行歸一化/標(biāo)準(zhǔn)化處理。在使用時,需要你提供數(shù)據(jù)的均值和方差,Normalize()會對輸入數(shù)據(jù)的每一個通道進行歸一化處理。使用的方法是:
o u t p u t [ c h a n n e l ] = i n p u t [ c h a n n e l ] ? m e a n [ c h a n n e l ] s t d [ c h a n n e l ] output[channel] = \frac{input[channel] - mean[channel]}{std[channel]} output[channel]=std[channel]input[channel]?mean[channel]?
要注意它的輸入是tensor格式,所以一般把它放到ToTensor()后面使用。
使用之后數(shù)據(jù)的大小類型都沒有發(fā)生變化,但是值的范圍發(fā)生了變化。
第二章 數(shù)據(jù)處理篇:transforms

Geometry

主要對圖像的大小形狀等進行調(diào)整,沒有改變圖像的顏色信息。

transforms.Resize()

torchvision.transforms.Resize(size, interpolation=InterpolationMode.BILINEAR, max_size=None, antialias='warn')

Resize()的輸入可以是PIL圖像也可以是tensor。給定一張圖片,Resize()會對圖像的長款進行縮放,把它變成我們期望的大小。

輸入的size可以是一個整數(shù)也可以是一個序列[h,w],如果是單個整數(shù)的話,則被認(rèn)為是期望的短邊的大小,長邊會按比例縮放。
輸入的interpolation是一個插值方法。
輸入max_size定義了一個目標(biāo)圖像的長邊大小的上限,如果超過上限,則會重新resize。

transforms.CenterCrop( size )

CenterCrop()的輸入可以是PIL圖像也可以是Tensor。給定一張圖片,CenterCrop()會從圖中心開始對圖像進行裁剪,只保留我們期望的大小。假如輸入的圖像大小比我們期望的size小,則會在圖像周圍進行補0操作。
下圖的第一張圖為32x32大小的原圖,第二張圖為10x10的crop結(jié)果,第三張圖為40x40的crop結(jié)果。
第二章 數(shù)據(jù)處理篇:transforms

transforms.RandomCrop(size)

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

RandomCrop()的輸入可以是PIL圖像也可以是Tensor。給定一張圖像,RandomCrop()會在隨機位置對圖像進行裁剪

輸入的size可以是一個整數(shù)也可以是一個序列[h,w],如果是單個整數(shù)的話,認(rèn)為crop的圖像的大小是[size,size]。
輸入的padding可以是一個整數(shù)也可以是一個序列,如果是一個整數(shù),會使用這個整數(shù)對所有的邊進行padding。如果是一個長度為2的序列,則會分別用來擴充left/right和top/bottom。如果是一個長度為4的整數(shù),則分別對應(yīng)了每一個邊。
輸入的padding_mode有四個選項,分別是constant(常數(shù)填充), edge(邊緣填充),reflect(鏡像填充),symmetric (對稱填充)。
鏡像填充在填充時以邊界為鏡面形成鏡像。對稱填充則是使用對稱值。具體來說,對[1,2]在左右進行一個像素大小的填充,使用鏡像填充得到的結(jié)果為[2,1,2,1],使用對稱填充得到的結(jié)果為[1,1,2,2]。
下圖的第一張圖為32x32大小的原圖,第二張和第三張為10x10的crop結(jié)果,因為randomcrop,所以兩個圖的結(jié)果不一樣。
第二章 數(shù)據(jù)處理篇:transforms

transforms.RandomResizedCrop()

torchvision.transforms.RandomResizedCrop(size, scale=(0.08, 1.0), ratio=(0.75, 1.3333333333333333), interpolation=InterpolationMode.BILINEAR, antialias: Optional[Union[str, bool]] = 'warn')

RandomResizedCrop()的輸入可以是PIL圖像也可以是Tensor。給定一張圖像,RandomResizedCrop()會在隨機位置對圖像進行隨機大小的裁剪,并把它resize成期望的大小。

輸入的size可以是一個整數(shù)也可以是一個序列[h,w],如果是單個整數(shù)的話,認(rèn)為crop的圖像的大小是[size,size]。
輸入的scale要求是一個tuple,定義了crop的區(qū)域大小的下限和上限,它使用的是一個基于原圖大小的比例值。
輸入的ratio要求是一個tuple,定義了crop區(qū)域的長寬比的下限和上限。
scale和ratio的區(qū)別是,scale代表了取長寬的基準(zhǔn),ratio是在這個基準(zhǔn)上參考的長寬比。
輸入的interpolation要求是一個插值方法,在RandomResizedCrop()中沒有padding,因為隨即裁剪得到的圖像會使用插值方法resize到期望的大小。
下圖的第一張圖為32x32大小的原圖,第二張和第三張為40x40的crop結(jié)。
第二章 數(shù)據(jù)處理篇:transforms

transforms.FiveCrop(size)

FiveCrop()的輸入可以是PIL圖像也可以是Tensor,給定一張圖像,獲得圖像四個角和中心的crop結(jié)果。
要注意,F(xiàn)iveCrop()返回的結(jié)果是五張圖,而不是一張圖。
對于一個大小為(b, c, h, w)的tensor的輸入,它返回的結(jié)果為(b, ncrop, c, size_h, size_w)。
第二章 數(shù)據(jù)處理篇:transforms

transforms.TenCrop(size, vertical_flip = False)

TenCrop()和FiveCrop()類型,只不過在其基礎(chǔ)上增加了翻轉(zhuǎn)。默認(rèn)是使用水平翻轉(zhuǎn),如果vertical_clip設(shè)為True,就會使用垂直翻轉(zhuǎn)。
第二章 數(shù)據(jù)處理篇:transforms

RandomHorizontalFlip and RandomVerticalFlip

torchvision.transforms.RandomHorizontalFlip(p=0.5)

torchvision.transforms.RandomVerticalFlip(p=0.5)

兩個函數(shù)的輸入可以是PIL圖像也可以是tensor。
輸入P代表反轉(zhuǎn)圖像的概率,默認(rèn)為0.5,即有50%的概率該圖像會被翻轉(zhuǎn)。

RandomRotation()

torchvision.transforms.RandomRotation(degrees, interpolation=InterpolationMode.NEAREST, expand=False, center=None, fill=0)

RandomRotation()的輸入可以是PIL圖像也可以是tensor。

輸入degrees可以是一個整數(shù)或者一個序列。如果是整數(shù)則代表旋轉(zhuǎn)的范圍是 - degrees,+ degrees,如果是一組數(shù)則分別代表了最小值和最大值。
輸入interpolation是一個插值方法。
輸入expand代表是否要對圖片進行擴展,經(jīng)過旋轉(zhuǎn)后圖片的形狀發(fā)生變化,如果expand = False,則會默認(rèn)保持輸出和輸入圖像大小一致。
輸入center代表旋轉(zhuǎn)中心,默認(rèn)是圖片中心。
輸入fill代表填充圖片邊界外 區(qū)域所用的數(shù)值,默認(rèn)是0。

第一行的是expand = False時隨機旋轉(zhuǎn)的結(jié)果,輸出圖像和輸入圖像保持一樣的大小。第二行是expand = True時的結(jié)果,輸出圖像的大小發(fā)生了變化。
第二章 數(shù)據(jù)處理篇:transforms

Color

主要對圖像的顏色信息進行調(diào)整,沒有改變圖像的形狀大小。

ColorJitter()

torchvision.transforms.ColorJitter(brightness: Union[float, Tuple[float, float]] = 0, contrast: Union[float, Tuple[float, float]] = 0, saturation: Union[float, Tuple[float, float]] = 0, hue: Union[float, Tuple[float, float]] = 0)

ColorJitter()的輸入可以是PIL圖像也可以是tensor。假如輸入的是tensor,期望tensor的數(shù)據(jù)格式為[…, 1 or 3, H, W]。ColorJitter()可以隨即調(diào)整圖像的亮度,對比度,飽和度,色調(diào)等。
可以看到使用ColorJitter()后只有圖像的顏色發(fā)生了變化,幾何信息沒有受到影響。
第二章 數(shù)據(jù)處理篇:transforms

RandomGrayscale(p = 0.1)

RandomGrayscale()的輸入可以是PIL圖像是也可以是tensor,但是要求tensor的通道數(shù)是3。RandomGrayscale()有p的概率將一個圖像轉(zhuǎn)換為灰度圖。

GaussianBlur(kernel_size, sigma=(0.1, 2.0))

GaussianBlur()的輸入可以是PIL圖像也可以是tensor。給定一張圖像,它可以隨機使用高斯模糊來把圖像變得模糊。

輸入kernel_size是一個整數(shù)或者序列,表示高斯核的大小。
輸入sigma是代表標(biāo)準(zhǔn)差的上下界。

下圖為kernel_size = 5時的結(jié)果。
第二章 數(shù)據(jù)處理篇:transforms

RandomInvert(p=0.5)

RandomInvert()的輸入可以是PIL圖像也可以是tensor。給定一張圖像,RandomInvert()有p的概率翻轉(zhuǎn)圖像的顏色。
第二章 數(shù)據(jù)處理篇:transforms

Composition

主要是不同的transforms的組合方式。

Compose(transforms)

Compose()將多個transforms方法組合在一起,在使用時會按順序進行。
如以下例子,首先將圖片進行CenterCrop,然后轉(zhuǎn)變?yōu)閠ensor格式,最后又將圖像的dtype變?yōu)閒loat。

>>> transforms.Compose([
>>>     transforms.CenterCrop(10),
>>>     transforms.PILToTensor(),
>>>     transforms.ConvertImageDtype(torch.float),
>>> ])

Compose()方法可以用torch.nn.Sequential()替代。

RandomApply(transforms, p)

RandomApply()將多個transforms方法組合在一起,在使用時按照概率p決定是否執(zhí)行,要么全都執(zhí)行,全么全都不執(zhí)行。

RandomChoice(transforms,p)

RandomChoice() 參考random.choices方法,從多個transforms方法中選擇一個使用。

RandomOrder(transforms)

RandomOrder()將多個transforms方法而在一起,在使用時會按隨機順序進行。

Miscellaneous

RandomErasing()

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

RandomErasing()方法的輸入必須是tensor,這個函數(shù)不支持PIL圖像。給定一個圖像,RandomErasing()方法會隨機選擇圖像中的一塊并擦除他的元素值。

輸入p代表執(zhí)行擦除操作的概率。
輸入scale代表擦除區(qū)域占輸入圖像的范圍。
輸入ratio代表擦除區(qū)域的長寬比。
輸入value代表擦除后用來替換的值。
輸入inplace代表是否在原圖像上進行操作。

因為輸入必須是tensor,所以只能放在ToTensor()后面使用。

>>> transform = transforms.Compose([
>>>   transforms.RandomHorizontalFlip(),
>>>   transforms.PILToTensor(),
>>>   transforms.ConvertImageDtype(torch.float),
>>>   transforms.Normalize((0.485, 0.456, 0.406), (0.229, 0.224, 0.225)),
>>>   transforms.RandomErasing(),
>>> ])

Lambda(lambda)

Lambda()就是在最開始的例子中,target_transform使用的方法。

該例子定義了一個one-hot編碼的函數(shù),對于輸入的整數(shù)類型的圖像類別,可以將其轉(zhuǎn)為特殊的one-hot編碼格式

target_transform=Lambda(lambda y: torch.zeros(10, dtype=torch.float).scatter_(0, torch.tensor(y), value=1))

Auto-Augmentation

pytorch 提供了一些policy供使用者選擇,比如 IMAGENET, CIFAR10 and SVHN. 依靠這些policy,使用者可以直接套用前人的augmentation方法,而不需要自己編寫代碼。

  • AutoAugment(policy) 使用你給定的policy執(zhí)行augmentation方法。
  • RandAugment() https://arxiv.org/abs/1909.13719
  • TrivialAugmentWide() https://arxiv.org/abs/2103.10158
  • AugMix() https://arxiv.org/abs/1912.02781

之后有時間的話再介紹一下別的augmentation常用的包。文章來源地址http://www.zghlxwxcb.cn/news/detail-480929.html

到了這里,關(guān)于第二章 數(shù)據(jù)處理篇:transforms的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 【RabbitMQ教程】第二章 —— RabbitMQ - 簡單案例

    【RabbitMQ教程】第二章 —— RabbitMQ - 簡單案例

    ?????????????????????????????????????????????????????????????????? ?? 【 R a b b i t M Q 教程】第二章—— R a b b i t M Q ? 簡單案例 color{#FF1493}{【RabbitMQ教程】第二章 —— RabbitMQ - 簡單案例} 【 R abbi tMQ 教程】第二章 —— R abbi tMQ ? 簡單案例

    2024年02月08日
    瀏覽(17)
  • [第二章—Spring MVC的高級技術(shù)]  2.3 處理異常

    [第二章—Spring MVC的高級技術(shù)] 2.3 處理異常

    各位小猿,程序員小猿開發(fā)筆記,希望大家共同進步。 引言 我是誰——異常處理。 來自那——所有功能正常運行,但出現(xiàn)錯誤 怎么辦——如何處理異常和響應(yīng)客戶端 我是誰——Spring框架中的一個注解 用在哪——應(yīng)用在控制器類或方法上 什么用——用于在控制器方法中指定

    2024年01月22日
    瀏覽(31)
  • rust教程 第二章 —— rust基礎(chǔ)語法詳解

    rust教程 第二章 —— rust基礎(chǔ)語法詳解

    首先要講解的便是變量,如果你有其它語言基礎(chǔ),相信還是比較好理解的 我們的電腦中,很重要的一個性能指標(biāo)便是內(nèi)存大小,而所有的程序便是運行在內(nèi)存中的: 而變量,就是在這個內(nèi)存中,申請一塊屬于自己可以調(diào)度的內(nèi)存塊,有了這塊內(nèi)存,我們就能用它來計算、存

    2023年04月25日
    瀏覽(33)
  • 教程 | VeriStand硬件在環(huán)仿真測試第二章

    ? ? ? ?在上一章節(jié)中我們已經(jīng)安裝好了MATLAB和VeriStand軟件,并且配置了MATLAB和VeriStand編譯器的聯(lián)動,這樣就完成了VeriStand硬件在環(huán)仿真測試中軟件環(huán)境的搭建。 ? ? ?本文承接上一章中的內(nèi)容,在完成了軟件環(huán)境的配置后,我們就可以開始搭建MATLAB和VeriStand硬件在環(huán)仿真系

    2023年04月22日
    瀏覽(26)
  • 【STM32教程】第二章 通用輸入輸出口GPIO

    【STM32教程】第二章 通用輸入輸出口GPIO

    資料下載鏈接: 鏈接:https://pan.baidu.com/s/1hsIibEmsB91xFclJd-YTYA?pwd=jauj? 提取碼:jauj? ? GPIO(General Purpose Input Output)意思是通用輸入輸出口可配置為8種輸入輸出模式,其引腳電平:0V~3.3V,部分引腳可容忍5V(容忍5V的意思是可以在這個端口輸入5V,相當(dāng)于輸入一個高電平,而輸

    2024年02月09日
    瀏覽(102)
  • 《EDA技術(shù)實用教程(第六版(黃繼業(yè), 潘松))》學(xué)習(xí)筆記——第二章

    《EDA技術(shù)實用教程(第六版(黃繼業(yè), 潘松))》學(xué)習(xí)筆記——第二章

    PLD(Programmable Logic Device):可編程邏輯器件 RAM(Random Access Memory):隨機訪問存儲器 DRAM(Dynamic Random Access Memory):動態(tài)隨機訪問存儲器 SRAM(Static Random Access Memory):靜態(tài)隨機訪問存儲器 ROM(Read-Only Memory):只讀存儲器 PROM(Programmable Read-Only Memory):可編程只讀存儲器

    2024年01月18日
    瀏覽(58)
  • Oracle-第二章-數(shù)據(jù)類型

    1.1四則運算(加減乘除) 1.2取余(mod函數(shù)) 1.3截?。╰runc函數(shù),round函數(shù)-四舍五入-常用) 1.4值(abs函數(shù)) 1.5乘方(power函數(shù)) 1.6平方根(sqrt函數(shù)) 1.7向上取整(ceil函數(shù)) 1.8向下取整(floor函數(shù)) 1.9偽隨機數(shù)(dbms_random.value函數(shù)-在oracle中很少用) 1.10函數(shù)組合用法 1.11其他

    2024年02月08日
    瀏覽(29)
  • 第二章-數(shù)據(jù)傳輸安全

    第二章-數(shù)據(jù)傳輸安全

    VPN虛擬專用網(wǎng) :在ISP運營商公用網(wǎng)絡(luò)中搭建專用的安全數(shù)據(jù)通道 VPN :隧道 – 封裝技術(shù) 常見VPN :IPSec VPN、MPLS VPN、GRE VPN、SangFor VPN、PPTP VPN、L2TP VPN / L2F VPN 1)按應(yīng)用場景分(業(yè)務(wù)類型) Client-LAN VPN(access VPN)客戶端到網(wǎng)絡(luò):PPTP VPN、L2TP VPN / L2F VPN、SSL VPN、IPSec VPN LAN-LAN V

    2024年01月23日
    瀏覽(26)
  • 大數(shù)據(jù)之路-日志采集(第二章)

    大數(shù)據(jù)之路-日志采集(第二章)

    阿里巴巴的日志采集體系方案包括兩大體系: Ap us.JS Web(基于瀏覽器)日志采集技術(shù)方案: UserTrack APP 端(無線客戶端 日志采集技術(shù)方案。 本章從瀏覽器的頁面日志采集、無線客戶端的日志采集以及我們遇到的日志采集挑戰(zhàn)三塊內(nèi)容來闡述間里巴巴的日志采集經(jīng)驗。 瀏覽器

    2024年01月25日
    瀏覽(25)
  • 【第二章:數(shù)據(jù)的表示和運算】

    【第二章:數(shù)據(jù)的表示和運算】

    探討的兩大主題:一步步遞進 那么現(xiàn)在就需要探究 數(shù)據(jù)如何以2進制的形式在計算機中表示的呢?? 那么還有就是計算機如何進行數(shù)據(jù)的算術(shù)和邏輯運算的?? 我們平常使用的是10進制的數(shù)據(jù),然而計算機能夠識別的是2進制的01序列串。 主要是權(quán)重的不同。一方面符號表示

    2024年02月04日
    瀏覽(26)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包