Obrazowanie biomedyczne
Temat: Ekstrakcja wybranych cech obrazów za pomocą Pythona w celu przygotowania danych do uczenia maszynowego za pomocą H2O
Elżbieta Tchorowska (kierownik projektu)
Karolina Herlender
Mateusz Pawluk
Mateusz Piórko
W artykule zostaną podane implementacje miar statystycznych wykorzystanych w procesie wyliczania wybranych cech obrazów na potrzeby zadania klasyfikacji obrazów. Ekstrakcja cech będzie konieczna w procesie tworzenia sztucznej sieci neuronowej służącej do rozpoznawania obrazów. Zostaną wyjaśnione cechy dla zbioru obrazów kolorowych 32x32 piksele. Proces musi składać się z konwersji obrazu kolorowego na obraz w skali szarości, a następnie wybrane cechy obrazów powinny zostać wyliczone za pomocą środowiska Python. Wszystkie dane zostaną przekazane na wejście sieci neuronowej w celu nauczenia jej odpowiedniej klasyfikacji. Do zadania zostanie wykorzystana sieć neuronowa.
Zbiór danych jest zbiorem zdjęć kolorowych o wymiarach 32x32 piksele. Zbiór zawiera 50 tysięcy zdjęć. Obrazy są podzielone na 10 klas:
Przykładowy obraz:
Jak widać, obraz jest bardzo mały, stąd nie można użyć jakichkolwiek ręcznych metod analizy. Wszystko musi zostać zrobione automatycznie.
Sieć neuronowa przyjmie na wejście dwa pliki csv, które zawierają 32 cechy w kolumnach dla wszystkich obrazów oraz etykiety klas wskazanych we wprowadzeniu.
W pierwszym kroku, obraz musi zostać zmieniony na obraz w odcieniach szarości. Wykonano to za pomocą funkcji rgb2gray(). Konwersję na odcienie szarości wykorzystuje się z reguły w analizie i klasyfikacji zdjęć, gdyż brak koloru nie zaburza segmentacji obrazów, a także obrazy tego typu są przetwarzane o wiele szybciej.
W kolejnym kroku należy wydobyć cechy obrazu. Zdecydowano się na użycie 33 cech, które zostaną opisane poniżej.
Wczytany obraz był podawany na wejście algorytmom mającym na celu wyliczenie cech numerycznych ze wszystkich obrazów. Użyto wbudowanych bibliotek Pythona, takich jak mahotas. Krótki opis wykorzystanych cech poniżej.
1. 14 cech Haralicka
15. odchylenie standardowe / std(pixs, axis=0)/ :
|x2-x2|
16. średnia arytmetyczna / mean(pixs)/ :
a1+a2+…+ann
17. mediana / median(pixs) /:
n+12 lub n2+n2+12
18. mediana absolutnego odchylenia / median(np.abs(pixs - med)) /:
i=1n|zi-x|n
19. wariancja / var(pixs) / :
E|(X-μ)2|
20. wartość minimalna pikseli / min(pixs) /:
min(X)
21. wartość maksymalna pikseli / max(pixs)/:
max(X)
22-24. wartość 25., 50. I 75. kwantyla / percentile(pixs, n) /:
PX-∞,xp≥p oraz PXxp,∞≥1-p
25. średnia geometryczna / gmean(pixs) / :
na1*a2*…*an
26. kurtoza / kurtosis(pixs) / :
μ4σ4-3
27. skośność / skew(pixs) / :
μ-ds
28. entropia / entropy(pixs) / :
-x*log2p
29. błąd standardowy średnich wartości / sem(pixs) /:
sN
30. środek masy / measurements.center_of_mass(nppixs) / :
kmkrkkmk
31. contrast / contrast(pixs) / :
α(α4)n
32. pierwiastek sum / square_of_sums(pixs)/:
nxi
Posiadając dane umożliwiające uczenie sieci przystąpiono do konstrukcji sieci neuronowej. Zaprojektowany model to perceptron wielowarstwowy uczony pod nadzorem.
Do wygenerowania sieci i nauczenia jej danych, skorzystano ze środowiska H2O i dostępnego w nim modelu Deep Learning.
Eksperyment przeprowadzono dla kilku funkcji aktywacji, wynik był jednak zawsze podobny:
airplane
automobile
bird
cat
deer
dog
frog
horse
ship
truck
Error
Rate
106
4
89
8
323
289
84
9
31
0.8990
943 / 1,049
120
niobe666