Reporting live from San Diego
February 20, 2012 by Andreas

Projekt

Siden sidst er der ikke sket så meget udover det sædvanlige. Jeg får klatret en masse, og jeg er på uni hver dag. Så ikke mange nye begivenheder på den front. Og så er det jo meget passende at dette indlæg kan handle om mit projekt og hvad jeg egentlig laver når jeg er på uni.

Som bekendt arbejder jeg med detektion af vejskilte. Men lad os lige tage den helt fra bunden. Min specialeretning på AAU hedder “Vision, Graphics, and Interactive Systems” (forkortet VGIS). Jeg har siden jeg startede på den fokuseret mest på computer vision. Computer vision handler populært sagt om at få computere til at se. Man kobler et kamera eller andre sensorer til en computer og prøver at lave noget software, så computeren ved hvad den kigger på og på en eller anden måde kan reagere ud fra det.

På AAU lavede vi i min gruppe på 6. semester et system til at finde og læse hastighedsskilte. Det nævnte jeg da jeg kom herover, og da mit laboratorium herovre arbejder meget med trafiksikkerhed og generel “driver assistance”, var det oplagt at jeg kastede mig over noget med skilte, nu jeg havde prøvet at lege med den slags før. Således blev min opgave skiltedetektion.

Mit fast radial symmetry program finder et stopskilt.

Modsat vores hjerner, der ved hvad alt muligt er – og som oftest også kan ræsonnere over hvad noget er, selvom man ikke umiddelbart ved det – så er computer vision opgaver som regel ret snævre. Det kan være “her er et billede af et ansigt, se om det er nogen du kender”. Det kan også være “her er et billede, se om der er et ansigt på”. De to opgaver kan man så naturligvis koble sammen, så det bliver til “her er et billede, se om der er et ansigt på, og hvis der er, er det så nogen du kender”. Man opstiller altså en ret snæver opgave, og så udvikler man noget der kan løse den. Man kan ikke bare hælde et billede ind i en computer uden nogen kontekst eller opgave tilknyttet.

I mit tilfælde er opgaven altså “her er et billede, se om der er et skilt på og find ud af hvor det er henne”. Jeg skal ikke (i første omgang i hvert fald) læse skiltet, blot finde dem der måtte blive filmet. Skiltedetektion er noget der er blevet forsket en del i, men primært i Europa, Japan og Australien, der alle har skilte der minder om hinanden. Skiltesystemet herovre er noget anderledes, så derfor er det spændende at prøve at lave et system der passer til amerikanske skilte.

Formålet er at lave et system, der ville kunne assistere en chauffør. Det viser sig at folk er rigtig dygtige til at se skilte med hastighedsgrænser på, men meget dårlige til at se skilte der varsler om fodgængerovergange. Så hvis man lige kunne få bilen til at gøre opmærksom på skilte man har en tendens til at overse, så kan man potentielt hæve trafiksikkerheden. Samtidig har laboratoriet herovre udviklet et andet system, der hele tiden kan fortæller hvor chaufføren kigger hen (ikke bare i hvilken retning, men som faktisk kan generere det nøjagtige billede chaufføren til en hver tid ser). Derfor kan man gøre ekstra opmærksom på skilte, som man ved chaufføren ikke har set.

Hvordan griber man så sådan en opgave an? Første skridt er at finde ud af hvordan alle andre har gjort det. Som nævnt har forskningen hidtil været centreret om lande, der følge Wien konventionen, der beskriver hvordan skilte skal se ud i Europa. Faktisk findes der kun to videnskabelige artikler om amerikanske skilte, mod flere end 100 om Wien konvention-skilte. Imidlertid er der selvfølgelig nok en masse metoder fra europæiske skilte man kan bruge på amerikanske, så selvfølgelig har jeg også læst en masse på dem. Det var en opsamling på hvilke metoder der tidligere har været brugt, en såkaldt survey.

Næste skridt er at lave nogle forsøg, enten med (kombinationer af) etablerede metoder, eller med eventuelle geniale idéer jeg selv måtte have fået. Det er den fase jeg er i nu. Min plan er at teste tre algoritmer (for nørderne i publikum: Fast radial symmetry, en Haar-feature boosted cascade og en SVM på HOG-features). Så vil jeg forsøge at finde ud af hvilken der fungerer bedste på de skilte jeg skal finde, og bygge min endelige detektor omkring den.

Samtidig arbejder jeg med en ny idé om at generere syntetisk træningsdata. Det har, så vidt jeg ved, kun to forskergrupper gjort før mig, når det handler om skilte. Sagen er den at to af de tre algoritmer er machine learning-baserede. Hvad er nu det for noget? Jo, hvis jeg ville finde skilte uden machine learning – som vi gjorde på 6. semester – så ville jeg stille en række regler op om hvordan skilte ser ud: Find røde ting i billedet, sorter alle røde ting fra der ikke er runde, se om der er noget hvidt og sort inde i cirklen. Så ville jeg kunne finde skilte på den måde. En anden tilgang er at man ikke selv stiller de her regler op. I stedet kan man hælde 10000 billeder af skilte og 10000 billeder, der ikke indeholder skilte, ind i en snedig algoritme, og så finder computeren helt selv ud af hvad den skal kigge efter. Det er meget fascinerende 🙂

Syntetiske træningsbilleder (et billede, der er et par uger gammelt, programmet er noget bedre nu).

Det har selvfølgelig også sine problemer: Det er ikke super fedt at skulle ud og optage 10000 billeder af skilte. Så hvis jeg i stedet kan sætte en skabelon af et skilt ind i et lille program, som så spytter 10000 billeder ud af hvordan skilte kunne se ud ude i virkeligheden, så kan det måske være ligeså godt. Så udover at teste de tre algoritmer op mod hinanden, så er det også min plan at teste syntetisk træningsdata mod “rigtige billeder”. Alt i alt ser mit projekt sådan her ud:

Oversigt over mit projekt (blokdiagrammer er rare)

Udover ovenstaående skal jeg selvfølgelig også have produceret en rapport om hele molevitten, noget der sikkert ender med at ramme omrking 100 sider, plus/minus det løse. Jeg plejer heldigvis at være ret hurtig til at skrive den slags, så det bekymrer mig ikke så meget (selvom jeg da i hemmelighed håber at den bare materialiserer sig selv hen over de næste par måneder).

Skal jeg lige slynge lidt flere nørd-fraser ud, så er det hele kodet i C++ med OpenCV til billedbehandling og Qt til GUIs. Også så med en smule OpenGL, bare for en god ordens skyld. Jeg har stort set ikke noget Python i mit projekt, hvilket nok vil overraske de fleste, der kender til mine græsgange indenfor programmeringssprog, men mon ikke jeg kan nå at få rådet bod på det. Skulle du ikke have forstået noget som helst af dette afsnit er det helt fint, det er nok faktisk et sundhedstegn.

I løbet af denne weekend (herovre var mandag fridag – Presidents Day) har jeg haft en computer i lab til at stå og træne min AdaBoost/Viola Jones algoritme, så når jeg kommer på uni i morgen bliver det spændende at se om den er færdig og om detektoren duer til noget.

Det må være nok tekniksnak for denne omgang. Jeg magter i hvert fald ikke mere lige nu. Hyg jer derhjemme i kulden 🙂

  •   •   •   •   •

2 Responses to “Projekt”

  1. Andri says:

    Fedt projekt og nogle smukke tikz diagramer 🙂

Leave a Reply to Andreas Cancel reply

Your email address will not be published. Required fields are marked *