
Jak sztuczna inteligencja widzi obrazy?
Cześć! Z pewnością słyszałeś o sztucznej inteligencji oraz jej postępach we wszystkich dziedzinach naszego życia.
Czy zastanawiałeś się kiedyś, jak taka sieć neuronowa widzi obrazy, a raczej jak je przetwarza?
Postanowiłem zrobić prosty eksperyment i podzielić się z Wami rezultatami, które otrzymałem. Słowem wstępu, model sieci neuronowej, z którego korzystam, to VGG16, standardowo zaimplementowany do biblioteki Keras.
Składa się on z 18 warstw i jest podzielony na 5 bloków. VGG16 to model sieci konwolucyjnej i chyba nikogo nie zaskoczy, że są to warstwy typu Conv2D i MaxPooling2D.
Jak sieć neuronowa przetwarza obraz?
Zadaniem modelu VGG16 jest rozpoznawanie tego, co znajduje się na zdjęciu. Zdjęcie jest o wymiarach 200×250 pikseli.
Bez zbędnego przedłużania, zobaczmy, jak wygląda zdjęcie w „oczach” pierwszej warstwy pierwszego bloku Conv2D (efekt zaskakuje):
Warstwa, która wygenerowała takie obrazy, zawiera 64 kanały. Oznacza to mniej więcej tyle, że przetworzyła pierwotne zdjęcie na 64 sposoby (w ogromnym uproszczeniu). Wybrałem najbardziej zaskakujące, ponieważ znacząca większość była identyczna.
Model podczas analizy obrazu doszukuje się różnych wzorców na przetwarzanym obrazie. Na drugim zdjęciu zaryzykuję stwierdzenie, że doszukiwał się tekstury ludzkiej skóry, a na przedostatnim – włosów. Interpretacja tego jest swobodna i bardzo abstrakcyjna, z tego powodu, że nie ma spisanych zależności, i każdy model przetwarza obraz w inny sposób. Zobaczmy, jak obraz wygląda dla pierwszej warstwy drugiego bloku (również Conv2D):
Tutaj bez niespodzianek, obraz jest podobny. Rozdzielczość jest jednak dużo niższa, co wynika ze zastosowania warstwy MaxPooling2D, która spłaszcza obraz. Mimo to w obrazie jest „zakodowanych” więcej informacji, na podstawie których nasz model jest w stanie stwierdzić, co znajduje się na zdjęciu.
Przedstawię teraz 9 kanałów ostatniej warstwy (Conv2D), ostatniego bloku. W ramach wyjaśnień – na ilustracji znajduje się 9 obrazów ułożonych 3×3.
Mimo tego, że obrazy są zupełnie nieczytelne (dla człowieka), to znajduje się tam wystarczająco dużo informacji, żeby z dokładnością 98% stwierdzić, co znajduje się na zdjęciu.
Czego szuka sieć neuronowa?
Po tym wstępie jesteśmy w stanie wyobrazić sobie, jak na poszczególnych etapach jest przetwarzane zdjęcie. Naturalnie w głowie pojawia się pytanie: Czego tak właściwie na zdjęciach szuka sztuczna inteligencja?
W tym miejscu niestety również musimy użyć ogromnego uproszczenia i nazwać to wzorcami. Wzorcami, których graficzna interpretacja wygląda jeszcze ciekawiej niż przetwarzane wcześniej zdjęcie.
Poniżej prezentuję wzorce pierwszej warstwy, pierwszego bloku Conv2D. Zawiera ona 64 kanały, więc wzorców również jest 64. Ja przedstawiam Wam grafikę, na której są 4 losowe wzorce na pierwszym planie oraz część wzorców w tle.
Jak widać, można tutaj dopatrzeć się naprawdę interesujących struktur, takich jak skóra, kora drzewa, różnego rodzaju szumy, poziome/pionowe linie.
Na podstawie tych wzorców przetwarzane były zdjęcia w pierwszej warstwie. Interesujące? Zobaczmy, co znajduje się w pierwszej warstwie drugiego bloku.
Rozdzielczość jest tutaj znacznie gorsza, tak samo jak to miało miejsce w przypadku zdjęcia. Myślę jednak, że każdy tutaj zauważył, że wytworzone wzorce są dużo bardziej skomplikowane. Na zdjęciu pokazałem 16 losowych, musicie jednak wiedzieć, że ta warstwa zawiera ich 128!
Zobaczcie zatem, co skrywa pierwsza warstwa trzeciego bloku:
Tutaj możemy dostrzec bardzo zaawansowane struktury, takie jak: gałki oczne, włókna wykonane z różnych materiałów, łuski, pióra, dziury i wiele innych. Z pewnością jest to kwestia wyobraźni. Ta warstwa zawiera 256 wzorców.
Każdy kolejny blok warstw modelu VGG16 zawiera więcej wzorców o dużo bardziej zaawansowanych strukturach. Jednocześnie przetwarzane zdjęcie staje się coraz mniej czytelne dla człowieka, ale ma w sobie zakodowane więcej informacji na temat tego, co udało się tam dostrzec.

Jeden komentarz
Pingback: