Imagine samler årlig rundt 400 deltakere fra industri, akademia og entusiaster til Silicon Valley for å dele det siste innen Edge AI.
Jeg ble invitert til å presentere gjennombrudd i bruk av bildegjenkjenning på minimal maskinvare, ved hjelp av syntetisk treningsdata.
Så hvordan endte en softwareutvikler fra Nord-Norge med å dele scene med Nvidia, Arm og AWS for å demonstrere det siste innen Edge AI?
Hva er Edge AI?
Edge AI innebærer bruk av kunstig intelligens direkte på lokale enheter, som sensorer og mobile enheter, i stedet for å behandle data i skyen.
Edge er lånt fra nettverkstopografi, og beskriver enhetene som ligger i ytterkant.
Bruksområdene som har utviklet seg kraftigst de siste årene er å kjenne igjen gjenstander fra kamera, verbale nøkkelord fra mikrofon og unormal oppførsel fra mekaniske maskiner gjennom vibrasjonssensorer. Dette er komplekse signaler hvor tradisjonell signalbehandling er lite robust i møte med den virkelige verden.
Ved hjelp av maskinlæring kan en trene klassifiseringsmodeller kun ved å mate inn data og merkelapper.
«Å bruke modellene har vært ressurskrevende og har ofte måtte løses ved at sensorene ute i felten strømmer data til tyngre jern i skyen.»
Fordelene med Edge AI
Å bruke modellene, f.eks til å gjenkjenne lyd og bilder, har vært ressurskrevende og ofte måtte løses ved at sensorene ute i felten strømmer data til tyngre jern i skyen.
Dette utelukker i praksis batteridrift og er veldig sårbart ved ustabilt nettverk. Selv der man har med seg nok energi, som i en bil, ønsker man ikke at kritiske funksjoner som antikollisjon skal være avhengig av god ping.
Personvern er en annen viktig driver for Edge AI. Stemmeassistenten på telefonen din består av to forskjellige mekanismer. Et dypt nevralt nettverk (DNN) er trent til å kjenne igjen frasen “Hei [merkevare]” lokalt på enheten. Dette er Edge AI. Først når denne klassifiserer at du trenger hjelp begynner den å strømme lyd til skyen for å kunne gjøre mer sofistikert tolkning av hva du sier.
Nyere biler og telefoner har ganske kraftig maskinvare. Det har derimot ikke en aktivitetsring eller et headset som styres med stemmekommandoer.
TinyML er en kategori innen Edge AI som omfatter imponerende fremskritt i å få maskinlæringsmodeller til å kjøre på begrenset maskinvare. Mikrokontrollere som tidligere hadde i oppgave å flippe bits i register er nå i stand til å dytte 30 bilder per sekund gjennom et nevralt nettverk for å se etter noe kjent, det som kalles inferens.
Fra DIPS til Edge AI
Jeg har i 20 år jobbet som utvikler hos sykehusjournalleverandøren DIPS, den senere tid som tech lead innen forskning og innovasjon. Jeg har vært over middels interessert i det meste av ny teknologi, og hvordan det kan anvendes til noe nyttig.
Etter å ha blogget aktivt om sensorbaserte prosjekter fikk jeg tilbud om å teste Edge Impulse Studio. Dette er en web-basert utviklerplattform som strømlinjeformer en del trivielt arbeid som er nødvendig når man utvikler, tester, bygger og deployerer ML-baserte applikasjoner. Samme arbeidsflyt kan brukes enten om man skal deployere til GPU-baserte minidatamaskiner som NVIDIA Jetson, eller MCU-baserte Arduinoer.
I det siste har det også sprunget frem et nytt alternativ; spesialiserte energigjerrige prosessorer for nevrale nettverk, NPU.
Jeg hadde minimalt med praktisk erfaring med maskinlæring på dette tidspunktet, og det var fremdeles et år igjen til ChatGPT skulle starte en ny AI-boom.
Derfor ble jeg fullstendig overveldet da jeg i løpet av en kveld bokstavelig talt kunne få en Arduino med batteri og et kamera til å skille epler fra appelsiner.
Over de neste par årene resulterte dette i artikler om prosjekter der jeg prøvde å anvende teknologien til noe nyttig, hovedsakelig innen helse. En hoste-teller vil være svært nyttig for astmatikere og personer som behandles for KOLS. Den teller host uten at en trenger å føle seg overvåket, kan fungere måneder uten å måtte lades og lar en lege justere behandling og se resultatene i sanntid.
Å kjenne igjen et blodig kompress
Jeg lagde også en prototype på en wearable som visuelt teller utstyr og materialer som brukes under kirurgi, for å unngå at noe blir glemt igjen i pasienten.
Her støtte jeg på en stor utfordring: Å lage en modell som kan skille et blodig kompress fra en plastikkpinsett krever noen hundre bilder av hver.
På hvert bilde må en tegne en rute rundt hver gjenstand en er interessert i og angi en kategori. Hvis en passer på å variere vinkel og lyskilder mellom bildene kan en ende opp med en modell som er ganske robust og som kan kjenne igjen gjenstandene selv i miljøer modellen ikke er trent på.
I kirurgi består imidlertid mange gjenstander av krom og gjennomsiktige materialer. Selv om mennesker lett kan bli lurt av optiske illusjoner, er vi ganske gode på å forstå at gjenstander har form i tre dimensjoner. Ved å se en reflekterende eller gjennomsiktig gjenstand i noen få forskjellige vinkler skiller vi fort snørr fra bart.
Innen computer vision er det foreløpig 2D som gjelder. Modellene trenes til å skille på gjenstander ved noe som kalles features, visuelle egenskaper. Egenskapene kan være kanter, hjørner, hull, prikker o.l. Sterkt forenklet kan vi tenke på dette som en grafe med en masse punkter. Hvert punkt tilhører visuelle egenskaper til en av gjenstandene vi skal kjenne igjen. Ved en godt trent modell vil punktene til hver gjenstand være gruppert i et område av grafen.
Når vi så tester modellen på et bilde med en eller flere gjenstander, prøver vi å finne ut hvor godt egenskapene i forskjellige områder i bildet passer med gruppene i modellen. Er de over en viss terskel, konkluderer vi med at gjenstandene er identifisert.
Derfor bør utviklere bry seg om IoT - og sånn kommer du i gang
Hundretalls tusen bilder
Siden reflekterende og gjennomsiktige overflater visuelt varierer dramatisk i forskjellig lys og i nærheten av andre gjenstander, gir noen hundre bilder en grafe der punktene ikke lar seg gruppere godt. Modellen gjetter feil og er ubrukelig.
Vi må opp i titalls-, eller hundretalls tusen bilder før punktene lar seg gruppere. For å lage gode modeller bør denne treningsdataen helst fanges med optikk som er lik den modellen skal brukes med.
Jeg måtte altså ta bilde av de kirurgiske instrumentene med Arduinoen, tegne små ruter og kategorisere alle gjenstandene på hvert bilde, gjøre små justeringer på vinklene til hver gjenstand, flytte litt på og dimme lampene før neste bilde. Dette kunne fort ta 5 minutter og jeg gav opp da karpaltunnelsyndromet tok overhånd, fortsatt uten en brukbar modell.
Jeg skulle egentlig bli spillutvikler og har puslet med 3D-programmering siden ungdommen. Det slo meg at det måtte være mulig å rendre treningsbildene.
Løsningen: 3D-modeller
Jeg kjøpte noen 3D-modeller som liknet de kirurgiske instrumentene jeg hadde for testing, og lagde noen animasjoner i Blender. Ved å rotere kameraet endte jeg opp med fotorealistiske stillbilder. Hvert bilde tok et par minutter å rendre og kategoriseringen av hver gjenstand gjenstod.
Mens jeg kjempet med Blender sitt Python API for å automatisere det siste, snublet jeg over NVIDIA Omniverse Replicator. Det viste seg at jeg hadde funnet opp på nytt noe som kalles domain randomization. Selv om Omniverse og Replicator var fullt av barnesykdommer, var det perfekt for mitt behov:
Jeg kunne laste inn modellene mine, lage bakgrunner og plassere lys. Så kunne jeg skrive enkle prosedyrer som stokket om på alt mellom hvert bilde. Takket være et RTX-skjermkort kunne jeg generere et par bilder per sekund og få merkelappene med på kjøpet. Over natten endte jeg opp med et ganske varmt rom og 30.000 bilder klar for trening.
«Dette skapte store bølger i Edge AI-miljøet.»
Modellen fungerte på en Jetson med 640*640 pixel input og mest imponerende av alt på en mikrokontroller som kun har nok RAM til å tolke 96*96 pixels. Dette skapte store bølger i Edge AI-miljøet.
Jeg eksperimenterte videre med å plassere et tilfeldig bakgrunnsbilde bak de reflekterende gjenstandene, noe som dramatisk reduserte falske positiver. Da jeg testet å bytte til et vidvinkelobjektiv kunne jeg kjapt tilpasse den virtuelle optikken.
Jeg nådde grenser hvor modellene ikke lenger ble forbedret av flere bilder. AI-modellene var mettet, begrensningene lå i dybden på det nevrale nettverket, oppløsning og optikk. Totalt har jeg generert over 2 millioner treningsbilder til forskjellige prosjekter det siste året.
Sammen med Edge Impulse fikk vi utviklet en plugin til Omniverse som lar oss teste modellen i det virtuelle miljøet, dette er veldig nyttig for å røyke ut problemer og teste grensene før deployering.
– Vil AI redde eller ødelegge verden?
Fordelen med tilfeldig treningsdata
Det viste seg at store og små teknologiselskaper sliter med de samme problemene:
Mange setter ut arbeidet med å fange og annotere data til lavkostland. I Belgia finnes det tilrettelagt arbeidstilpasning for mennesker med psykisk utviklingshemming der de kategoriserer data i kortere økter, godt ivaretatt.
Jeg tviler på at digitale sweatshops på Filipinene overholder liknende arbeidsvern.
Når treningsdataen lages manuelt blir den som regel dårlig balansert, noe som kan føre til databias og overfitting. Databias medfører en tendens til å gjette dårlig innen underrepresenterte kategorier, mens overfitting forekommer når modellen henger seg opp i uvesentlige detaljer fremfor å generalisere.
Med metoden jeg har vist lager man syntetisk generert treningsdata hvor fordelingen er overlatt til en randomgenerator.
En slipper ikke automatisk unna de nevnte problemene, men en randomgenerator er mye bedre til å stokke om på skalpeller enn jeg er. Metoden er også overførbar til andre modaliteter utover bilder - lyd, bevegelse, hjerteslag, hjerneaktivitet, hva som helst.
Ryktene antyder at GPT-5, kjent i dag som Orion, vil være trent på syntetisk data generert av en egen modell, kjent under navnet Strawberry. Gitt at den klarer å stave sitt eget navn riktig, vil Strawberry kunne mate Orion treningsdata av mye høyere kvalitet enn affekterte innlegg fra nettforum.
Syntetiske pasientjournaler
For bruk av AI i journalsystemer har vi en annen begrensning når det gjelder tilgang på treningsdata - personvern. Vi lager derfor syntetiske pasientjournaler som kan brukes for å trene spesialiserte språkmodeller.
Dette kan f.eks være lette modeller som kan fange opp avglemte pasienter, uten å måtte bruke store språkmodeller (LLM) på alt. Vi vil snart kunne lage så realistiske syntetiske pasientjournaler at det vil være vanskelig å skille de fra ekte.
Jeg har hele veien vært betenkt rundt mulige svakheter ved syntetisk treningsdata. Likevel valgte jeg å forfølge dette da tradisjonell fremgangsmåte sviktet og dette var eneste måte jeg kunne få resultater. Jeg anbefaler likevel at en bruker tradisjonell datafangst for å lage et mindre datasett for å validere modellene.
Jeg er opptatt av at denne teknologien skal komme pasienter og helsepersonell til gode, derfor var et av mine budskap på konferansen Imagine at dataen fra enhetene disse selskapene lager, ikke må stoppe hos brukerens telefon, de må nå frem til helsevesenet.
En god start for å oppnå dette er ved å sørge for at nye enheter kan utveksle data etter etablerte helsedatastandarder. DIPS legger til rette for å teste om nye innovasjoner kan snakke med sykehussystemer med en gratis sandkasse open.dips.no.
Opplevelse for livet
Jeg har altså ikke funnet opp noe nytt, men vært tidlig ute med å kombinere en rekke teknologiske fremskritt på en måte som det er stor etterspørsel etter.
Dette har åpnet mange dører, hvor jeg f.eks får tilsendt spennende hardware som er under utvikling.
I slutten av september førte dette til en drømmeuke i San Franscico og Palo Alto. Å diskutere idéer med de mest kreative og erfarne i en kraftig voksende bransje, midt i nabolaget til Google, Stanford, Waymo, Tesla, Microsoft og Apple, er en opplevelse for livet.
Silicon Valley er unektelig samlingsstedet for tech, det slo meg likevel at de fleste folkene jeg hadde møtt snart skulle pakke koffertene og dra hjem for å fortsette å klekke ut nye idéer i Israel, Finland, Spania, Irland, Nederland, Kina, Sveits, Argentina, Russland og Italia, for å nevne noen land.
Og Norge.
📺 Opptak fra konferansen kan sees her, mitt innlegg er key note for del 2.
💡 Mine prosjekter: