Rozpoznawanie znaków drogowych


24.06.2009 Autor: Aleksander Badura 148307
Raport z projektu Metody i algorytmy sztucznej inteligencji

1. Streszczenie

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.

Road signs recognition


24.06.2009 Author: Aleksander Badura 148307
This report has been prepared as a requirement for the course: Methods and algorithms of artificial intelligence

1. Abstract

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.

2. Tworzenie sieci

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.

3. Przygotowanie danych do nauki

Do badań wybrałem 7 różnych znaków:

Pierwotnie zdjęcia miały postać przedstawioną po niżej.
o21 o20 o19 o18
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:
o17 o16
o15 o14

4. Uczenie sieci

Do nauki sieci użyłem metody propagacji błędu z momentum. Nauka sieci odbywała się przez 10000 epok. Przebieg nauki przedstawia wykres.
o13

5. Badanie sieci

5.1 Dane wejściowe

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.

5.2 Badanie

Obrazy użyte do testowania wyglądają następująco:
o12 o11 o10 o9 o8 o7 o6 o5 o4 o3 o2 o1

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.

Wnioski

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.

Biblografia

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/

Valid HTML 4.0 Transitional