Hopp til hovedinnhold

Slik brukte vi maskinlæring til å finne bygninger i Bergen

Publisert:14. september

Vi trente en modell på offentlig tilgjengelig punktskydata fra Bergen – og identifiserte bygninger med 98 prosent treffsikkerhet.

Visste du at hele Norge er laserskannet fra fly? Et fly med laserskanner sender pulser mot bakken og måler tiden det tar før pulsen kommer tilbake. Teknikken heter ALS (Airborne Laser Scanning), og resultatet er en såkalt punktsky: milliarder av 3D-punkter, med litt metadata om hvert punkt. Mye av dataen fra det nasjonale overflyvningsprosjektet er tilgjengelig for allmennheten på hoydedata.no.

Ofte ønsker man å klassifisere punktene i en punktsky, det vil si at man markerer hvert punkt med en klasse som forteller hva det representerer. Slik kan man gjøre analyser av for eksempel vegetasjon, infrastruktur eller vann innenfor et område. Noe av klassifiseringen løses i dag med regelbaserte verktøy med høy treffsikkerhet. For eksempel finnes det effektive metoder for å klassifisere hvilke punkter som representerer bakken. De øvrige klassene, deriblant bygninger, er vanskeligere å klassifisere, og innebærer ofte tidkrevende manuelt arbeid. Store deler av det nasjonale datasettet er derfor ikke klassifisert utover de enkleste klassene. Vi ønsket å undersøke om en maskinlæringsmodell kunne gjøre klassifisering av bygninger automatisk.

To 3D-visualiseringer av den samme punktskyen over et tettbygd område i Bergen. Til venstre vises punktene i naturlige farger, slik at hus, gater og trær kommer fram som på et flyfoto. Til høyre er de samme punktene fargelagt etter klasse, med bygninger i rødt og vegetasjon i grønt.
Til venstre: visualisering av punktsky. Til høyre: samme punktsky med klassifiseringer, der røde punkter er klassifisert som bygninger.

Vi introduserer Superpoint Transformer

Et enkelt punkt gir lite informasjon alene. En måling fire meter over bakken kan være et tak, et brodekke eller en trekrone. Det som skiller dem, er omgivelsene. Akkurat som et ord først gir mening i kontekst.

Modellarkitekturen Superpoint Transformer, publisert av Robert, Raguet og Landrieu i 2023, løser dette effektivt. I stedet for å behandle hvert punkt for seg, grupperes punktene i geometrisk like segmenter kalt superpoints. Et flatt takstykke blir ett segment, en vegg et annet, greinene på et tre noen andre. Modellen vurderer så hvert segment i lys av segmentene rundt det, og punktene arver klassen til segmentet de tilhører. Det er dette som gjør at en modell kan trenes effektivt på milliarder av punkter.

Også relevant til vårt prosjekt er en masteroppgave fra NTNU, skrevet av Lars Flem og Jakob Punnerud i samarbeid med Kartverket. De testet Superpoint Transformer på utvalgte områder i Norge og fikk lovende resultater. På flatt og moderat terreng var resultatene gode, men i kupert terreng som Bergen falt resultatene vesentlig. Både Lars og Jakob begynte for øvrig i Bekk i august.

Hvorfor Bergen

Et datasett er bare brukbart til trening av modellen vår hvis det inneholder en fasit på hva som er bygning. Det aller meste som er nedlastbart fra hoydedata.no har kun klasser for bakke, bru og vann, mens de øvrige punktene er uklassifisert. Bergen er en av de få nedlastbare datasettene som faktisk har bygningene ferdig klassifisert.

I tillegg byr terrenget på alt fra tett bysentrum til bratte fjellsider, nettopp den variasjonen Lars og Jakob pekte på som årsak til at modellen sviktet. Punktskydekningen er dessuten svært god, med over 13 milliarder punkter fordelt på tre uavhengige datasett fra ulike år:

Kart over Bergen som viser dekningen til de tre punktskydatasettene. Datasettene fra 2020 og 2023 er markert som mørke rutenett som dekker det meste av kommunen, mens 2022-datasettet er et lyseblått område i midten som dekker sentrum og områdene rett rundt. Tegnforklaringen viser 2022 som treningsdata og 2020 og 2023 som testdata.
Dekningen til de tre datasettene over Bergen. Modellen trenes på 2022-dataene og testes på 2020 og 2023.

Tilpasninger av modellen

For å tilpasse modellen til norske forhold gjorde vi to viktige utvidelser på Superpoint Transformer:

  • Mer presis beregning av høyde over bakken. En nøkkelvariabel i klassifisering av bygning er et gitt punkts høyde over bakken. Denne variabelen kan estimeres basert på ferdig klassifiserte bakkepunkter. Masteroppgaven estimerte bakken med en grov approksimasjon: et rutenett med store lineære plan som følger terrenget sånn omtrentlig. I flatt terreng er det en god nok tilnærming. I Bergen, der terrenget er mer kupert, blir høyden systematisk feil.

    Vi erstattet den grove bakkemodellen med små trekanter mellom kjente bakkepunkter. For å finne avstanden til bakken under et punkt, finner vi trekanten punktet ligger over og leser av høyden der – en teknikk kalt Delaunay-triangulering, illustrert i figuren under. Metoden gir høyde over bakken-variabler som er vesentlig mer nøyaktig.
