• No results found

För att justera resultatet av programmets automatiskt genererade pixel-masker användes VGG annotator [24] som är ett annoterings-program avsett för just detta syfte.

Csv-filen lästes först in i VGG, där för vi sedan justerade trädens pixel-masker till en kontur som följde trädstammarna. På grund av att vi tror att man skulle få ett större antal maskerade träd genom ett punktmoln av högre precision så valde vi att bara utföra just finjusteringar, inte att skapa helt nya pixel-masker för träd som inte blev maskerade i processen, men som ändå är fullt synliga på bilderna. Detta anser vi då kommer att reflektera programmets egentliga potential, eftersom att den nuvarande flaskhalsen är just punktmolnets precision, som resulterar i dålig segmentering, som resulterar i mindre bra pixel-masker.

De operationerna som mättes var följande:

 Finjustering av genererade pixel-masker, kontra manuellt skapande av pixel-masker från grunden. Motsvarar arbetet som sparas in genom att programmet automatiskt genererar de första konturerna, där användaren sedan korrigerar efter behov.

 Förstoring av pixel-mask och finjustering av alla automatiskt förstorade masker, kontra manuellt förstoring av pixel-masken på varje bild trädet förekommer i. Motsvarar arbetet som sparas in genom att programmet automatiskt propagerar en uppdatering genom flera bilder, där användaren sedan korrigerar de uppdaterade bilderna efter behov.

 Förminskning av pixel-mask och finjustering av alla automatiskt förminskade pixel-masker, kontra manuellt förminska masken för varje bild trädet förekommer i. Motsvarar tiden man sparar in genom att programmet automatiskt propagerar en förminskning av pixel-maskerna för ett viss träd genom flera bilder, där användaren sedan korrigerar de uppdaterade bilderna efter behov.

Detta resulterar i att man får ett mått på det automatiskt utförda arbetet tillsammans med tidsåtgången för de nödvändiga justeringarna som motsvarar den manuella insatsen.

Nedan presenteras resultatet efter att ha utfört respektive operation för 100 slumpmässigt valda bilder och träd per operation, där genomsnittet presenteras i sekunder

Tablell 4: Samtliga utförda tidmätningar. Se bilaga för grafisk representation.

Operation Sekunder

Justera automatiskt genererade pixel-masker. 10

Skapa pixel-masker manuellt. 17

Förstora pixel-mask och justera automatiskt genererade förstoringar.

324

Lätt till förstoring på pixel-mask manuellt. 456 Förminska pixel-mask och justera

automatiskt förminskade pixel-masker.

222

Förminska pixel-mask för träd manuellt. 338

Värt att förtydliga är att just operationerna för förstoring och förminskning involverar manuella justeringar för alla bilder som trädet är synligt i/uppdaterades i. Därför blir en tilltänkt uppdatering till vissa avgränsande punkter i startbilden till en justering som måste äga rum för alla bilder som trädet är synligt i. Då ett och samma träd är synligt i ett stort antal bilder så resulterar det i att många bilder måste justeras, eftersom att uppdateringen kommer att propagera genom alla dessa (förutsatt att det räknas som synligt i programmet, vilket nästan alltid är fallet).

Bild 23: Manuell justering. Korrigering av konturer längs träden och nära marken.

Före och efter.

För just förstoring och förminsknings-operationerna så valde jag att göra stora slumpmässigt valda justeringar, där jag valde ut några kringliggande saker nära marken för trädet att ha som en referens för vad som bör ingå i samtliga pixel-masker för alla andra bilder som samma träd är synligt i. Vid finjustering av den propagerade uppdateringen har man då de utvalda sakerna att utgå ifrån, så att man kan bedöma om förstoringen blev korrekt eller ej, sedan justera efter behov. Detta kan verka som ett märkligt sätt att mäta på, men på grund av punktmolnets låga täthet vad gäller punkter, så var jag tvungen att ta till denna metod för att mäta just förstorings-operationen.

