Från flygbild till karta via Machine Learning

13 november 2020

Artificiell intelligens är ett hett område. Allt flera branscher börjar hitta hur det kan användas. Här berättar vi lite om arbetet vi gjort för att identifiera byggnader med Machine Learning (ML).

Det låter stort, men egentligen så är det ganska enkelt. Man skapar en funktion och successivt förbättrar parametrarna i den genom att se hur bra den fungerar på olika exempel. Vilken funktion ska man välja? Det finns massor med rapporter och implementationer på nätet som man kan välja mellan. Olika funktioner är bra på olika saker och det finns utvärderingar som visar vilka som är bäst för en viss typ av uppgift. Funktioner består ofta av ett neuralt nätverk och kallas för modeller.

Uppgiften

Syftet med vår uppgift har varit att ta till oss tekniken och visa att den är bra för vår geografiska information. För det så har vi valt att identifiera förändringar av byggnader så att vi kan uppdatera kartan snabbare. Vi valde dock att använda ML endast till att identifiera byggnader och deras utbredning. Själva förändringsdetekteringen gjorde vi mer traditionellt.

Indata

För att förbättra en funktion och även för att kunna utvärdera den så behövs data/information. Vi har massvis som lämpar sig bra för maskininlärning. För att identifiera hus så har vi valt att använda oss av vår ytmodell. Ytmodellen är 3D punkter med färger som tas fram automatiskt från våra flygbilder. Det som är extra bra med ytmodellen är att allt har en position och då går det enkelt att jämföra med annat.

Ytmodellen är lite besvärlig i sin ursprungsform, punkter med färger i laz-filer, men för att göra det enkelt och snabbt att använda så har vi konverterat till två rasterfiler:

  • sant ortofoto (true orthophoto), där hustaken är på sin riktiga plats.
  • höjddata som motsvarar det som finns högst upp, t.ex. taken

Vi behöver också information om vad vi vill hitta, dvs byggnader som finns i våra kartdatabaser. Dessa data används för träning/optimering av modellen/funktionen och även utvärdering. Exempel på data syns i bilden nedan.

Tre olika versioner av samma bild som visar hus, vägar, grönområden ovanifrån
True orthophoto från IR-bilder, höjddata och byggnader som används för inlärning och utvärdering.

Vi tar fram kartdata främst på landsbygden och har därför valt 30 st träningsområden som är 10x10 km2 utspridda på landsbygden. Vi har även valt 5 st 2.5x2.5 km2 områden till verifikation medan vi tränar. Det är bra att utvärdera medan träning pågår så att inte träningen specialiserar sig för mycket på träningsdata.

För den riktiga/oberoende utvärderingen så har vi valt 5 st 10x10 km områden. I bilden nedan syns områdena.

Karta över Sverige med gröna och röda markeringar
Gröna områden används för träning, röda till utvärdering.

Modell/funktion och träningen

Vi ville använda saker andra gjort och som skulle vara bra på vår uppgift. Därför letade vi runt och hittade både utvärderingar och implementationer. Mycket inom ML är öppet så det är enkelt att komma igång.

Vi testade flera modeller och implementationer på vår data. PyTorch (nytt fönster) är ramverket vi använt mest fast det har även varit Keras (nytt fönster) och TensorFlow (nytt fönster). Följande är några varianter på implementationer och modeller vi fastnat för (inkl länkar):

  1. MaskRCNN, impl1 (nytt fönster), impl2 (nytt fönster)
  2. Unet (nytt fönster)
  3. DeepLab v3++ (nytt fönster) 

Modellerna tar små bildutsnitt och det kan vara lite olika vad som är lämpligt, men mellan 200-500 pixlar är vanligt att använda. En del i arbetet är att ta fram en massa utsnitt. Eftersom vi valt landsbygd där det inte finns så många byggnader så har vi har även filtrerat ut utsnitt med byggnader i så att modellerna snabbare kan lära sig det vi är intresserade av, men naturligtvis behövs andra utsnitt också till träning för bästa resultat.

Resultat

Att utvärdera resultat är också en viktig del inom ML och det kan göras på många sätt. Vid inlärningen så har utvärderingen gjorts pixel för pixel, men för att förstå om det är användbart så har vi gjort mätningar baserat på byggnader. Genom att jämföra andel gemensam yta mellan kartdata och resultat från modellen så har vi identifierat ifall byggnader hittats eller inte (IoU intersection over Union). Två viktiga mått är:

  • Recall - hur stor andel av riktiga byggnader har vi hittat
  • Precision – Om modellen flaggar att det är en byggnad, hur ofta stämmer det.

För att vi ska vara nöjda så vill vi ha en bra recall så att vi har god kvalitet. Samtidigt vill vi inte ha för dålig precision. Är precision dålig så blir det många fel som måste tas bort.

Vi har nått upp till ca 95% både för recall och precision för att hitta byggnader vilket är mycket bra. Dock har vi sämre värden när vi vill hitta förändringar eftersom då är ytnoggrannhet viktig för att kunna peka på förändring. Även små byggnader kan vara svåra.

För vårt exempel så var Unet tillsammans med ett Resnet50 det som gav bästa träffar tillsammans med bästa ytriktighet. Deeplab v3+ gav högst andel hittade byggnader.

Byggnader vägar, grönområden ovanifrån. Byggnader markerade med gul färg
Exempel på byggnadspolygoner från ML

Framtiden

Vi har använt ytmodellen med upplösning 0.5 meter/pixel, men för 2019 så har vi förbättrat ytmodellen till 0.25 m/pixel. Det tror vi kommer förbättra ytriktigheten vid ML och även att hitta små byggnader, men vi väntar på mer data för att kunna testa det. Vi skapade en komplicerad ”traditionell” process för att identifiera förändringar. Svåra uppgifter lämpar sig bra för ML och denna tror vi också på att lösa med ML.

Sedan finns det andra metoder som arbetar mer som en process än bara en funktion/modell. Detta gör att datorn kan kartera som en människa, ett hörn i taget. Dessa typer av lösningar kommer kunna användas för många olika typer av uppgifter.

Vi har visat att det går att komma igång med ML utan att ha lång utbildning inom området och att det finns mycket öppet på nätet, så nu undrar vi: Vad kommer ni göra med ML och våra geodata?