Tredimensjonal illustrasjon av et kupert terreng bygget opp av trekanter mellom kjente bakkepunkter. Et punkt over bakken er markert med en loddrett linje ned til flaten den ligger over, der linjen treffer inne i én av trekantene. Avstanden langs denne linjen er merket «høyde over bakken», treffpunktet er merket «bakken rett under P», og hjørnene i trekantnettet er merket «kjent bakkepunkt».
Høyde over bakken beregnes ved å finne Delaunay-trekanten punktet ligger over, og lese av bakkehøyden der.
  • Bedre utnyttelse av metadata for hvert punkt. Under datainnsamlingen sendes laserpulsen ned og reflekteres tilbake til flyet. En puls som treffer et tak, gir oftest bare én returpuls. En puls som går gjennom et tre kan i midlertid gi flere: én fra de øverste greinene, kanskje én fra midten, og én fra bakken under. Hvert punkt i punktskyen har metadata om antall returer for den gjeldende laserpulsen og hvilket nummer i rekka over returer dette punktet representerer. Verken den opprinnelige implementasjonen av Superpoint Transformer eller masteroppgaven brukte denne metadaten. Vi la inn både antall returer og hvor i rekken punktet ligger.

Hvordan måler vi modellens ytelse?

Vi bruker hovedsaklig to mål for å si noe om modellens ytelse:

  • Av det totale antallet faktiske bygningspunkter, hvor mange klarte modellen å finne? Dette kalles recall.
  • Blant de punktene modellen klassifiserte som bygning, hvor mange var faktisk bygning? Dette kalles precision.

Begge målene er viktige. Et bygningspunkt modellen overser, er like problematisk som et vegetasjonspunkt den feilaktig kaller bygning. Kartverkets produktspesifikasjon for punktsky sier at maksimalt 2 prosent av punktene i et område kan være feilklassifisert – noe som i praksis betyr at recall må ligge på minst 98 prosent.

Resultater på bygninger

For å vurdere modellens ytelse testet vi den på data den ikke hadde sett under opplæringen – i vårt tilfelle datasettene Bergen 2020 og Bergen 2023. Figuren under viser precision og recall for begge datasettene.

Stolpediagram som viser precision og recall for bygningsklassifisering på de to testdatasettene. For Bergen 2020 er precision 94,4 prosent og recall 97,6 prosent. For Bergen 2023 er precision 98,3 prosent og recall 98,5 prosent.
Precision og recall for bygningsklassifisering på de to testdatasettene Bergen 2020 og Bergen 2023.

Resultatene for Bergen 2023-datasettet er svært lovende, med over 98% på både precision og recall. Modellen finner nesten alle bygninger. Dette indikerer at vi er nærme å kunne tilfredsstille produktspesifikasjonen for punktsky om maksimalt 2% feilklassifisering. Bergen 2020-datasettet er også i nærheten av 98% på recall, mens precision ligger noe lavere. En grunn til forskjellen i precision kan være at 2023-datasettet har en høyere andel uklassifiserte punkter, og for disse punktene kan ikke prediksjonene valideres mot en fasit. Dette kan være årsak til en kunstig høy precision i dette datasettet.

Videre arbeid er nødvendig for å forbedre ytelsen ytterligere, og verifisere robusthet i geografiske områder med andre karakteristikker.

Veien videre – fra Bergen til hele Norge

Resultatene viser at den tilpassede modellen fungerer godt til å identifisere bygninger i det krevende terrenget rundt Bergen. Vi håper den tilpassede modellen etterhvert kan anvendes til ulike formål på et nasjonalt datasett. Kanskje kan modellen inngå i verktøy for å identifisere ulovlig bebyggelse? Eller beregne presise metrikker for vegetasjon og infrastruktur på nasjonalt plan? For å kunne generalisere modellen til resten av landet ser vi fire konkrete steg:

Testing på andre områder. Se om modellen generaliserer til annen geografi og andre terrengtyper.

Innføre konfidensterskel. Vi setter i dag en klasse på hvert eneste punkt. Med en konfidensterskel kan tvilsomme punkter forbli uklassifisert i stedet for å bli feilmerket. Det løfter precision, som er det svakeste målet i dag.

Justere modelloppsettet. Vi har kjørt ett oppsett, mest sannsynlig finnes det bedre. Den mest lovende justeringen er hvor store segmentene punktene deles inn i bør være.

Bruke fargedata. Farger (RGB) kan gjøre det lettere å skille bygninger fra vegetasjon. Ikke alle datasett har farger, men der de finnes, er det verdt å teste.