24.06.2009 Autor: Aleksander Badura 148307
Raport z projektu Metody i algorytmy sztucznej inteligencji
Projekt miał na celu sprawdzenie czy sztuczna sieć neuronowa może być wykorzystana do rozpoznawania znaków drogowych. Do nauki sieci użyłem zdjęcia wykonane na ulicy, znaki były fotografowane pod różnymi kątami i z różnej odległości. Do sprawdzenia poprawności sieci zostały wykorzystane zdjęcia które poddano zaszumieniu lub rozmyciu. Celem tych operacji było sprawdzenie w jakim stopniu sieć jest odporna na zakłócenia. Oraz próba stworzenia zdjęć które przypominały by zdjęcia robione podczas jazdy samochodem. Badania zostały wykonane na symulatorze sztucznej sieci neuronowej w programie MatLab.
24.06.2009 Author: Aleksander Badura
148307
This report has been prepared as a requirement for the
course: Methods and algorithms of artificial intelligence
Main goal of the project was to check if artificial neural network can be used to recognizing road signs. For learning purposes I used photos of road signs that were made on the streets. Signs were photographed from different angles and distances. To check how network works some pictures were changed. For example I add noise or blur. I tried to find out how will neural network respond to that kind of disturbance. Simulation were made on MatLab program.
Przed rozpoczęciem badań należało opracować strukturę sieci. Symulacje miały odbywać się w oparciu o zdjęcia robione na ulicach miasta. Tak więc zdjęcia przekazane sieci musiały być w miarę możliwości dokładne. Z drugiej strony zbyt duża ilość danych spowodowałaby z byt długie uczenie się sieci. Do nauki sieci wybrałem zdjęcia o rozdzielczości 100x100 dlatego warstwa wejściowa jest rozmiaru 100 na 100. Do testów użyłem 7 różnych znaków tak więc warstwa wyjściowa ma rozmiar 7 na 1. Kolejnym etapem było wybranie ilości warstw pośrednich oraz ich rozmiar. Jedna warstwa ukryta powinna rozwiązać większość problemów. Do ustalenia zostało tylko wybrać jej rozmiar. Ilość neuronów w warstwie ukrytej została określona przez spierwiastkowanie ilość neuronów warstwy wejściowej pomnożonej razy ilość neuronów w warstwie wyjściowej (wynik został nieco zawyżony). Ostatecznie rozmiar warstwy ukrytej wynosi 250 na 1.
Do badań wybrałem 7 różnych znaków:
droga z pierwszeństwem (D-1),
ustąp pierwszeństwa (A-7),
ograniczenie prędkości do 40 i 50 (B-33),
zakaz zatrzymywania się(B-36),
zakaz skręcania w lewo (B-21)
zakaz wjazdu (B-2).
Pierwotnie zdjęcia miały postać przedstawioną po niżej.
Zagadnienie
wyszukiwania znaków na obrazie w tym projekcie zostało pominięte.
Dlatego zdjęcia zostały poddane obróbce która polegała na: I
Wycięciu fragmentu ze znakiem tak aby nie uciąć znaku oraz
pozostawić jak najmniej tła.
II.Następnie trzeba było usunąć
kolory tak aby znak przedstawiony został w odcieniach szarości.
III.Kolejny etap to przeskalowanie obrazu do rozdzielczości 100
na 100
IV.Ostatnim etapem była zamiana formatu na pgm oraz
usunięci nagłówka pliku. W ten sposób znak mógł być
wprowadzony do sieci jako wektor.
Efektem tych przekształceń są
następujące obrazy:
Do nauki sieci użyłem metody propagacji błędu z momentum.
Nauka sieci odbywała się przez 10000 epok. Przebieg nauki
przedstawia wykres.
Celem projektu było sprawdzenie czy sztuczna sieć neuronowa jest odporna na zakłócenia. Dlatego dane wejściowe zostały poddane operacją rozmazywania, zaszumienia oraz zmianie jasności. Chciałem również sprawdzić czy znak koniec drogi z pierwszeństwem (D-2) nie zostanie rozpoznany jako znak droga za pierwszeństwem (D-1). Podobne sprawdzenie zostało wykonane dla znaków zakaz postoju(B-35) i zakaz zatrzymywania się (B-36). Chciałem również zobaczyć jak sieć zareaguje na obrócenie (znaku zakaz skręcania w lewo oraz zakaz skręcania w prawo). Jak i również czy sieć rozróżni znak zakaz skrętu w lewo od nakaz jazdy w lewo za znakiem.
Obrazy użyte do testowania wyglądają następująco:
Podczas testów ze znakami droga z pierwszeństwem sieci nie
rozpoznała żadnego ze znaków.
Testy dla znaku ustąp
pierwszeństwa były pomyślniejsze sieci prawidłowo przypisała dwa
z dziewięciu obrazów.
Podczas symulacji dla znaków z
ograniczeniem prędkości do 30, obraz z rozmazanym znakiem oraz
obraz zaszumiony, został rozpoznany jako znak ograniczający
prędkość do 40. Testy dla znaku ograniczenie prędkości do 40
km/h wypadły najpomyślniej z próbki testowej prawie wszystkie
znaki zostały zaklasyfikowane dobrze. Nie rozpoznany został znak
który został mocno rozjaśniony.
Zaszumiony znak zakaz
zatrzymywania się został rozpoznany jako znak zakaz wjazdu. Reszty
obrazów w tej próbce nie rozpoznano.
Dla znaku zakaz wjazdu
wszystkie obrazy testowe zostały rozpoznane pomyślnie.
Testy dla sieci nie wypadły pomyślnie tylko w dwóch przypadkach można uznać, że rezultat był pomyślny. Niestety w przypadku znaku ustąp pierwszeństwa rozpoznanie jest trochę ułatwione, ponieważ znak ma kształt inny niż pozostałe znaki. Na podstawie tych testów można stwierdzić, że sztuczna sieć neuronowa nie nadaje się do rozpoznawanie tego typu znaków. Zadanie to jest bardzo trudne z powodu dużej ilości danych. Rozmiar obrazka to 10000 pikseli każdy może przyjąć wartość od 0 do 255. Wartości te zmieniają się wraz z kątem pod jakim robione było zdjęcie oraz wraz ze zmianą ilość światła. Wydaje mi się, że aby sieć była w stanie rozwiązać ten problem należałoby użyć większej ilości danych i zmodyfikować architekturę sieć. Wadą takiego rozwiązania jest znaczne wydłużenie się czasu uczenia.
1. http://www.ai.c-labtech.net/sn/
2. http://panda.bg.univ.gda.pl/~prezes/sn/sn.htm
3. Podstawowe funkcje biblioteki narzędziowej
„Neural Network Toolbox. Version 5”
pakietu MATLAB v. 6
4. www.znaki-drogowe.pl/