English version of this page

Bildeklassifisering med ml5.js og MobileNet

Creative Computing Hub Oslo (C2HO) presenterer en serie workshops med fokus på ml5.js, et nybegynnervennlig bibliotek for p5.js som gjør det mulig å bruke maskinlæring direkte i nettleseren din.

Image may contain: Purple, Gesture, Art, Finger, Violet.

MobileNet er en klasse av effektive modeller for mobil- og innebygde synsapplikasjoner. Den er designet med tanke på mobile enheter for å støtte klassifisering, deteksjon og mer. MobileNet er basert på en strømlinjeformet arkitektur som bruker dybdevis separerbare konvolusjoner for å bygge lette dype nevrale nettverk, og veier nøyaktighet opp mot lav latenstid på enheten og lite minneavtrykk. I denne workshopen vil vi bruke webkameraet på datamaskinen din til å trene MobileNet til å gjenkjenne videoinngang ved hjelp av ml5 image classifier.

OBS: Husk å tillate bruk av webkamera i nettleseren din når du blir bedt om det.

Del 1: Last inn MobileNet-funksjoner

Vi kommer til å tilby treningsdata gjennom webkameraet, så vi begynner med å sette opp et videoelement ved hjelp av p5-funksjonen createCapture.

Det vi kommer til å gjøre for å bygge vår bildeklassifisør er faktisk å trekke ut funksjonene til den forhåndstrente MobileNet-modellen og deretter kun trene om de siste lagene i denne modellen. Dette er kjent som transferlæring. Vi overfører det meste av hva MobileNet-modellen har lært til et nytt klassifiseringsproblem. Vanligvis er dype nevrale nettverk som de som brukes i bildeklassifisering veldig store. Disse modellene tar lang tid å trene, men ved å trekke ut funksjonene kan vi dra nytte av denne intensive treningen samtidig som vi skreddersyr modellen til hvilken som helst bildeklassifiseringsoppgave vi ser passer.

Etter å ha trukket ut MobileNet-funksjonene kan vi lage en ny ml5 classifier basert på disse funksjonene. For å gjøre dette må vi gi den vår videovariabel som input og definere noen innstillinger for modellen, hovedsakelig hvor mange klasser vi ønsker at den skal kunne skille mellom.

Vis og rediger kode

Del 2: Sette opp grensesnittet for bildeklassifisøren

Nå som vi har satt opp vår bildeklassifisør, kan vi legge til noen knapper for å samle eksempler for å trene modellen. I våre tidligere ml5-workshops har vi brukt lerretet vårt til å vise og legge inn data, men her vil vi legge til knappene direkte i index.html-filen vår i stedet. Dette vil gjøre skriptkoden vår litt mer lesbar. For å få tilgang til og oppdatere variablene i index.html-filen vår, vil vi bruke p5-funksjonen select inne i skriptet vårt.

Vi begynner med å legge til noen knapper og etiketter i index.html-filen vår. Vi vil bruke to knapper for å legge til data for modellen vår til å trene på, én for hver klasse. Vi ønsker også å vise hvor mange eksempler vi allerede har lagt til for hver klasse. I tillegg vil vi sette opp en tekst for å vise etiketten vår modell predikerer og modellens konfidensscore for den nåværende prediksjonen.

Oppførselen til hver av disse knappene er definert i vår funksjon buttonSetup ved hjelp av p5-funksjonen mousePressed. Her blir hvert nytt bilde vi samler fra vår videokilde lagt til i vår bildeklassifisør, og vår eksempelteller økes for å vise den nåværende mengden eksempler samlet for hver klasse.

Image may contain: Flower, Plant, Petal, Neck, Sleeve.

Vis og rediger kode

Del 3: Samle data og trene modellen

I tillegg til knappene vi la til ovenfor, vil vi nå legge til en trene-knapp og en prediker-knapp til vårt knappeoppsett og index.html-fil.

Trene-knappen vil kalle ml5-funksjonen train for vår bildeklassifisør. Merk at dette vil returnere en feilmelding hvis vi ikke har gitt modellen noen data å trene på ennå. Mens modellen trener, vil vi ha tilgang til en loss-verdi (tap-verdi). Vi kan tenke på denne loss-verdien som et motsatt mål for modellens nøyaktighet; jo mer nøyaktige modellens forutsigelser er under trening, jo lavere vil loss-verdien være. Vi vil skrive ut denne verdien ved siden av vår trene-knapp mens modellen trener.

Prediker-knappen vil kalle ml5-funksjonen classify. Denne funksjonen krever at vi definerer en funksjon for å håndtere resultatene. For å håndtere forutsigelsene som returneres av vår modell, vil vi definere en funksjon vi vil kalle gotResults. For nå vil vi ganske enkelt vise den predikerte klassen og tilliten modellen har til sin egen forutsigelse ved å bruke etikett- og tillitstaggene i vår index.html-fil.

Vis og rediger kode

Del 4: Visualisere klassifisering

For å gjøre det klarere hva modellen vår forutsier, kan vi generere litt visuell tilbakemelding. I workshopen trener jeg modellen til å gjenkjenne når jeg holder min Lego-blomst. La oss gi dette programmet litt personlighet ved å vise et smilende ansikt når modellen gjenkjenner blomsten, og et trist ansikt når blomsten mangler.

Først legger vi til noen bilder i vårt p5-editorprosjekt. Vi vil bruke p5-funksjonen preload for å sikre at bildene lastes før programmet starter å kjøre. For visualiseringen ønsker vi at et lerret skal vises i tillegg til vår videoinngang, så la oss lage en draw-funksjon. P5-funksjonen draw kjører i en løkke så lenge skriptet kjører. Opprinnelig vil vi vise et nøytralt ansikt, men når klassifisøren har oppdaget blomsten (eller mangelen på blomst), ønsker vi å skifte bildet til enten glad eller trist. For å gjøre dette vil vi legge til litt logikk i vår funksjon for å håndtere klassifiseringsresultatene. Bildet kan inneholde: Lys, Lilla, Blå, Fiolett, Materielle egenskaper.

Image may contain: Light, Purple, Blue, Violet, Material property.

Vis og rediger kode

Del 5: Lagre og laste

Når vi er fornøyd med modellen vår, kan vi lagre den slik at vi ikke trenger å trene den på nytt hver gang vi laster inn applikasjonen vår. Igjen vil vi legge til våre nå lagre- og laste-knapper i html-filen vår. Lagre-knappen vil utløse modellen til å lage to filer, model.json og model_weights.bin. Den første beskriver strukturen på modellen, og den andre inneholder vektene som resulterer fra vår trening. Sørg for at du tillater nettleseren din å laste ned flere filer fra p5-editoren når du blir bedt om det!

Laste-funksjonen åpner en filutforsker og lar oss velge de to filene vi opprettet. Nå kan vi ganske enkelt trykke på vår prediker-knapp uten å samle inn ny data eller trene modellen.

Vis og rediger kode

Gå Videre

Opprett et video-kontrollert instrument ved å legge til lyd

Av Benedikte Wallace
Publisert 20. apr. 2024 13:02 - Sist endret 13. mai 2024 10:07