Connect with us

Artificiell intelligens

Julien Rebetez, Lead Machine Learning Engineer på Picterra – Intervju-serie

mm

Julien Rebetez är Lead Software & Machine Learning Engineer på Picterra. Picterra erbjuder en geospatial molnbaserad plattform som är särskilt utformad för att träna djupinlärningsbaserade detektorer, snabbt och säkert.

Utan en enda rad kod och med bara några få mänskliga annoteringar bygger och distribuerar Picterras användare unika, användbara och färdiga djupinlärningsmodeller.

Det automatiserar analysen av satellit- och flygbilder, vilket möjliggör för användare att identifiera objekt och mönster.

Vad är det som lockade dig till maskinlärning och AI?

Jag började programmera för att jag ville skapa videospel och blev intresserad av datorgrafik först. Detta ledde mig till datorseende, som är en sorts omvänd process där du inte har datorn skapa en falsk miljö, utan istället har den uppfatta den riktiga miljön. Under mina studier tog jag några kurser i maskinlärning och blev intresserad av datorseendets aspekt av det. Jag tycker att det som är intressant med maskinlärning är att det ligger i skärningspunkten mellan programvaruteknik, algoritmer och matematik och att det fortfarande känns lite magiskt när det fungerar.

 

Du har arbetat med att använda maskinlärning för att analysera satellitbilder i många år nu. Vad var ditt första projekt?

Min första exponering för satellitbilder var Terra-i-projektet (för att upptäcka avskogning) och jag arbetade på det under mina studier. Jag blev förvånad över mängden fritt tillgängliga satellitdata som produceras av olika rymdmyndigheter (NASA, ESA etc.). Du kan få regelbundna bilder av planeten gratis varje dag eller så och detta är en stor resurs för många vetenskapliga tillämpningar.

 

Kan du dela mer information om “Terra-i”-projektet?

