Žemėlapių kūrimo ypatumai

Šiame įraše pateiksiu savo pamąstymus. Prašau nedaryti jokių išvadų, tai tik pamąstymai 🙂

Atvirąjį žemėlapį OpenStreetMap dažniausiai kuria žmonės, kurie nėra profesionalūs GIS ar kartografijos specialistai. Tai žmonės, kuriems žemėlapiai yra hobis. Jei kas nors ir pasidomi, kaip dirbama su profesionaliomis GIS ar kuo užsiima kartografai specialistai, tai tik gerokai vėliau, kai jau būna stipriai įsijautę į atvirą žemėlapio kūrimo procesą. Kadangi daug kas kuriama ant tuščio lapo, kai kurie dalykai kai kuriems žmonėms gaunasi kiek kitaip, nei kad juos per šimtus metų padarė profesionalai. Konkrečių skirtumų yra daug, nebandysiu jų visų išvardinti, bet parašysiu savo pamąstymus apie vieną iš aspektų – patį požiūrį į žemėlapio kūrimo procesą.

Žemėlapių kūrimo trumpa istorija

Nuo seniausių laikų žmonės turėjo orientuotis vietovėje. Tai ypač svarbu buvo tiems, kas judėdavo gan daug – medžiotojai, klajokliai ir pan. Žemėlapius jie turėdavo savo galvoje: žinojo, kad norint iš A nueiti į B, reikia eiti per mišką, tada ties upės vingiu per brastą nusigauti į kitą krantą, kur perėjus pievą, už kalniuko ras norimą tašką. Tokią informaciją galima pasakyti žodžiais, bet jei taškų turime ne du, tai galimų maršrutų skaičius didėja gan sparčiai. Taigi žmonės pradėjo daryti žemėlapius. Pavyzdžiui tokius Maršalo salų pagaliukų žemėlapius:

Maršalo salų pagaliukų žemėlapis (Wikipedia)

Šis žemėlapis skirtas plaukiojimui vandenyne. Jis rodo vyraujančias bangavimo kryptis ir salas. Taigi abstrakčiais simboliais išreikšta žemėlapio tikslui – navigacijai – svarbi informacija.

Orientavimuisi žemėje žemėlapiai irgi buvo kuriami panašiu principu – nusprendžiama, kokią informaciją norima parodyti, sugalvojami jos simboliai ir tada pagal galimybes atsižvelgiant į objektų tarpusavio santykį simboliai sudėliojami paprastai ant plokštumos.

Žinoma pozicijų ar atstumų prasme tokie žemėlapiai buvo gana netikslūs, bet jie atliko savo pagrindinę funkciją – perteikė informaciją, būtiną orientavimuisi vietovėje.

Vėliau atsirado galimybė pozicijas skaičiuoti pagal žvaigždes, sugalvota trianguliacija (tikslaus žemėlapio karkaso kūrimas) ir kažkada buvo pastebėta, kad dar tikslesnes objektų pozicijas galima nustatyti naudojantis iš oro darytomis fotografijomis.

Nesistengiu tiksliai aprašyti kartografijos vystymosi istorijos, apie tai rasite labai daug informacijos internete. Esminis punktas – žemėlapio kūrimas prasideda nuo žemėlapio tikslo sugalvojimo. T.y. kam tas žemėlapis bus naudojamas. Tada nusprendžiama kokia informacija reikalinga, o kokia nereikalinga. Kadangi informacijos perteklius skandina esminę informaciją ir dėl to žemėlapį skaityti darosi sunkiau, todėl papildomai dar nusprendžiama, kaip informacija bus abstrahuojama. Tik tada yra naudojamos įvairios priemonės, padedančios norimus objektus žemėlapyje išdėstyti tiek tiksliai, kokie buvo poreikiai. Ortofotografijų naudojimas yra tik vienas iš būdų tiksliau nustatyti objektų pozicijas.

Atvirkštinis žemėlapio kūrimo procesas

O dabar grįžkime atgal į OpenStreetMap planetą. Jau senokai pasibaigė laikai, kai norint žemėlapyje pažymėti vieną ar kitą objektą, reikėjo važiuoti į vietą su GPSR įrenginiu, atlikti vienokius ar kitokius vietos ir objekto savybių fiksavimo veiksmus ir tada grįžus namo būdavo galima įvesti objektą į OpenStreetMap duomenų bazę.

Dabar praktiškai visi naujokai apie žemėlapio žymėjimą sužino paspaudę mygtuką „Keisti“, kuris jiems atveria iD redaktorių:

Numatytojo OpenStreetMap iD redaktoriaus pradinis vaizdas

Ką mes matome labiausiai? Per visą įmanomą plotą – ortofotografiją.

Puiku, naujus objektus žymėti „apačioje“ turint ortofotografiją yra labai patogu! Va, čia matau namuką – pažymėkime. Čia matau upeliuką – pažymėkime. Čia matau kelią – pažymėkime. Va čia, prie mano sodybos, yra mūsų sukurta tinklinio aikštelė – pažymėkime.

Ir tik viską sužymėjus pradedama žiūrėti: „ar rodo žemėlapyje?“. Jei nerodo (t.y. nerodo OpenStreetMap-Carto), gal rodo koks nors kitas specializuotas žemėlapis.

Taigi visas procesas apsiverčia aukštyn kojomis. Iš pradžių nubraižom (dažnai tiesiog viską, ką matome, dažnai su labai smulkiomis detalėmis), o tada galvojam kam to reikia.

Vertinimai, pamąstymai

Vienareikšmiškai negalima pasakyti, gerai ar negerai toks proceso apsivertimas.

Minusas būtų tai, kad bežymint objektus gali atsitikti: „o čia yra… nežinau… kažkoks kvadratinis dalykas, jis aiškiai matosi ortofotografijoje – apibrėžkime jo geometriją (plotą), reikia pridėti kokias nors žymas, paieškokime ko nors panašaus, ai, tegul būna tiesiog lankytina vieta“. Taigi stengiamasi vektorizuoti viską viską, tarsi vėliau iš turimų poligonų būtų bandoma sukurti tokį patį vaizdą, kaip kad buvo ortofotografijoje. Tik tokiu atveju kam iš viso vektorizuoti – naudokim ortofotografiją – patogu ir paprasta.

Žinoma galima sakyti: taigi žmonės stengiasi sužymėti viską viską, kad tada būtų galima sukurti bet kokius žemėlapius! Teoriškai taip, tik problema tame, kad tiksliau tai būtų įvardinti „…tada kas nors kitas kada nors galbūt norės sukurti tokį ar anokį žemėlapį“, kas realybėje beveik visada reiškia „niekada“. Laiko švaistymu to pavadinti negalima, nes atvirasis žemėlapis – hobis, vektorizavimas iš principo veikia raminančiai. Tik tiek, kad duomenų bazėje atsiranda objektai, kurie į žemėlapius niekada nepateks, bet braižant toje vietovėje jie atima dėmesį vektorizuojant kitus objektus. Arba objektai nubraižomi tokiu detalumu, kuris nebus naudingas jokiame žemėlapyje. Pavyzdžiui kai takais išmindytoje pievoje landuse=meadow sudedama tik tose vietose, kur ortofotografijoje matosi žolė.

Bet yra ir pliusų. Jei prieš žymėjimą turėsime susirasti (ar nuspręsti susikurti) dominantį žemėlapį, tai labaaai nedaug naujų žymėtojų atsiras. Žymėjimo su ortofoto paprastumas leidžia žmonėms suprasti, kaip paprasta yra redaguoti OpenStreetMap žemėlapį. O tada jau tikimasi, kad nauji žymėtojai greitai supras kaip kur kas ir persiorientuos iš „žymim viską, ką matom ortofoto“ į „pildome duomenis mane dominantiems žemėlapiams“.

Tai tokie būtų mano pastebėjimai. Iš tikrųjų tai nežinau, gerai tai ar negerai, bet turėti bendrą vaizdą mintyje, mano galva, reikėtų visiems.

Share

Vandens telkinių etiketės

Visi ne kartą matėte žemėlapiuose ežerų ir tvenkinių etiketes (pavadinimus). Spausdintuose profesionalių kartografų sukurtuose žemėlapiuose tokios etiketės yra išlenktos pagal vandens telkinio formą, šrifto dydis ir tarpai tarp raidžių parinkti taip, kad etiketė būtų kiek galima didesnė (proto ribose).

Prie ežero formos pritaikytos etiketės labiau siejasi su ežeru, t.y. žemėlapio skaitytojui aiškiau, kad ši etiketė priklauso būtent ežerui, ir būtent šitam ežerui. Kuo mažiau skaitytojui reikia sąmoningai galvoti – tuo žemėlapis yra aiškesnis, tuo geriau jis perduoda norimą informaciją.