För mindre finjusteringar vid förstoring så har nämligen inte punktmolnet en tillräcklig täthet för att låta programmet finna punkter nära de ursprungliga innan förstoringen. Detta ledde till att det i vissa fall knappt blev någon uppdatering alls vid minimala förstoringar, därav valde jag att mäta på detta sätt.

Man har till exempel inte samma problematik vid förminskning, där programmet helt enkelt tar bort punkter från ett PointObject.

Bild 24: Förstoring av pixel-mask. Stenar i marken som referens för förstoring.

6 Slutsatser

I det stora hela så lyckades man uppnå sitt mål med att automatisera delar av processen för att skapa pixel-masker för trädstammar i en bildsekvens. Man utnyttjade hur SfM-system skapar en koppling mellan pixel→punkt i 3D-rekonstruktionen, där man sedan genom att segmentera och identifiera träd i punktmolnet kunde utvinna 2D-representationer i form av pixel-masker som existerar genom hela bildsekvensen.

Genom detta kunde man sedan manuellt manipulera vilka punkter i punktmolnet som tillhör de olika segmenterade träden, där detta sedan har en effekt på trädens 2D-representation och hur pixel-maskerna förändras. Dessa förändringar propagerar då genom sekvensen och minskar det manuella arbetet för justering av pixel-masker.

Med det sagt så lyckades följande operationer för uppdatering av trädens pixel-masker implementeras:

 Automatiskt skapande av masker.

 Propagerande förstoring av valt träd och dess pixel-masker i bildsekvensen.

 Propagerande förminskning av valt träd och dess pixel-masker i bildsekvensen.

Exekveringstiden för samtliga operationer och uppstart av programmet kan man anse är inom ramen för vad man som användare inte skulle uppfatta som långsamt, med tanke på att det långsammaste av alla operationerna tog ungefär en halv sekund i genomsnitt. Uppstarten på ungefär 8 sekunder får också anses vara inom ramen för vad som anses vara en snabb uppstart av ett program.

Värt att nämna är att dessa exekveringstider påverkas av punktmolnets storlek, antalet segmenterade träd och antalet punkter i träden. Det är mycket möjligt att vid ett för stort punktmoln/för hög punkttäthet skulle uppstå en avsevärd försämring av exekveringstiderna. Man skulle då möjligtvis kunna utföra någon form av uppdelning av punktmolnet i sektioner, för att hålla exekveringstiderna inom vissa intervall.

Gällande tidsåtgången för de olika operationerna: Tittar man på tiden man ändå behövde lägga ned på manuell justering efteråt programmet utfört de olika operationerna, så kan det verka som att en stor del av det

manuella arbetet ändå fortfarande är kvar. Men då man vanligtvis behöver väldigt stora mängder data för just maskininlärningsmodeller så kan man ändå argumentera för det vore lönt att använda programmet vid skapandet av dataset.

Speciellt om man till exempel skulle behöva skapa pixel-masker för 1000 bilder för att uppnå god precision med sin CNN-modell, så är varje sekund man kan spara in något som är väldigt önskvärt.

Sett till hur mycket tid man faktiskt lyckades spara in på dessa operationer så kan man observera en tydlig skillnad för samtliga uppdateringsoperationer, där man mätte tidsåtgången mellan det rent manuella arbetet, kontra det automatiskt genererade resultatet med efterföljande manuell justering.

Man kan därav dra slutsatsen att genom användning av programmet så kunde man faktiskt spara in tid för de uppsatta målen för tidsåtgång.

Skillnaderna i tidsåtgångsmätningarna är emellertid tydliga, men där man som sagt hade önskat en ännu större skillnad.

Detta för oss till de – under projektet identifierade – flaskhalsarna för programmet i sin nuvarande form. Man kan gruppera in dem i tre olika kategorier, där ordningen på dessa är hur pass stor inverkan de hade på slutresultatet.

Related documents