溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

Pytorch中Dataset數(shù)據(jù)處理的示例分析

發(fā)布時(shí)間:2021-12-27 10:08:16 來(lái)源:億速云 閱讀:149 作者:小新 欄目:開(kāi)發(fā)技術(shù)

這篇文章給大家分享的是有關(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。DatasetPytorch對(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)"

    可參考下圖理解:

    Pytorch中Dataset數(shù)據(jù)處理的示例分析

    假設(shè)alignedoriginal是標(biāo)簽,但是它是真正的圖片的路徑

    Pytorch中Dataset數(shù)據(jù)處理的示例分析

    Pytorch中Dataset數(shù)據(jù)處理的示例分析

     現(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ò),可以把它分享出去讓更多的人看到吧!

    向AI問(wèn)一下細(xì)節(jié)

    免責(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)容。

    AI