1. 程式人生 > 程式設計 >pytorch中影象的資料格式例項

pytorch中影象的資料格式例項

計算機視覺方面朋友都需要跟影象打交道,在pytorch中影象與我們平時在matlab中見到的影象資料格式有所不同。matlab中我們通常使用函式imread()來輕鬆地讀入一張影象,我們在變數空間中可看到資料的儲存方式是H x W x C的順序(其中H、W、C分別表示影象的高、寬和通道數,通道數一般為RGB三通道),另外,其中的每一個數據都是[0,255]的整數。

在使用pytorch的時候,我們通常要使用pytorch中torchvision包下面的datasets模組和transforms模組。而通常情況下在我們使用了這兩個模組之後,所處理的影象資料格式已經不是我們所熟知的格式了。

下面按照程式碼來進行講解:

#匯入需要的包和模組
import torch
from torchvision import datasets,transforms
import os
 
#transforms指明瞭需要對原始影象做何種變換
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])
  ])
 
#指明瞭影象存放的位置;裡面可能有好幾個資料夾,分別存放不同種類的影象
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模組讀取影象資料,輸出的影象型別為PILImage,並且影象中的每一個數據大小範圍已經不再是[0,255],而是[0,1]。datasets模組下有好幾個讀取影象的類,比如CIFAR10、MNIST等能夠直接獲取標準資料庫;而我們程式碼中所使用的類是ImageFolder,它能夠讀取本地存放的影象。其中需要指定影象所在檔案路徑和需要對資料進行的變換。

從上面的data_transforms變數中我們能夠看出進行了多種變換,而Compose就是將多種變換組合起來的方法。data_transforms中一共包含了四個變換,前兩個是對PILImage進行的,分別對其進行隨機大小(預設原始影象大小的0.08-1.0)和隨機寬高比(預設原始影象寬高比的3/4-4/3)的裁剪,之後resize到指定大小224;以及對原始影象進行隨機(預設0.5概率)的水平翻轉。

第三個transforms.ToTensor()的變換操作是關鍵一步,它將PILImage轉變為torch.FloatTensor的資料形式,這種資料形式一定是C x H x W的影象格式加上[0,1]的大小範圍。它將顏色通道這一維從第三維變換到了第一維。

後面的Normalize變換是對tensor這種資料格式進行的,它的操作是用給定的均值和標準差分別對每個通道的資料進行正則化。具體來說,給定均值(M1,...,Mn),給定標準差(S1,..,Sn),其中n是通道數(一般是3),對每個通道進行如下操作:

output[channel] = (input[channel] - mean[channel]) / std[channel]

經過上面一系列的轉換之後,我們可以得出的結論是,影象的資料格式首先在維度的排序上發生了改變,其次資料的範圍也發生了改變。

以上這篇pytorch中影象的資料格式例項就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。