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

Žymėtojai 2018-03

Tai kas ir kur žymi Lietuvoje? Ogi pasirodo pakankamai daug skirtingų žmonių! Vieni žymi aplink savo gyvenimo vietą, kiti pagal kažkokias kitas žymėjimo schemas.

Lietuvos žymėtojai 2018-03

Žemėlapis pagamintas padalinus Lietuvą į šešiakampius, tada paskaičiavus, kiek kiekvienas žymėtojas tame šešiakampyje yra paskutinis keitęs tašku, linijų ir poligonų. Kiekviename šešiakampyje vaizduojamas didžiausią skaičių gavęs žymėtojas.

P.S. Tai grubus laisvalaikiui pagamintas vaizdavimas. Jei kas nepateko į žemėlapį, tai nereiškia, kad jūsų indėlis nesvarbus. Juk nupaišome didelį mišką ir gauname tūkstančius objektų, o nupaišome 50 stovyklaviečių – gauname 50. Ir sunku pasakyti, kas realiai vertingiau 🙂

Share