Pasivaikščiojimai nepramintais takais

Daug kas mėgsta pasivaikščioti pažintiniais takais: paruoštais turistams, išvalytais, sutvarkytais, su įvairiais informaciniais stendais, aikštelėmis automobiliams, tuntais kitų keliautojų ir pan. Bet ar bandėte kas nors kitokius maršrutus – nepritaikytus turizmui, tokius, kuriuose jūs praktiškai niekada nesutiksite kitų žmonių?

Specialiai turizmui nepritaikytuose maršrutuose lankomos mažai kam žinomos vietos, važiuojama ar einama kitų žmonių nepramintais takais:

Nežymus takelis – įprasta laukinio maršruto atkarpa

Tokie takai anksčiau ar vėliau apdovanoja – kelionėje pailsime po ilgaamžiais ąžuolais galiūnais:

Ąžuolo paunksmė

Arba patenkame į tokias slaptas vietas, kurių, jei iš anksto nežinosi, gali ir visai nepastebėti, net praeidamas visai šalia. Štai miške (pagal instrukcijas) neriame į tankmę ir… patenkame prie šaltinio – upeliuko pradžios, pasislėpusios iš šonų nepastebimoje miško dauboje:

Sukros miško šaltinis

Tokie maršrutai labai gražūs ir įdomūs, bet kadangi maršrutas nėra pažymėtas realybėje, reikia turėti žemėlapį, kad neišklystum. Visgi, kodėl apie tai rašau atviro žemėlapio dienoraštyje, kuris nėra skirtas kelionėms?

Pirma – žemėlapio pildymas. Laukiniai maršrutai mus veda per vietas, kurios yra retai lankomos, todėl dažnai būna silpnai sužymėtos, o internete (nenuvykus į vietą) sunku rasti informacijos. Bet dabar, be abejo, įdomiausias iš tokių vietų jau galima rasti ir OpenStreetMap:

https://topo.openmap.lt/#t/16.33/54.86304/24.7826/0/0/

Antra – archeologo prof. dr. Vykinto Vaitkevičiaus projektas https://www.vykintokeliai.lt siūlo būtent tokius maršrutus. Kadangi reikia žemėlapio – prasidėjo bendradarbiavimas su OpenStreetMap: žemėlapis ne tik naudojamas maršrutų informacijai ruošti ir publikuoti, jis taip pat papildomas įvairiausia informacija apie vietas, nutolusias nuo tankiai apgyvendintų vietų – šis papildymas labai vertingas.

Trečia – pagal realiame gyvenime patikrintus poreikius, kartu kuriama maršrutų (takų) planavimo ir publikavimo aplikacija, kuria pasinaudoti galės visi norintys! Apie tai parašysiu kitame dienoraščio įraše.

Share

Lietuvos upių baseinai II

Beveik prieš metus buvo rašyta apie Lietuvos upių baseinų žemėlapio kūrimą. Atsirado žmonių, kurie norėjo detaliau pasinagrinėti tokį žemėlapį, o susikurti savo db, įvykdyti skaičiavimus ir pan. nėra taip labai jau paprasta. Taigi dabar pristatome tą patį žemėlapį, tik jau perdaryta vektorinėmis internetinių žemėlapių technologijomis: https://openmap.lt/baseinai.html.

Upių baseinų žemėlapis

Kad stambesniuose masteliuose būtų kiek paprasčiau orientuotis – fone pridėti labai blyškūs gyvenviečių pavadinimai (kad nelįstų per daug į akis, nes svarbiausia šiame žemėlapyje – upės). Taip pat pridėtas ir puikusis reljefas, kurio tamsus variantas dera su neoniniu vandens kelių stiliumi ir sukuria atitinkamą „emocinį foną“.

Stambus upių baseinų žemėlapis

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 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