Pytorch關(guān)于Dataset?的數(shù)據(jù)處理
Pytorch系列是了解與使用Pytorch編程來實現(xiàn)卷積神經(jīng)網(wǎng)絡(luò)。
學習如何對卷積神經(jīng)網(wǎng)絡(luò)編程;首先,需要了解Pytorch對數(shù)據(jù)的使用(也是在我們模型流程中對數(shù)據(jù)的預(yù)處理部分),其中有兩個包Dataset,DataLoader
。Dataset
是Pytorch
對于單個數(shù)據(jù)的處理類似于給一堆數(shù)據(jù)進行編號,(在有標簽的圖像處理中)對其有序地提取圖像與標簽,
而DataLoader
則是一坨一坨的數(shù)據(jù)進行批次的處理。
此實驗運用的數(shù)據(jù)是北郵鄧偉洪老師的人臉表情包的數(shù)據(jù)集,
當然大家也可以自己手動做個二分類數(shù)據(jù)集之類的就將一幅幅的圖片放圖標簽命名的文件夾中即可。
將鄧偉洪老師的RAF-DB
簡單來刨析,假設(shè)其只有Image
,沒有真正的Annotation
等,
則其根路徑(整個data的大體位置)設(shè)為 root_dir = "D:\data\basic"
(由于以下考慮了Annotation
,"Image
"放入label)標簽路徑(data下的label位置)設(shè)為label_dir="Image\aligned(original)"
可參考下圖理解:
假設(shè)aligned
與original
是標簽,但是它是真正的圖片的路徑
現(xiàn)在開始編程:
因為使用Dataset
,即讓新的類(MyData
)來繼承Dataset
需要改寫 def __getitem__(self,item):
與 def __len__(self):
其中, def __getitem__ (self,item):
輸入一系列圖像的path與圖像的index(組合為一張圖像的詳細地址),輸出圖像與標簽,代碼中默認item
為序列號,但是為了方便將item改寫為idx;def __len__(self):
輸入一系列圖像的路徑,輸出這些圖像的個數(shù)。
其他的函數(shù)就可以創(chuàng)新加載自己定義的類里。
from torch.utils.data import Dataset #Dataset的包 import os #路徑需要這個 import cv2 # 需要讀取圖片,最好用opencv-python,當然也可以用PIL只是我不順手 class MyData(Dataset): #我定義的這個類 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)# 將這個兩個合在一起就能找到整體圖片的大致路徑 self.img_path = os.listdir(self.path) #得到整體圖片的路徑(可取其中的一張一張的圖像的名字) def __getitem__(self, idx): # 改寫__getitem__(self,item)函數(shù),最后得到圖像,標簽 #獲取具體的一幅圖像的名字 img_name = self.img_path[idx] #獲取一幅圖像的詳細地址 img_item_path = os.path.join(self.root_dir, self.label_dir, img_name) #用opencv來讀取圖像 img = cv2.imread(img_item_path) #獲取標簽(這里簡單寫了aligned與original) label = self.label_dir return img, label def __len__(self): #改寫整體圖像的大小 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)文章
Pandas缺失值填充 df.fillna()的實現(xiàn)
本文主要介紹了Pandas缺失值填充 df.fillna()的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2022-07-07Python 使用@property對屬性進行數(shù)據(jù)規(guī)范性校驗的實現(xiàn)
本文主要介紹了Python 使用@property對屬性進行數(shù)據(jù)規(guī)范性校驗的實現(xiàn),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-10-10