close

CIFAR資料集: 點擊我

下載CIFAR-10資料集(163MB): 點擊我

下載CIFAR-100資料集(161MB): 點擊我

 

以CIFAR-10做說明,

點選上方下載連結後會取得'cifar-10-python.tar.gz',

接著手動先解壓縮檔案,

取得cifar-10-batches-py資料夾,

裡面有6個檔案是我們所需要的,

分別為

'data_batch_1', 'data_batch_2',

'data_batch_3', 'data_batch_4',

'data_batch_5', 'test_batch',

如何讀取這些檔案呢?

請參考如下:

import pickle

def unpickle(file):

     with open(file, 'rb') as fo:

          dict = pickle.load(fo, encoding='bytes')

     return dict

datasets = unpickle(data_batch_1) #選擇要讀取的檔案

print(datasets) #查看檔案內容

檔案內容大致如下:

{b'batch_label' : b'training batch 1 of 5', b'labels' : [6,9,9,4,...],

b'data' : arrary([[59, 43, 50, ..., 140, 84, 72],

[154, 126, 105, ..., 139, 142, 144],

...,

[]], dtype=uint8),

b'filenames' : [b'leptodactylus_pentadactylus_s_000004.png',...]}

 

接著我們要把這些內容轉換成影像保存下來,

並且依據各類別分別放置同類型影像,

首先我們發現資料保存類別的資訊是0~9做為代表,

我們在保存過程中順便更換類別名稱方便查詢,

假設都已經讀取到檔案了上述的內容,

接續寫法如下:

import os

import numpy as np

import PIL import Image

labels = datasets[b'labels'] #如果忘了datasets怎麼來, 請往上查看

data = datasets[b'data']

filenames = datasets[b'filenames']

 

classnames = ['airplane', 'automobile', 'bird', 'cat', 'deer', 'dog', 'frog',

                     'horse', 'ship', 'truck']

for i in range(10):

    os.mkdir('./'+classnames[i]) #建立各類別目錄, 後續會將影像存入對應目錄內

for i in range(len(labels)):

     savefilename = str(filenames[i], encoding='utf-8') #將byte格式轉換為string

     saveData = data[i].reshape(3, 32, 32).astype('uint8')

     R, G, B = Image.fromarray(saveData[0]), 

                   Image.fromarray(saveData[1]), 

                   Image.fromarray(saveData[2])

     img = Image.merge('RGB', (R, G, B))

     img.save('./' + classnames[labels[i]] + '/' + savefilename)

 

arrow
arrow

    楓綺 發表在 痞客邦 留言(0) 人氣()