Stary, wyświechtany, ale nieustannie używany dataset do Computer Vision trafia dziś do posta. Dla tych, którzy go nie znają po krotce opiszę co zawiera. Pokażę też jak najszybciej rozpocząć prace z nim w jupyter notebook-u.

Dataset to zbiór danych to treningu czy walidacji w machine learning-u. Część z nich może być "o-label-owanych" a część nie. Co to znaczy? Jeżeli dostarczone dane (tutaj obrazki) powiązane są w zbiorze danych z jakąś pożądaną własnością, mówimy że posiadamy "labeled data". Dzięki temu nie musimy oznaczać danych sami, mając komplet danych do nauki modeli ("wejście" i "wyjście").

Zawartość dataset-u

MNIST to zbiór 70'000 obrazów (60'000 treningowych i 10'000 testowych) w skali szarości, każdy o rozdzielczości 28x28 pikseli przedstawiające różne wersje ręcznie napisanych cyfr (0-9). Każdy z obrazów powiązany jest z wartością liczbową będącą równą cyfrze, którą obraz przedstawia. Oto kilka przykładów:

MNIST dataset: przykładowe obrazy

Jest to zbiór o tyle przyjemny, że :

  • jest mały, bo mieści się cały w pamięci
  • w sposób szybki da się na nim testować różne koncepcje (większe datasety potrzebują wielokrotnie więcej zasobów)

Pobieranie dataset-u

Jeżeli nie masz skonfigurowanego środowiska do pracy z Python-em (w tym jupyter notebook-a) zapraszam do opisu instrukcji instalacji.

Najprostszą metodą pobierania i pracy z datasetem, jaką udało mi się znaleźć jest instalacja pakietu "python-mnist". W oknie konsoli zatem wpisać musimy polecenie:

 pip install python-mnist

Ze względów licencyjnych dane datasetu, należy pobrać z oryginalnej strony. Na szczęście dokumentacja pakietu python-mnist przychodzi to z pomocą. Pokazuje zautomatyzowany sposób pobierania dataseto, do którego potrzebujemy jednak mieś w swoim środowisku klienta git (systemu wersjonowania plików tekstowych). Dla tych, którzy nie mają git-a, komenda która go zainstaluje w Ubuntu to:

sudo apt-get install git

Potem należy sklonować repozytorium kodu, które zawiera skypt pobierający dataset:

git clone https://github.com/bwosh/python-mnist.git

wchodzimy do stworzonego katalogu:

cd python-mnist

i uruchamiamy pobieranie plików:

 ./get_data.sh

po wykonaniu tem operacji w podkatalogu 'data' powinny znaleźć się pliki:

t10k-images-idx3-ubyte
t10k-labels-idx1-ubyte
train-images-idx3-ubyte
train-labels-idx1-ubyte

Nazwy plików i format ich przechowywania mogą wydawać się magiczne, niemniej zainstalowany wcześniej pakiet pythona zajmie się wydobyciem danych do bardziej używalnej formy.

Zobaczmy to w kodzie

Po uruchomieniu jupyter notebooka, wpiszmy poniższy kod:

from mnist import MNIST

mndata = MNIST('./python-mnist/data/')
images, labels = mndata.load_training()
Kod ten importuje bibliotekę i przygotowuje dwie kolekcje:
  • listę obrazów jako wektory o długości 784, każdy z wartością 0-255
  • listę wartości równych prezentowanej cyfrze
Podgląd liczności kolekcji w zbiorze MNIST

Aby zwizualizować cyfry należy dokonać jeszcze kilku czynności:

  • zaimportować bibliotekę wyświetlającą obrazy
  • zaimportować bibliotekę numeryczną
  • przekształcić obraz z wektora 784 to macierzy 28x28
  • wyświetlić obraz z skali szarości

W kolejnej komórce jupyter notebooka napiszmy:

import matplotlib.pyplot as plt
import numpy as np

# Konwersja do typu np.ndarray
sample_image = np.array(images[0])    
# Zmiana rozdzielczości do 28x28
sample_image = sample_image.resize(28,28)

# Dopasowanie wielkości wykresu
plt.figure(figsize=(2,2))  
 # Wyłączenie opisów osi X i Y
plt.axis('off')            
# Pozakanie obrazu w skali szarości
plt.imshow(sample_image, cmap='gray') 

Po uruchomieniu zobaczymy:

Uruchomienie skryptu podglądu zdjęcia

Od tego momentu można zacząć jakieś konkretne prace z datasetem, ale o tym innym razem....