Terra-i-projektet (http://terra-i.org/terra-i.html) startades av professor Andrez Perez-Uribe, från HEIG-VD (Schweiz) och leds nu av Louis Reymondin, från CIAT (Colombia). Idén bakom projektet är att upptäcka avskogning med hjälp av fritt tillgängliga satellitbilder. Vid den tiden arbetade vi med MODIS-bilder (250m pixelupplösning) eftersom de gav en enhetlig och förutsägbar täckning (både spatialt och tidsmässigt). Vi fick en mätning för varje pixel varje få dagar och från denna tidsserie av mätningar kunde vi försöka upptäcka avvikelser eller nyheter som vi kallar dem i maskinlärning ibland.

Detta projekt var mycket intressant eftersom mängden data var en utmaning vid den tiden och det fanns också en del programvaruteknik inblandad för att göra det fungera på flera datorer och så vidare. Från maskinlärningssidan använde det Bayesian Neural Network (inte så djupt vid den tiden 🙂 ) för att förutsäga hur tidsserien för en pixel borde se ut. Om mätningen inte matchade förutsägelsen, då hade vi en avvikelse.

Som en del av detta projekt arbetade jag också med molnborttagning. Vi använde en traditionell signalbehandlingsmetod där du har en tidsserie av mätningar och några av dem kommer att vara helt fel på grund av moln. Vi använde en fourierbaserad metod (HANTS) för att rensa tidsserien innan vi upptäckte nyheter i den. En av svårigheterna var att om vi skulle rensa den för mycket, skulle vi också ta bort nyheter, så det fanns ganska många experiment att göra för att hitta rätt parametrar.

 

Du har också designat och implementerat ett djupinlärningssystem för automatisk klassificering av grödor från flygbilder (drönarbild) av åkrar. Vilka var de största utmaningarna vid den tiden?

Detta var min första riktiga exponering för djupinlärning. Vid den tiden tyckte jag att de största utmaningarna var mer relaterade till att få ramverket att fungera och använda en GPU på rätt sätt än till själva maskinlärningen. Vi använde Theano, som var en av föregångarna till Tensorflow.

Målet med projektet var att klassificera typen av gröda i en åker, från drönarbild. Vi försökte en metod där det djupinlärningsmodellen använde färghistogram som indata, istället för bara den råa bilden. För att få det att fungera relativt snabbt, minns jag att jag måste implementera ett anpassat Theano-lager, ända ner till någon CUDA-kod. Det var en bra lärandeupplevelse vid den tiden och ett bra sätt att gräva lite i de tekniska detaljerna i djupinlärning.

 

Du är officiellt Lead Software och Machine Learning Engineer på Picterra. Hur skulle du beskriva din dagliga verksamhet?

Det varierar verkligen, men en stor del av det handlar om att hålla ett öga på den övergripande arkitekturen för systemet och produkten i allmänhet och kommunicera med olika intressenter. Även om maskinlärning är kärnan i vår verksamhet, inser man snabbt att de flesta tiden inte ägnas åt maskinlärning i sig, utan alla saker runt omkring: datahantering, infrastruktur, UI/UX, prototypering, förståelse av användare osv… Detta är ganska annorlunda än Akademin eller tidigare erfarenheter i större företag där man är mycket mer fokuserad på ett specifikt problem.

Vad som är intressant med Picterra är att vi inte bara kör djupinlärningsmodeller för användare, utan vi tillåter dem också att träna sina egna. Detta skiljer sig från de flesta vanliga maskinlärningsarbetsflöden där du har ett maskinlärningsteam som tränar en modell och sedan publicerar den till produktion. Vad detta innebär är att vi inte kan manuellt leka med träningsparametrarna som man ofta gör. Vi måste hitta en träningsmetod som fungerar för alla våra användare. Detta ledde oss till att skapa vad vi kallar vår “experimentsramverk”, som är ett stort repository av datamängder som simulerar träningsdata som våra användare skulle bygga på plattformen. Vi kan sedan enkelt testa ändringar i vår träningsmetodik mot dessa datamängder och utvärdera om de hjälper eller inte. Istället för att utvärdera en enskild modell, utvärderar vi mer en arkitektur + träningsmetodik.

En annan utmaning är att våra användare inte är maskinlärare, så de vet inte nödvändigtvis vad en träningsmängd är, vad en etikett är och så vidare. Att bygga en UI som tillåter icke-maskinlärare att bygga datamängder och träna maskinlärningsmodeller är en ständig utmaning och det finns mycket samspel mellan UX- och maskinlärningsteam för att säkerställa att vi vägleder användarna i rätt riktning.

 

Vilka är några av de mer intressanta projekten som du har arbetat med?

Jag tycker att det mest intressanta var Custom Detector-prototypen. För 1,5 år sedan hade vi “inbyggda” detektorer på plattformen: de var detektorer som vi tränat själva och gjort tillgängliga för användare. Till exempel hade vi en byggnadsdetektor, en bil-detektor osv…

Detta är det typiska maskinlärningsarbetsflödet: du har en maskinlärare som utvecklar en modell för ett specifikt fall och sedan serverar den till dina kunder.

Men vi ville göra något annorlunda och pusha gränserna lite. Så vi sa: “Vad om vi tillåter användare att träna sina egna modeller direkt på plattformen” ? Det fanns några utmaningar för att göra detta fungera: först ville vi inte att det skulle ta flera timmar. Om du vill behålla den här känslan av interaktivitet, bör träningsprocessen ta några minuter som mest. För det andra ville vi inte kräva tusentals annoteringar, vilket är vad du vanligtvis behöver för stora djupinlärningsmodeller.

Så vi började med en superenkel modell, gjorde en del tester i Jupyter och försökte sedan integrera det i vår plattform och testa hela arbetsflödet, med en grundläggande UI och så vidare. Till en början fungerade det inte så bra i de flesta fall, men det fanns några fall där det fungerade. Det gav oss hopp och vi började iterera över träningsmetodiken och modellen. Efter några månader kunde vi nå en punkt där det fungerade bra, och vi har nu våra användare som använder det hela tiden.

Vad som var intressant med detta var den dubbla utmaningen att hålla träningsprocessen snabb (för närvarande några minuter) och därmed modellen inte för komplex, men samtidigt tillräckligt komplex för att den ska fungera och lösa användarnas problem. Utöver detta fungerar det med få (<100) etiketter för många fall.

Vi tillämpade också många av Googles "Regler för maskinlärning“, i synnerhet de som handlar om att implementera hela pipeline och mått innan du börjar optimera modellen. Det sätter dig i “systemtänkande”-läge där du inser att inte alla dina problem ska hanteras av kärnan i maskinlärningen, utan några av dem kan skjutas till UI, några av dem kan förbearbetas / efterbearbetas osv…

 

Vilka är några av de maskinlärningsteknologier som används på Picterra?

I produktion använder vi för närvarande Pytorch för att träna och köra våra modeller. Vi använder också Tensorflow ibland, för vissa specifika modeller som utvecklats för kunder. Utöver detta är det en ganska standardiserad vetenskaplig Python-stack (numpy, scipy) med några geospatiala bibliotek (gdal) kastade in.

 

Kan du diskutera hur Picterra fungerar i bakgrunden när någon laddar upp bilder och vill träna neurala nätverk för att korrekt annotera objekt?

Självklart, så när du laddar upp en bild, bearbetar och lagrar vi den i ett “Cloud-Optimized-Geotiff” (COG) format på vår blob-lagring (Google Cloud Storage), vilket tillåter oss att snabbt komma åt block av bilden utan att behöva ladda ner hela bilden senare. Detta är en viktig punkt eftersom geospatiala bilder kan vara enorma: vi har användare som regelbundet arbetar med 50000×50000 bilder.

Så för att träna din modell, måste du skapa din träningsmängd via vår webb-UI. Du kommer att göra det genom att definiera 3 typer av områden:

  1. ‘träningsområden’, där du kommer att rita träningsetiketter
  2. ‘testområden’, där modellen kommer att förutsäga för att låta dig visualisera några resultat
  3. ‘noggrannhetsområde’, där du kommer att rita etiketter också, men som inte används för träningsändamål, utan bara för poängsättning

När du har skapat denna mängd, kan du enkelt klicka på ‘Träna’ och vi kommer att träna en detektor för dig. Vad som händer sedan är att vi köar en träningsuppgift, startar en av våra GPU-arbetare (nya GPU-arbetare startas automatiskt om det finns många samtidiga jobb), tränar din modell, sparar dess vikter till blob-lagringen och slutligen förutsäger i ‘testområdet’ för att visa på UI. Från där kan du iterera över din modell. Typiskt sett kommer du att upptäcka några misstag i ‘testområden’ och lägga till ‘träningsområden’ för att hjälpa modellen att förbättras.

När du är nöjd med poängen för din modell, kan du köra den i stor skala. Från användarens synvinkel är detta verkligen enkelt: du behöver bara klicka på ‘Upptäck’ bredvid bilden du vill köra den på. Men det är lite mer invecklat under huven om bilden är stor. För att påskynda saker, hantera fel och undvika att upptäckten tar flera timmar, bryter vi ner stora upptäckter i rutnätsceller och kör en oberoende upptäcktsuppgift för varje cell. Detta tillåter oss att köra mycket storskaliga upptäckter. Till exempel hade vi en kund som körde upptäckt över hela Danmark på 25cm-bilder, vilket är i storleksordningen TB-data – för ett enda projekt. Vi har täckt ett liknande projekt i detta medium-inlägg.

 

Finns det något annat du vill dela om Picterra?

Jag tycker att det som är bra med Picterra är att det är en unik produkt, vid skärningspunkten mellan maskinlärning och geospatial. Vad som skiljer oss från andra företag som bearbetar geospatiala data är att vi utrustar våra användare med en självbetjäningsplattform. De kan enkelt hitta platser, analysera mönster och upptäcka och räkna objekt på jordobservationsbilder. Det vore omöjligt utan maskinlärning, men våra användare behöver inte ens grundläggande programmeringskunskaper – plattformen gör jobbet baserat på några få mänskliga annoteringar. För de som vill gå djupare och lära sig de grundläggande koncepten i maskinlärning inom det geospatiala området, har vi lanserat en omfattande online-kurs.

Vad som också är värt att nämna är att möjliga tillämpningar av Picterra är oändliga – detektorer byggda på plattformen har använts i stadsförvaltning, precisionsjordbruk, skogsförvaltning, humanitär och katastrofriskhantering, jordbruk osv, för att nämna några av de vanligaste tillämpningarna. Vi blir förvånade varje dag av vad våra användare försöker göra med vår plattform. Du kan prova det och låta oss veta hur det fungerade på sociala medier.

Tack för det bra samtalet och för att du delade med oss hur kraftfull Picterra är, läsare som vill lära sig mer bör besöka Picterras webbplats.

Antoine är en visionär ledare och medgrundare av Unite.AI, driven av en outtröttlig passion för att forma och främja framtiden för AI och robotik. En serieentreprenör, han tror att AI kommer att vara lika omstörtande för samhället som elektricitet, och fångas ofta i extas över potentialen för omstörtande teknologier och AGI. Som en futurist, är han dedikerad till att utforska hur dessa innovationer kommer att forma vår värld. Dessutom är han grundare av Securities.io, en plattform som fokuserar på att investera i banbrytande teknologier som omdefinierar framtiden och omformar hela sektorer.