O štai internetiniuose žemėlapiuose tokios etiketės paprastai tiesiog numetamos kaip paprastos, horizontalios, vienodo šrifto ir vienodų tarpų tarp raidžių. Tas pats buvo ir su OpenStreetMap žemėlapiu. Tikriausiai labiausiai pažengusiu galima laikyti gūglo žemėlapį, kur vandens etiketės bent jau pakreiptos pagal ežero formą, bet dydis vis tiek vienodas.

Šito priežastis gan paprasta: nėra trivialu parašyti algoritmą, kuris paskaičiuotų teisingus etikečių parametrus, bet dar sunkiau yra iš principo abstrakčiai aprašyti, kaip tos etiketės turėtų atrodyti.

Džiugu pranešti, kad bendradarbiaujant su Lietuvos kartografų draugija baigtas pirmas tokių etikečių skaičiavimo algoritmo kūrimo etapas. Kuriamos paprastesnių vandens telkinių (kurių yra 99%) etiketės ir šiuo metu vaizduojamos Lietuvos topografiniame žemėlapyje:

Prie ežero formos ir dydžio pritaikytos vandens telkinių etiketės

https://topo.openmap.lt/#t/14/55.31276/25.55175/0/0/

Jau greitu metu tokios etiketės bus naudojamos ir kituose openmap.lt žemėlapiuose, etikečių duomenys bus pateikti atviru formatu visiems, kuriantiems savo žemėlapius.

Detalesnę techninę informaciją rasite Spatial Forces tinklaraštyje.

Share

Įdomiosios administracinės ribos

Atvirajame žemėlapyje (OpenStreetMap) adresus suveda vietos žinias turintys žmonės, nes Registrų centre saugoma adresų informacija vis dar uždara. Išimtis tik Vilnius, kuris kol kas vienintelis drąsus Lietuvos miestas, atvėręs savo adresų (ir ne tik) duomenis.
Adresų paieškai reikia dar ir administracinių ribų. Kadangi šie Registrų centre saugomi duomenys irgi uždari, tai juos tenka rankioti iš bendrųjų planų ir tada modifikuoti pagal realiai įvestus adresus.
Šiame įraše ir noriu parodyti vieną vietą Vilniaus rajone, kur administracines ribas suvedus pagal realius adresus, gavosi labai „įdomus“ rezultatas.

Prašome pasigėrėti:

Viena spalva – viena gyvenvietė!

Žinoma oficialios administracinės ribos ne tokios sudėtingos, bet oficialiose ribose oficialūs adresai sukrenta iš kitų gyvenviečių, t.y. gyvenvietės X ribose turime gyvenviečių Y ar Z adresus, o tai dar blogiau 🙂

Share

Mašininis mokymasis II: rezultatai

Ankstesniame įraše buvo rašyta apie mašininio mokymosi reikalavimus ir potencialą atpažįstant objektus ortofotografiniuose žemėlapiuose. Šį kartą parašysiu apie tai, kokie stebimi praktiniai rezultatai su Lietuvos objektų atpažinimu.

Pastatų atpažinimas

Pastatų atpažinimas bandomas jau du mėnesius. Modelis apmokytas su beveik tūkstančiu kaladėlių. Tai nėra didelis kiekis, bet jau matomi šiokie tokie rezultatai ir tendencijos. Verta paminėti, kad pradžioje pabandžius mokyti su tiesiog iš OpenStreetMap paimtais duomenimis, rezultatai buvo daug prastesni, nei kruopščiai parinkus (ir dažnai pataisius) OSM duomenis. T.y. žemiau pateikiami rezultatai modelio, kuris apmokytas su tiksliai (kiek tai įmanoma) pažymėtais pastatais – iki minimumo sumažintas klaidingų ar netikslių etikečių skaičius.

Mokymo rinkiniui kurti ir rezultatams tikrinti buvo sukurta paprasta web aplikacija, apie kurią parašysiu trečiame įraše. Kol kas užteks tik bendros informacijos. Apmokytam modeliui buvo pateikta dvidešimt tūkstančių kaladėlių, kuriose jis turėjo ieškoti pastatų. Štai pavyzdinis rezultatas:

Viršutinėje dalyje matome ortofoto kaladėlę (apibrėžtą punktyrais), kurioje ieškoma pastatų. Žaliai pažymėti OpenStreetMap jau pažymėti pastatai (šios informacijos robotas atpažinimo metu neturi).

