您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關(guān)Pytorch中Dataset數(shù)據(jù)處理的示例分析的內(nèi)容。小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過(guò)來(lái)看看吧。
Pytorch系列是了解與使用Pytorch編程來(lái)實(shí)現(xiàn)卷積神經(jīng)網(wǎng)絡(luò)。
學(xué)習(xí)如何對(duì)卷積神經(jīng)網(wǎng)絡(luò)編程;首先,需要了解Pytorch對(duì)數(shù)據(jù)的使用(也是在我們模型流程中對(duì)數(shù)據(jù)的預(yù)處理部分),其中有兩個(gè)包Dataset,DataLoader
。Dataset
是Pytorch
對(duì)于單個(gè)數(shù)據(jù)的處理類(lèi)似于給一堆數(shù)據(jù)進(jìn)行編號(hào),(在有標(biāo)簽的圖像處理中)對(duì)其有序地提取圖像與標(biāo)簽,
而DataLoader
則是一坨一坨的數(shù)據(jù)進(jìn)行批次的處理。
此實(shí)驗(yàn)運(yùn)用的數(shù)據(jù)是北郵鄧偉洪老師的人臉表情包的數(shù)據(jù)集,
當(dāng)然大家也可以自己手動(dòng)做個(gè)二分類(lèi)數(shù)據(jù)集之類(lèi)的就將一幅幅的圖片放圖標(biāo)簽命名的文件夾中即可。
將鄧偉洪老師的RAF-DB
簡(jiǎn)單來(lái)刨析,假設(shè)其只有Image
,沒(méi)有真正的Annotation
等,
則其根路徑(整個(gè)data的大體位置)設(shè)為 root_dir = "D:\data\basic"
(由于以下考慮了Annotation
,"Image
"放入label)標(biāo)簽路徑(data下的label位置)設(shè)為label_dir="Image\aligned(original)"
可參考下圖理解:
假設(shè)aligned
與original
是標(biāo)簽,但是它是真正的圖片的路徑
現(xiàn)在開(kāi)始編程:
因?yàn)槭褂?code>Dataset,即讓新的類(lèi)(MyData
)來(lái)繼承Dataset
需要改寫(xiě) def __getitem__(self,item):
與 def __len__(self):
其中, def __getitem__ (self,item):
輸入一系列圖像的path與圖像的index(組合為一張圖像的詳細(xì)地址),輸出圖像與標(biāo)簽,代碼中默認(rèn)item
為序列號(hào),但是為了方便將item改寫(xiě)為idx;def __len__(self):
輸入一系列圖像的路徑,輸出這些圖像的個(gè)數(shù)。
其他的函數(shù)就可以創(chuàng)新加載自己定義的類(lèi)里。
from torch.utils.data import Dataset #Dataset的包 import os #路徑需要這個(gè) import cv2 # 需要讀取圖片,最好用opencv-python,當(dāng)然也可以用PIL只是我不順手 class MyData(Dataset): #我定義的這個(gè)類(lèi) def __init__(self, root_dir, label_dir): #下面需要使用的變量,在__init__定義好, self.root_dir = root_dir # 根路徑 data在電腦或者服務(wù)器大致的位置 self.label_dir = label_dir # label的位置(這里假設(shè)Image的名字就是label的位置) self.path = os.path.join(self.root_dir, self.label_dir)# 將這個(gè)兩個(gè)合在一起就能找到整體圖片的大致路徑 self.img_path = os.listdir(self.path) #得到整體圖片的路徑(可取其中的一張一張的圖像的名字) def __getitem__(self, idx): # 改寫(xiě)__getitem__(self,item)函數(shù),最后得到圖像,標(biāo)簽 #獲取具體的一幅圖像的名字 img_name = self.img_path[idx] #獲取一幅圖像的詳細(xì)地址 img_item_path = os.path.join(self.root_dir, self.label_dir, img_name) #用opencv來(lái)讀取圖像 img = cv2.imread(img_item_path) #獲取標(biāo)簽(這里簡(jiǎn)單寫(xiě)了aligned與original) label = self.label_dir return img, label def __len__(self): #改寫(xiě)整體圖像的大小 return len(self.img_path) root_dir = "D://data//basic" img_dir = "Image" aligned_label_dir = "aligned" # aligned_label_dir = "Image//aligned" aligned_label_dir = os.path.join(img_dir, aligned_label_dir) original_label_dir = "original" #original_label_dir = "Image//original" original_label_dir = os.path.join(img_dir, original_label_dir) #aligned_data = "D://data//basic//Image//aligned" aligned_data = MyData(root_dir, aligned_label_dir) #original_data = "D://data//basic//Image//original" original_data = MyData(root_dir, original_label_dir) data = aligned_data + original_data # 15339 print(len(aligned_data)) # 15339 print(len(original_data)) # 30678 print(len(data)) img_1, label_1 = data[15338] img_2, label_2 = data[15339] print(label_1) # Image\aligned print(label_2) # Image\original
感謝各位的閱讀!關(guān)于“Pytorch中Dataset數(shù)據(jù)處理的示例分析”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。