pytorch中圖像的數(shù)據(jù)格式實(shí)例
計(jì)算機(jī)視覺方面朋友都需要跟圖像打交道,在pytorch中圖像與我們平時(shí)在matlab中見到的圖像數(shù)據(jù)格式有所不同。matlab中我們通常使用函數(shù)imread()來輕松地讀入一張圖像,我們?cè)谧兞靠臻g中可看到數(shù)據(jù)的存儲(chǔ)方式是H x W x C的順序(其中H、W、C分別表示圖像的高、寬和通道數(shù),通道數(shù)一般為RGB三通道),另外,其中的每一個(gè)數(shù)據(jù)都是[0,255]的整數(shù)。
在使用pytorch的時(shí)候,我們通常要使用pytorch中torchvision包下面的datasets模塊和transforms模塊。而通常情況下在我們使用了這兩個(gè)模塊之后,所處理的圖像數(shù)據(jù)格式已經(jīng)不是我們所熟知的格式了。
下面按照代碼來進(jìn)行講解:
#導(dǎo)入需要的包和模塊 import torch from torchvision import datasets, transforms import os #transforms指明了需要對(duì)原始圖像做何種變換 data_transforms = transforms.Compose([ transforms.RandomResizedCrop(224), transforms.RandomHorizontalFlip(), transforms.ToTensor(), transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225]) ]) #指明了圖像存放的位置;里面可能有好幾個(gè)文件夾,分別存放不同種類的圖像 data_dir = 'original_data' image_dataset = datasets.ImageFolder(data_dir, data_transforms) dataloader = torch.utils.data.DataLoader(image_dataset, batch_size=4, shuffle=True, num_workers=4)
代碼中首先使用datasets模塊讀取圖像數(shù)據(jù),輸出的圖像類型為PILImage,并且圖像中的每一個(gè)數(shù)據(jù)大小范圍已經(jīng)不再是[0,255],而是[0,1]。datasets模塊下有好幾個(gè)讀取圖像的類,比如CIFAR10、MNIST等能夠直接獲取標(biāo)準(zhǔn)數(shù)據(jù)庫;而我們代碼中所使用的類是ImageFolder,它能夠讀取本地存放的圖像。其中需要指定圖像所在文件路徑和需要對(duì)數(shù)據(jù)進(jìn)行的變換。
從上面的data_transforms變量中我們能夠看出進(jìn)行了多種變換,而Compose就是將多種變換組合起來的方法。data_transforms中一共包含了四個(gè)變換,前兩個(gè)是對(duì)PILImage進(jìn)行的,分別對(duì)其進(jìn)行隨機(jī)大小(默認(rèn)原始圖像大小的0.08-1.0)和隨機(jī)寬高比(默認(rèn)原始圖像寬高比的3/4-4/3)的裁剪,之后resize到指定大小224;以及對(duì)原始圖像進(jìn)行隨機(jī)(默認(rèn)0.5概率)的水平翻轉(zhuǎn)。
第三個(gè)transforms.ToTensor()的變換操作是關(guān)鍵一步,它將PILImage轉(zhuǎn)變?yōu)閠orch.FloatTensor的數(shù)據(jù)形式,這種數(shù)據(jù)形式一定是C x H x W的圖像格式加上[0,1]的大小范圍。它將顏色通道這一維從第三維變換到了第一維。
后面的Normalize變換是對(duì)tensor這種數(shù)據(jù)格式進(jìn)行的,它的操作是用給定的均值和標(biāo)準(zhǔn)差分別對(duì)每個(gè)通道的數(shù)據(jù)進(jìn)行正則化。具體來說,給定均值(M1,...,Mn),給定標(biāo)準(zhǔn)差(S1,..,Sn),其中n是通道數(shù)(一般是3),對(duì)每個(gè)通道進(jìn)行如下操作:
output[channel] = (input[channel] - mean[channel]) / std[channel]
經(jīng)過上面一系列的轉(zhuǎn)換之后,我們可以得出的結(jié)論是,圖像的數(shù)據(jù)格式首先在維度的排序上發(fā)生了改變,其次數(shù)據(jù)的范圍也發(fā)生了改變。
以上這篇pytorch中圖像的數(shù)據(jù)格式實(shí)例就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python實(shí)現(xiàn)短網(wǎng)址ShortUrl的Hash運(yùn)算實(shí)例講解
這篇文章主要介紹了Python實(shí)現(xiàn)短網(wǎng)址ShortUrl的Hash運(yùn)算,較為詳細(xì)的分析了Python短網(wǎng)址運(yùn)算的算法原理與相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2015-08-08python3實(shí)現(xiàn)二叉樹的遍歷與遞歸算法解析(小結(jié))
這篇文章主要介紹了python3實(shí)現(xiàn)二叉樹的遍歷與遞歸算法解析(小結(jié)),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07python提取具有某種特定字符串的行數(shù)據(jù)方法
今天小編就為大家分享一篇python提取具有某種特定字符串的行數(shù)據(jù)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-12-12Python構(gòu)建XML樹結(jié)構(gòu)的方法示例
這篇文章主要介紹了Python構(gòu)建XML樹結(jié)構(gòu)的方法,結(jié)合實(shí)例形式分析了Python創(chuàng)建與打印xml數(shù)結(jié)構(gòu)的實(shí)現(xiàn)步驟與相關(guān)操作技巧,需要的朋友可以參考下2017-06-06