Po ortofotografija yra dvi kaladėlės – roboto darbo rezultatai. Kairėje pusėje esančioje kaladėlėje yra nuotraukos segmentacijos rezultatas: kiekvienam taškui paskaičiuota tikimybė, kad jame yra pastatas. Kuo taškas rausvesnis, tuo didesnė tikimybė, kuo baltesnis – tuo mažesnė. Dešinėje kaladėlėje yra išrinkti tik taškai, su didele pastato buvimo tikimybe – tai yra šio etapo galutinis rezultatas. Kaip matome, atpažinti pastatai yra apvalūs. Tai pasekmė to, kad modelis pastato kraštus atpažįsta su vidutine tikimybe. Norint tokius duomenis naudoti automatiniam geometrijos (pastato formos) identifikavimui, reikėtų pritaikyti papildomą algoritmą, kuris iš tokio „apvalaus“ daikto sukurtų „kampuotą“ pastatą. Tai yra netrivialu, o gal net ir neįmanoma, kol turime dabartinę atpažinimo kokybę.

Kaip ten bebūtų, pirmam tikslui – trūkstamų pastatų identifikavimui ir nebeegzistuojančių pastatų aptikimui – šito pilnai užtenka. Pavyzdžiui, patikrinęs ~20000 kaladėlių aplink Labanorą, robotas iš karto galėjo atmesti ~95% kaladėlių, kur jis nerado jokių pastatų. Taigi net rankiniu būdu peržiūrint rezultatus, sutaupoma ~95% laiko, nes nebereikia tikrinti kaladėlių, kuriose yra tik miškai, vanduo, pievos, pelkės ar keliai.

Aukščiau pateiktoje nuotraukoje matome, kad robotas visgi nerado pietvakariuose nuo viršutinio pastato esančio pastato (tiksliau rado nepakankamai užtikrintai). Ir tas trūkstamas pastatas turėjo tikimybę panašią į automobilį, stovintį greta apatinio aptikto pastato. Taigi „false negative“ problema yra, tiesa, lyg ir nedidelė. Esant tokiai situacijai kaladėlė įtraukiama į mokymosi aibę, kad per kitą mokymąsi robotas išmoktų aptikti tokį pastatą (ir neaptikti automobilio).

Yra ir „false positive“:

Čia matome, kad robotas neteisingai kaip pastatą identifikavo kai kurias kelio atkarpas, arba tiltą:

