Lietuvos adresų informacijos įkėlimas

2020 metų spalį Registrų centras paskelbė atvirą Lietuvos adresų kadastro duomenų rinkinį. Šiame duomenų rinkinyje yra informacija:

  • Adresų taškų (taško koordinatės, miestas, gatvė, namo numeris, korpusas)
  • Gatvių ašinių linijų (linijos geometrija, gatvės pavadinimas)
  • Administracinių ribų (gyvenviečių ribų poligonas, gyvenvietės pavadinimas)

Kadangi rinkinys atviras, nors ir neatnaujinamas, buvo nuspręsta jį įkelti į OpenStreetMap duombazę. Visą rinkinį, išskyrus Vilniaus duomenis, nes Vilniaus miesto savivaldybė jau daug metų kas savaitę atnaujina atvirą adresų rinkinį, todėl Vilniaus adresų informacija jau buvo tvarkinga ir Vilniaus miesto savivaldybės informacija yra naujesnė.

Buvo paruošta programinė įranga, leidžianti importuoti adresų duomenis atsižvelgiant į jau esamus duomenis:

  • neimportuoti jau esamų adresų
  • jei yra pastatas, kuriam galima vienareikšmiškai priskirti adresą, tai adresas priskiriamas pastatui
  • jei naujo adreso vietoje nėra nei pastato, nei kitų adresų, adresas importuojamas kaip naujas taškas
  • kitais atvejais paruošiamas pusiau-automatinis adreso įkėlimas, t.y. žmogus peržiūri vietą ir padaro sprendimą, kaip/kur pridėti adresą
  • pašalinti perteklinius adresus

Adresų importo progresą galima matyti šiame video:

Lietuvos adresų įkėlimas 2020-10 – 2021-03

Įkėlimas užtruko virš penkių mėnesių, nes adresai (kaip ir bet kokia kita informacija) nėra izoliuoti – jie susiję su kitais duomenimis. Pavyzdžiui gatvėmis (jei yra gatvės A adresas, tai tokia gatvė privalo būti netoli adreso) ar gyvenviečių ribomis (jei yra gyvenvietės B adresas, tai jis privalo būti tokios gyvenvietės ribose).

Kaip paaiškėjo, būtent gatvių informacijos sutvarkymas ir buvo daugiausia žmogiškų pastangų reikalaujanti dalis, nes gatvių duomenų nebuvo galima įkelti automatiškai – algoritmas būtų stipriai per sudėtingas (kelius reikia kurti, jungti, skaidyti, keisti klasifikacijas ir pan.), na ir kai kurių gatvių geometrijos informacija OpenStreetMap duombazėje yra gerokai tikslesnė, tai vietomis tik žmogus gali nuspręsti, kuriam keliui priskirti pavadinimą ar kokia turėtų būti gatvės geometrija (pvz. kad nekirstų pastatų ar vandens telkinių).

Gatvių pildymui buvo sukurtos ataskaitos, leidžiančios gatvių pavadinimų tvarkytojams matyti nesutvarkytas gatves išrikiuotas pagal atstumą nuo jų pageidaujamo taško: buvo tvarkoma nuo Vilniaus, Klaipėdos, Kauno, Biržų ir Šiaulių. Kaip sekėsi tvarkyti gatvių pavadinimus galima matyti šiame video:

Gatvių pavadinimų pildymas 2020-10 – 2021-03

Viso šio projekto rezultatas – užpildyta/atnaujinta Lietuvos adresų informacija, sutvarkyti gatvių pavadinimai. Adresų skaičius Lietuvoje pašoko nuo 300 tūkstančių iki 1,1 milijono! Buvo sutvarkyta daugiau nei 25 tūkstančių kelių pavadinimų informacija: įvestas pavadinimas arba pridėta žyma, kad kelias patikrintas ir jis neturi pavadinimo.

Adresai nėra statinis dalykas, jie pastoviai keičiasi. Kol nesutvarkyta situacija su Registro centro veiklos nuostatais (šitą dalyką valdo Lietuvos Respublikos Seimas), tol adresų informacijos atnaujinimų tikriausiai arba negausime, arba gausime labai periodiškai, taigi adresų atnaujinimas lieka mūsų – žymėtojų – užduotis. Na o kai adresų kadastro duomenys bus galutinai atverti – mes jau būsime pasiruošę jį daug greičiau integruoti.

Share

Mašininis mokymasis III: procesas

Orto

