Wrocław, 1 lipca 2009
Raport z projektu kursu: METODY I ALGORYTMY SZTUCZNEJ INTELIGENCJINajważniejszą sprawą w transporcie lądowym jest bezpieczeństwo ruchu.
Bardzo ważne jest właściwe rozpoznawanie przez osoby kierujące pojazdami, sygnałów podawanych przez specjalne sygnalizatory świetlne. Możliwość niewłaściwego odczytania
sygnałów może być przyczyną katastrofy w ruchu lądowym, która może przynieść spore straty materialne, jak i ofiary w ludziach.
Dlatego też postanowiliśmy zbadać możliwość zbudowania inteligentnego systemu wspomagającego osoby kierujące pojazdami w ocenie sytuacji, opartego na kamerze cyfrowej i programie obsługującym, który wykrywałby sygnalizatory i sygnały na nich wyświetlane.
Paramount thing in overland transport is movement safeness. Very important is right recognizing through people who driving vehicles, administration signals through special traffic lights. Possibility wrongly signals recording can be reason to accident in overland transport which perhaps bring huge material incurs, and in people too.
That's why we decide to explore possibility creating intelligent system. Which help people who driving vehicles to estimate situation, founded on camases and operating programme. Who will be detect traffic lights tread signals in this display.
System rozpoznający sygnały na semaforach i sygnalizatorach ulicznych postanowiliśmy zbudować korzystając z kamery cyfrowej zamontowanej na pojeździe (obserwującej widok z perspektywy osoby kierującej pojazdem) podłączonej do komputera, na którym będzie istniał program obsługujący ją, dokonujący odczytu pojedynczych klatek filmu oraz lokalizujący na każdej klatce (o ile w rzeczywistości na niej jest) sygnalizator i określający jaki sygnał on wyświetla. Następnie dostarczałby prowadzącemu pojazd komunikat o rozpoznanym sygnale. Przykładowo: "STOP", "WOLNA DROGA" czy "ZWOLNIJ DO 40 KM/H" itp.
Fot. 1. Wrocław. Typowa sygnalizacja drogowa w Polsce
Sygnalizacja świetlna jaką można spotkać na polskich drogach, w przeciwieństwie do kolejowej, na początku wydawała się nam jednolita pod względem konstrukcji. Zazwyczaj składa się z pojedynczych sygnalizatorów 3-komorowych (górny czerwony, środkowy żółty i dolny koloru zielonego). Wyświetlane są sygnały: czerwony, żółty, czerwono-żółty oraz zielony. Jednakże analizując wygląd różnych skrzyżowań wrocławskich ulic i przeglądając strony www firm zajmujących się produkcją i montażem takich urządzeń okazało się, że jest cała gama sygnalizatorów, które znacząco różnią się od siebie rozmiarem, rozłożeniem soczewek oraz dołączeniem ekranów kontrastowych. Wydawało się nam, że na klatce filmu będziemy wyszukiwać jeden taki sam kształt sygnalizatorów, a okazało się, że będzie inaczej. Dlatego postanowiliśmy zająć się od razu tylko sygnalizatorami z ekranami kontrastowymi (Fot. 1.), które stanowią już większość, a ich liczba będzie stale wzrastać, gdyż właśnie takiego typu sygnalizatory są lepiej widoczne dla kierowców i projektanci skrzyżowań głównie je biorą pod uwagę. Pominęliśmy już na początku sygnalizatory świetlne typu "zielona strzałka" czy tzw. znaki o zmiennej treści.
|
|
Fot. 4. Zastosowanie różnych typów sygnalizatorów na tym samym skrzyżowaniu.
Na górze sygnalizator z coraz częściej stosowanym ekranem kontrastowym.
Fot. 5. Skrzyżowanie z sygnalizatorami dotyczącymi różnych kierunków jazdy.
Brak dodatkowego sygnalizatora zamontowanego z boku, jak to jest na Fot. 3 i 4.
Kolejowa sygnalizacja świetlna używana w Polsce musi być zgodna z dwoma instrukcjami wydanymi przez PKP Polskie Linie Kojowe S.A. i zatwierdzonymi rozporządzeniem Ministra Infrastruktury. Są to:
Dzięki temu wszystkie sygnalizatory (semafory) w Polsce mają podobny kształt i identyczny rozmiar soczewek. Różnią się tylko kolorystyką słupów (biało-czerwone dotyczą pociągów, koloru szarego tylko manewrów). W przypadku rozpoznawania sygnałów, co jest głównym celem tego projektu, słupy sygnalizatorów w ogóle nas nie interesują. Naszym zainteresowaniem jest objęta tylko sama głowica semafora, bo to ona zawiera komory z soczewkami. Tło głowic zawsze jest koloru czarnego. Jedynym problemem jeżeli chodzi o kształt semaforów, jest różna ilość świateł. W Polsce stosuje się semafory jedno-, dwu-, trzy-, cztero- i pięciokomorowe. Oznacza to różne wysokości głowic semaforów. W szczególnych przypadkach, aby zwiększyć ilość możliwych sygnałów, na semaforze, tuż pod głowicą montuje się tzw. pas świetlny, który może wyświetlić kolor zielony lub pomarańczowy. Aby ułatwić sobie pracę nad semaforami kolejowymi postanowiliśmy zajmować się tylko semaforami 5-komorowymi bez pasów świetlnych, gdyż to ten rodzaj jest najczęściej spotykany na polskiej sieci kolejowej.
|
|
Taki semafor pięciokomorowy wyświetla największą ilość dopuszczalnych sygnałów ze wszystkich typów kolejowych sygnalizatorów (pomijamy te z pasami świetlnymi, gdyż takie stawia się bardzo rzadko). Sygnały te mogą być kombinacją nie więcej niż dwóch kolorów z pośród takich kolorów jak: czerwony, biały, pomarańczowy i zielony. Dodatkowo jeden z nich może być sygnałem migającym (z częstotliwością 1 Hz). Taki semafor ma następujące rozłożenie soczewek (patrząc od góry): zielona, pomarańczowa, czerwona, pomarańczowa, biała.
|
|
Zainteresowanych co znaczy dana konfiguracja świateł odsyłamy do literatury [7].
Kolejnym etapem była obróbka filmu i zdjęć. Do tego postanowiliśmy wykorzystać bibliotekę OpenCV:
Po zapoznaniu się z biblioteką OpenCV rozpoczęliśmy kolejny etap prac polegający na segmentacji obrazów z kamery i aparatu w celu stworzenia wektora uczącego sieć neuronową. Na tym etapie jeszcze myśleliśmy, że będziemy korzystać z dwóch sieci neuronowych, które nauczymy rozpoznawać osobno kolejowe i drogowe sygnalizatory. Jednak natrafiliśmy tutaj na spory problem, gdyż nie mogliśmy odkryć jednoznacznej metody wyodrębniającej sygnalizatory. Bez niej stworzenie wektora uczącego byłoby po prostu niewykonalne, nie mówiąc już o tym, że sam proces rozpoznawania sygnalizatorów na podstawie nauczonej sieci neuronowej też potrzebuje metod segmentacji. Po tym doświadczeniu rozpoczęliśmy poszukiwania gotowych klasyfikatora rozpoznających zadany kształt. Przyszła nam z pomocą znów biblioteka OpenCV, która posiada narzędzia do tworzenia własnych klasyfikatorów hierarchicznych opartych na cechach wywiedzionych z funkcji Haara (ang. Haar-like features), które po analizie kształtu potrafią wykryć obiekty o takich kształtach jakimi zostały wytrenowane. Okazało się, że jest to potężne i obiecujące narzędzie.
Detektor obiektów jaki umieszczono w bibliotece OpenCV został pierwotnie zaproponowany przez Pawła Viola i poprawiony przez Rainera Lienharta z Intel Labs. Klasyfikator ten został oparty o cechy Haar-podobne wywodzące się z funkcji falkowych zaproponowanych na początku XX wieku przez niemieckiego matematyka Alfreda Haara. Jest tworzony na podstawie wektora uczącego, który powinien składać się z co najmniej kilkuset próbek danego obiektu (noszą one nazwę "próbek pozytywnych" gdyż zawierają dany obiekt) oraz jeszcze większej ilości "próbek negatywnych" które powinny być tej samej wielkości co pozytywne, z tym warunkiem, że nie powinny w ogóle zawierać szukanego obiektu. Posłużą za tło w procesie uczenia i dopasowywania wzorca.
Do stworzenia wektora uczącego służy program createsamples.exe. Otrzymamy plik formatu VEC.
Wektor uczący stanowi wejście innego programu haartraining.exe, dzięki któremu otrzymujemy plik formatu XML.
Sposób w jaki stworzyliśmy własny klasyfikator nie będziemy tutaj omawiali. Zainteresowanych odsyłamy do podanej na końcu literatury, pozycje [3] i [4] oraz dokumentacji biblioteki OpenCV. Mimo pewnych problemów, które wyeliminowaliśmy żmudną metodą "prób i błędów", udało się nam stworzyć własne 2 klasyfikatory, osobno do lokalizowania semaforów i sygnalizatorów drogowych.
Przeszkolony klasyfikator lokalizuje obiekty na podstawie weryfikacji hipotezy podzielonej na etapy. Ostateczna decyzja podejmowana jest na podstawie decyzji podjętych w wcześniejszych etapach (na "niższym szczeblu"). Na każdym etapie weryfikacji wykorzystywany jest tzw. klasyfikator złożony wykorzystujący 4 różne techniki pobudzania (obliczające wagi). Są to: Discrete Adaboost, Real Adaboost, Gentle Adaboost i Logitboost.
Podstawowym klasyfikatorem jest drzewo decyzyjne (z co najmniej 2 liśćmi). Decyzje „najniższego szczebla” podejmowane są w oparciu o cechy Haar-podobne, którymi są proste "maski" mierzące podstawowe cech obrazu. Jest ich 14 i zostały przedstawione na Rys. 1.
Rys.1. Graficzne przedstawienie 14 cech Haar-podobnych.
Obraz jest skanowany klasyfikatorem w celu znalezienia pozycji obiektu. Klasyfikator został tak stworzony aby mógł wykrywać te same obiekty o różnych rozmiarach (np. gdy obiekty znajdowały się w różnych odległościach od obserwatora). Jest to możliwie dzięki procedurom przeszukiwującym w różnych skalach. Dodatkowo stosowana jest tzw. "technika przesuwnego okna", dzięki której żadna część obrazu nie jest pomijana w poszukiwaniach.
Więcej o stosowanych cechach Haar-podobnych i budowie drzewa decyzyjnego można znaleźć w literaturze [2].
Testy rozpoczęliśmy najpierw tylko na zdjęciach i od razu okazało się, że metoda jaką wybraliśmy do określania kolorów soczewek zapalonych na sygnalizatorach uniemożliwia poprawne działanie całości. Postanowiliśmy kolejne testy przeprowadzić tylko w celu zbadania skuteczności obydwu naszych klasyfikatorów.
Działanie program zostało ograniczone do otworzenia zadanego obrazu w osobnym okienku i rysowaniu prostokątów na badanym obrazie, tam gdzie klasyfikator cech Haar-podobnych zlokalizował sygnalizatory.
Klasyfikator mający rozpoznawać semafory 5-komorowe, po wykonaniu testów na 10 zdjęciach zawierających te sygnalizatory, nie zlokalizował poprawnie żadnego, w 3 przypadkach narysował "prostokąt" będący w rzeczywistości linią zawierającą górną krawędź zdjęcia.
Sądzimy, że było spowodowane tym, iż przy tworzeniu go, a dokładniej w etapie treningu, posiadaliśmy zbyt mały zbiór próbek negatywnych.
Rys. 2. Czerwona linia u góry - jedyny zauważalny efekt działania klasyfikatora mającego rozpoznawać semafory.
Do testowania rozpoznawania sygnalizacji drogowej program został zmodyfikowany, tak aby obsługiwał kamerę cyfrową. Dzięki funkcjonalności biblioteki OpenCV polegało to na zamianie kilku funkcji i dopisaniu kilku linii kodu. Testowanie klasyfikatora zostało przeprowadzone podczas kolejnej przejażdżki samochodem po ulicach Wrocławia. Poniżej przedstawione zostały zrzuty z ekranu pokazujące najciekawsze efekty działania programu.
|
|
|
|
|
|
|
|
|
|
|
|
Przedstawione powyżej 12 przykładów działania klasyfikatora zostały tak dobrane, aby pokazywały różne jego reakcje na świat rzeczywisty. Niestety takie sytuacje jak przedstawiona na Rys. 9. stanowiły około połowy z jakimi się spotkaliśmy. Przedstawiliśmy tylko jeden taki przykład, bo nie ma sensu pokazywać w większej ilości zupełnego braku rozpoznania jakichkolwiek sygnalizatorów. Trudno ocenić nasz klasyfikator ilościowo, jednak pojawiły się sytuacje zupełnie poprawnego wykrycia wszystkich sygnalizatorów (Rys. 6 i 13) co daje nam sporo satysfakcji.
Użyty klasyfikator cech Haar-podobnych okazał się narzędziem mającym wielkie możliwości, a prostota jego skonstruowania i użycia jest największym atutem. Możliwość wyuczenia lokalizowania dowolnych obiektów nadaje temu narzędziu wielorakie zastosowanie w przeszukiwaniu wzorca na obrazach. Największą wadą jest to, że w procesie uczenia trzeba korzystać najlepiej z potężnej bazy wcześniej przygotowanych obrazów-próbek. Dokumentacja klasyfikatora wspomina, że dopiero przy zastosowaniu około 1500 próbek pozytywnych i 3500 negatywnych efektywność poprawnego wykrycia wyuczonego obiektu na zdecydowanej ilości obrazów jest wysoka. Niestety pozyskanie takich ilości materiałów uczących może być co najmniej czasochłonne, jak i trudne i nużące.
Najprawdopodobniej to zastosowanie przez nas mniejszej ilości próbek uczących spowodowało, że mieliśmy tak dużo przypadków niepoprawnego wykrycia lub w ogóle nie wykrycia niektórych sygnalizatorów. Sądzimy jednak, że posiadając więcej filmów, zdjęć oraz czasu, potrafilibyśmy stworzyć tak samo dobry klasyfikator rozpoznający drogową albo kolejową sygnalizację jaki jest dołączony do biblioteki OpenCV, a wykrywający tylko ludzkie twarze.
Przeprowadzone doświadczenia i testy wykazały błędność niektórych wstępnych założeń oraz uwydatniły problemy, których nie braliśmy pod uwagę.
Chcielibyśmy je poniżej wymienić i krótko scharakteryzować:
[2] Jak działa klasyfikator kaskadowy oparty na cechach Haar-podobnych, http://www.lienhart.de/ICIP2002.pdf
[3] Jak zbudować własny klasyfikator kaskadowy bazujący na cechach Haar-podobnych, http://note.sonots.com/SciSoftware/haartraining.html
[4] Przykład konstrukcji klasyfikatora kaskadowego cech Haar-podobnych, http://robotik.inflomatik.info/other/opencv/OpenCV_ObjectDetection_HowTo.pdf
[5] Projekt dotyczący rozpoznawania ludzkich twarzy oparty o klasyfikator kaskadowy bazujący na cechach Haar-podobnych, http://www.cs.put.poznan.pl/kkrawiec/ro/lab/2006-1/ro.pdf
[6] Strona www jednej z firm zajmujących się sprzedażą drogowych sygnalizatorów świetlnych, http://www.apm.pl/oferta-ekrany_kontrastowe.php/
[7] Instrukcja sygnalizacji Ie-1, http://kolej.krb.com.pl/e1/e1.htm
[8] Instrukcja Ie-4 "Wytyczne techniczne budowy urządzeń SRK w PKP", http://kolej.krb.com.pl/wtbe10/wtbe10.htm