Taip pat problemų kol kas kyla ir su kai kuriais objektais ant žemės (polietileninė plėvelė ant lysvių(?) kaladėlės viduryje:

Kadangi robotas nepavargsta, jam neatsibosta, neišblėsta dėmesys, o ir kontrastas jam mažiau svarbus, jis be problemų randa pastatus, kuriuos žiūrint akimis galima ir praleisti:

Taigi rezultatai geri, atsižvelgiant į pirmą tikslą: aptikti trūkstamus ir nebeegzistuojančius objektus. Tikiuosi, kad neteisingi aptikimai beveik dings dar geriau apmokius modelį.

Modelio apmokymas

Peržiūrint rezultatus atrenkamos kaladėlės mokymuisi. Tai ir „positive“ kaladėlės – su įvairių formų, spalvų pastatais, ir „hard negative“ kaladėlės – kuriose pastatų nėra, bet modelis juos ten aptinka. Į mokymosi aibę neįtraukiamos kaladėlės, kur pastato matosi tik kampas, arba kur aš pats negaliu pasakyti, kokia yra pastato tiksli geometrija arba apskritai, ar yra pastatas ortofotografijoje.

Pats apmokymas turėtų būti daromas naudojant GPU (Grafinius procesorius), bet, kadangi tokio neturiu, kol kas mokau naudodamas paprastą CPU. Dėl GPU nenaudojimo apmokymas yra ~10 kartų lėtesnis, tai su ~1000 mokymosi kaladėlių ir 15 epochų modelis mokėsi apie savaitę. Ateity reikės galvoti kažką gudresnio.

Geometrijos aptikimas

Dabartinis aptikimo rezultatas neleidžia pakankamai tikslai identifikuoti pastatų geometrijos. Paklaida tiesiog per didelė (pabandykite nežiūrėdami į ortofotografiją, vien iš tikimybinių paveiksliukų identifikuoti, koks turėtų būti pastatas, t.y. kur ir kokie turėtų būti pastato kampai). Su kiekvienu nauju mokymusi su didesniu kaladėlių skaičiumi, tikimybinis pastato šablonas tikslėja, bet klausimas, kiek jis tikslės. Gali būti, kad tiesiog ORT10LT nuotraukos yra nepakankamai detalios. Tarkime čia naudojamos 18 mastelio nuotraukos, o kolegos užsienyje gali džiaugtis 19 mastelio ortofotografijomis. Taigi dar reikia mokytis ir žiūrėti, kas gausis.

Turint tikslesnius šablonus reikės rašyti algoritmą vektorinės pastato geometrijos kūrimui iš rastro (jei niekas kitas tokio algoritmo neparašys). Minčių, kaip tą padaryti galima rasti Microsofto pristatyme.

Kol kas tiek. Kitame įraše papasakosiu, koks sukurtas robosato „apvalkalas“ patogesniam mokymo aibės kaupimui ir rezultatų naudojimui.

Share

Mašininis mokymasis I: reikalavimai

Prieš du mėnesius buvo rašyta apie Mapbox sukurtą atvirą ortofotografijų atpažinimo programinę įrangą „Robosat“.

Robosat

Tai mašininio mokymosi, gilaus mokymosi (angl. deep learning) priemonė, skirta spręsti nuotraukų segmentavimo (angl. image segmentation) uždavinį. Čia patikslinsiu, kad nuotraukų analizę (angl. computer vision) grubiai galima būtų skirstyti į du tipus:

  • objektų aptikimas – galimybė nurodyti, kad „štai šiame nuotraukos stačiakampyje yra objektas X“,
  • segmentavimas – tai irgi objektų aptikimas, bet nuotraukos taško lygmenyje, t.y. nurodymas, kad „štai šitame pateiktos nuotraukos taške yra objektas X“ (paprastai aptiktas X objektas identifikuojamas daugiau nei viename nuotraukos taške, rezultato pavyzdį matote aukščiau pateiktoje iliustracijoje, kur identifikuojami pastatai, keliai ir medžiai).

Toks ortofotografijų segmentavimas leidžia spręsti tokius uždavinius:

  1. identifikuoti, kad kažkuriame Lietuvos segmente (ortofotografijos kvadratėlyje) yra ar nėra kažkokių objektų, tarkime pastatų,
  2. identifikuoti objektų geometrijas (formas).

Kaip tai pagerintų Lietuvos žymėjimo situaciją, lyginant su dabartine?

Pirmas punktas (objektų aptikimas) leidžia robotui duoti patikrinti atnaujintas ortofotografijos kaladėles (pvz. trečdalį Lietuvos) ir tada žmogų nukreipti tik į tas vietas, kur aptikti nepažymėti objektai (arba kur objektas pažymėtas, bet ortofotografijoje jo nebesimato). Taigi žmogus vis tiek turi atlikti žymėjimo darbą, bet jam nebereikia „ieškoti“ objektų žymėjimui. Pavyzdžiui rasti pastatus dideliuose retai gyvenamuose plotuose yra ne tokia jau ir paprasta užduotis – reikia peržiūrėti labai didelį plotą, o kai analizuojamame regione norimų objektų jau yra nemažai pažymėta, žmogaus dėmesys atbunka ir daroma nemažai klaidų (praleidžiami skirtumai tarp ortofotografijų ir sužymėtų objektų). Taipogi, kai objektus aptinka robotas, tai galima tikėtis tolygaus (pilno) objekto sužymėjimo visame apdorotame regione (pvz. Lietuvoje), t.y. galima tikėtis, kad bus sužymėti beveik visi objektai, o ne taip, kaip yra dabar – sužymėti tik tie plotai, kurie kažkam kažkodėl pasirodė įdomūs.

Antras punktas (objektų geometrijos identifikavimas) leistų dar daugiau – robotas galėtų (galbūt su žmogaus patvirtinimu) pats sužymėti (ar ištrinti) objektus.

Kas įmanoma, kas neįmanoma, kokios realios galimybės ir problemos, negalima atsakyti nepadarius bandymo su Lietuvoje naudojamomis Nacionalinės Žemės Tarnybos ortofotografijomis (ORT10LT). Atsakyti negalima, nes rezultatai labai priklauso nuo konkretaus ortofotografinio žemėlapio savybių: spalvų, rezoliucijos, analizuojamo objekto savybių (skirtingose šalyse skirtingi pastatai) ir pan. T.y. negalima tiesiog remtis užsienio rezultatais.

Kad tai būtų išsiaiškinta, jau beveik du mėnesius vykdomas bandomasis robosat naudojimas aplink Labanorą. Apie rezultatus parašysiu kitame įraše.

Share