Prieš kelias savaites rašiau, kokią naudą gali duoti mašininis mokymasis OpenStreetMap duomenų tvarkymui Lietuvoje, taip pat kokie yra pirmų praktinių bandymų rezultatai.

Kaip ir daugeliu atveju, plikas kodas neduoda žymios naudos, jei jis nėra integruotas į didesnį procesą, tai šį kartą aprašysiu, koks kol kas sugalvotas mašininio mokymosi panaudojimo procesas Lietuvoje (džiugu būtų išgirsti ir jūsų minčių!).

Mašininio mokymosi veikimui mums reikia sukurti kokybišką mokymosi duomenų aibę, o tada ją palaikyti, nes su laiku keičiasi tiek ortofoto, tiek ir OSM duomenys. Todėl reikia periodiškai pažiūrėti, ar mokymosi kaladėlėse OSM duomenys vis dar atitinka ortofoto. Jei to nepadarysime, vykdant naujus modelio mokymus, jis gali mokytis pagal neteisingus duomenis, todėl rezultatų kokybė gali kristi.

Nesinori į mokymosi aibę dėti labai panašių kvadratų, arba tokių, kuriuose atpažinimas jau vyksta gerai. T.y. šiuo metu manau, kad geresnę mokymosi aibės kokybę galima pasiekti rankiniu būdu peržiūrint atpažinimo rezultatus ir tada į mokymosi aibę pridedant tuos kvadratus, kuriuose dar reikėtų papildomai pasimokyti: t.y. tiek atpažinti nepastebėtus pastatus, tiek ir neatpažinti kaip pastatų visai kitų objektų.

Gauname tokį procesą:

Deep learning veikimo schema

Viso ko pradžia yra pradinė mokymosi aibė. Pačioje pradžioje nėra kito kelio kaip tik rankiniu būdu parinkti šiek tiek kaladėlių, kuriose būtų analizuojami objektai (pvz. pastatai). Kol pradinė mokymosi aibė bus nedidelė (keli šimtai įrašų), modelis dar nepateiks gerų atpažinimo rezultatų, bet pradėti nuo kažko reikia.

Apmokę modelį su pradiniu duomenų rinkiniu, galime paprašyti, kad modelis patyrinėtų didesnį plotą (dar nematytą mokymo metu, tarkim 10000 ortofoto kaladėlių). Peržiūrint rezultatus, visų pirma patikriname, ar ortofoto atitinka OSM duomenis (peržiūrimos tik tos kaladėlės, kuriose modelis aptiko mums rūpimų objektų, arba kaladėlės, kuriose modelis objektų neaptiko, bet OSM tokie objektai yra pažymėti). Jei OSM duomenys nėra pakankamai geri, tai kaladėlė perkeliama į „purvinų“ kaladėlių sąrašą. Šį sąrašą gali peržiūrinėti kiti žmonės, kurie užsiima OSM duomenų tvarkymu. Patvarkius duomenis, kaladėlė vėl iš naujo patenka į peržiūrą, kur teoriškai ji gali pakartotinai būti nusiųsta į „purvinų“ kaladėlių aibę.

Jei kaladėlė „švari“, t.y. ortofoto duomenys sutampa su OSM duomenimis, tada daromas sprendimas, ar kaladėlę tiesiog pažymėti kaip sutvarkytą, ar ją įtraukti į mokymosi aibę. Sprendimas daromas remiantis tokiu kriterijumi: „ar mokymosi aibė turės naudos iš šios kaladėlės?“. Naudos gali turėti, kai:

  • Kaladėlėje buvo objektas, kurio modelis neatpažino, arba atpažino labai netiksliai. Reikia atsižvelgti ir į ortofotografijos kokybę: jei modelis objektą atpažino nepilnai, bet likusios dalies nesimato (tarkim už medžių), reikia pagalvoti, ar tikrai galima vienareikšmiškai pasakyti, kokia yra nematoma objekto geometrijos dalis. Mes nenorime modeliui pateikti savo spėjimų ir paprašyti pagal juos mokytis.
  • Kaladėlėje nėra objekto, o modelis jį rado. Paprastai tai būna koks nors kitas objektas, kuris kažkuo panašus į mums rūpimą objektą. Pavyzdžiui tiltas gali pasirodyti panašus į pastatą, kūdrą gali būti sunku atskirti nuo kitų vandens objektų – upių, ežerų ar tvenkinių. Arba pastatai ir šiltnamiai – kol kas negaliu pasakyti, ar geriau šiltnamius atpažinti kartu su pastatais, ar geriau juos atskirti.

Toks procesas leidžia didelį darbo kiekį skaidyti į mažus gabaliukus, kas padeda darbo atlikimui bei progreso sekimui. Taip pat mašininio mokymosi dalis atskirta nuo duomenų redagavimo dalies. Taigi žmonės, kurie moka redaguoti duomenis, nebūtinai turi būti mokomi mašininio mokymosi specifikos. Tuo pačiu mašininio mokymosi užduotį atliekantiems nebūtina mokytis duomenų redagavimo.

Ateities planuose yra du esminiai darbai:

  1. automatizuti modelių rezultatų ir OSM duomenų palyginimo užduotį, t.y. automatiškai nustatyti, ar objektų trūksta, yra per daug, o gal pasikeitė objektų geometrija;
  2. automatizuoti objektų geometrijos nustatymą pagal modelio rezultatus.

Taigi bendras principas toks. Dabar laukia netrivialūs automatizavimo uždaviniai.

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

Pastatai 2018

Kiek pastatų turime suvedę į atvirąjį žemėlapį? Palyginkime su GDR10LT.
Jei GDR’e yra 1,8 milijono pastatų, tai OpenStreetMap jų kol kas yra tik 0,8 milijono.
O čia galite pažiūrėti, kaip pastatų braižymas pasiskirstęs geografiškai:

Pastatų skaičiaus palyginimas su GDR

Kaip matome, pastatų dar labai daug trūksta. Labiausiai trūksta rečiau apgyvendintose vietovėse, soduose. Tikriausiai todėl, kad pastatai ten labai monotoniški – greitai pabosta braižyti. Taigi jei kada rasite laisvas kelias minutes – pridėkite naujų namukų – juos braižyti galima minutę, galima pusvalandį – kaip jau jums patinka. Ir žemėlapius pastatai tikrai labai praturtina, ir adresus suvesti žmonėms paprasčiau, ir įvairias lankytinas vietas žymėti aiškiau.

Share

Kelių koncentracija

Prieš mėnesį buvo rašyta apie kelių klasifikacijos reikšmę kartografijoje ir apie automatinius tikrinimus. Buvo identifikuotos trys problemos:

  • Pasimetę (neprijungti) keliai
  • Per aukšta klasifikacija
  • Per žema klasifikacija

Tada buvo pateiktas pirmos problemos (pasimetusių kelių) sprendimas. Dabar kilo mintis, kaip spręsti antrąją problemą (per aukšta klasifikacija). Gan paprastas (nors ir neidealus) pasirodė toks sprendimas:

  • Daliname Lietuvą į tokio paties dydžio segmentus
  • Kiekviename segmente skaičiuojame kelių ilgius
  • Tikriname didžiausius ilgius turinčius segmentus

Gaunasi visai neblogas rezultatas, kuo raudonesnis segmentas, tuo didesnė jo kelių koncentracija:

Lietuvos kelių koncentracija

Ir priartinta viena iš koncentracijų:

Priartinta kelių koncentracija

Kaip matome, aptinkamos kelių koncentracijos. Sutvarkius didžiausias koncentracijas iškyla neteisingai aptiktos problemos (angl. false positive), t.y. didžiųjų miestų keliai. Bandžiau žaisti su skirtingais segmentų dydžiais, skirtingų klasifikacijų kelių svoriais, skaičiuojant koncentraciją segmente, bet, matyt, teisingesnis sprendimas būtų panaudoti Statistikos departamento turimas gyventojų koncentracijas ir pagal tai koreguoti kelių ilgį. T.y. kuo didesnė gyventojų koncentracija, tuo didesnė gali būti ir kelių koncentracija. Na bet šitą paliksime ateičiai. Kol kas naudinga tiek, kiek identifikuoja paprastas algoritmas 🙂

Kai kurios koncentracijos gali būti neaptinkamos, jei segmentai dengia tik jų dalį. Šitą problemą galima būtų spręsti kuriant persidengiančius segmentus.

Paskutinę problemą – per žemą klasifikaciją – gal būtų galima spręsti darant maršrutizavimo testus, bet yra daug variantų, kur tiesiog kelių grafo analizė negali duoti teisingo sprendimo. Tarkim būna, kad yra kokia nors įmonės/gyvenvietės teritorija ir greta jos tolimesniu keliu eina apvažiavimas, kuris ir turi turėti aukštesnę klasifikaciją, nes būtent apvažiavimu turėtų važiuoti transportas. Panašu, kad tokių dalykų neįmanoma spręsti be ortofotografijos ir vietos žinių…

Share